您应当知道的 MQL5 向导技术(第 33 部分):高斯(Gaussian)进程核心·进阶篇
「从后验方差看信号置信度」
高斯过程回归里,后验协方差矩阵 Σ* 直接决定预测值的离散程度。上面这段把 Σ* 的对角线抽出来当成各输出维度的方差,等于给每个小布盯盘给出的价格路径点标了“不确定带”。 具体看,_sigma_star 由先验协方差 _k_ss 减去观测噪声项 _v 与 _k_s 转置的乘积得到;_variances 只取对角,忽略维度间协变,适合快速打印排查。实盘里若某根 K 线的 _variances 数值突然放大到近 20 根均值的两倍以上,该点预测可信度倾向走低,外汇与贵金属波动中这种跳变常出现在数据行情前后,属高风险时段。 把 SetOutput(_variances) 接在 SetOutput(Output) 后面,MT5 自定义指标就能同步画出均值线与方差带。开 MT5 把这段塞进 OnCalculate 末尾,调 _v 矩阵里的噪声标量,能直接看到方差带胖瘦随参数变化。
matrix _sigma_star = _k_ss - (_v.MatMul(_k_s.Transpose())); vector _variances = _sigma_star.Diag(); class=class="str">"cmt">//Print(" sigma star: ",_sigma_star); Print(" pre variances: ",_variances); Output = _mu_star; SetOutput(Output); SetOutput(_variances); Print(" variances: ",_variances); }
增量数据怎么塞进高斯过程核
GP 核心吃两种时间序列都行:绝对值(比如收盘价本身)和增量值(比如相邻两根 K 线的收盘差)。这篇实测用的是后者去跑 RBF 核,做法是从不同偏移位拷贝收盘价,再算两根柱线间隔为 1 的差值填进 '_past' 向量。 价格变化还得归一化,把原始差值压到 -1.0 到 +1.0 区间。我们测试时输入用 double 原始差值,只对预测点做归一化,靠 SetOutput 函数完成。 归一化本质是把向量重缩放到 0.0~+1.0:逆推回来,输出值小于 0.5 代表原始差值为负,高于 0.5 才是正的变化。外汇和贵金属波动大,这种缩放只是数值稳定手段,不预示方向,实际信号仍可能反向。 下面这段是 SetOutput 的实现,逻辑不复杂但容易抄错边界:先拷一份原向量,确认没 NaN 且极差大于 0 才逐元素重映射;非负值映射到 0.5~1.0,负值映射到 0.0~0.5,否则全填 0.5 当中性。
<span class="comment">class=class="str">"cmt">//+------------------------------------------------------------------+</span> <span class="comment">class=class="str">"cmt">//|</span> <span class="comment">class=class="str">"cmt">//+------------------------------------------------------------------+</span> <span class="keyword">class="type">void</span> CSignalGauss::SetOutput(<span class="keyword">vector</span> &Output) { <span class="keyword">vector</span> _copy; _copy.Copy(Output); <span class="keyword">if</span>(Output.HasNan() == <span class="number">class="num">0</span> && _copy.Max() - _copy.Min() > <span class="number">class="num">0.0</span>) { <span class="keyword">for</span> (<span class="keyword">class="type">int</span> i = <span class="number">class="num">0</span>; i < <span class="keyword">class="type">int</span>(Output.Size()); i++) { <span class="keyword">if</span>(_copy[i] >= <span class="number">class="num">0.0</span>) { Output[i] = <span class="number">class="num">0.5</span> + (<span class="number">class="num">0.5</span> * ((_copy[i] - _copy.Min()) / (_copy.Max() - _copy.Min()))); } <span class="keyword">else</span> <span class="keyword">if</span>(_copy[i] < <span class="number">class="num">0.0</span>) { Output[i] = (<span class="number">class="num">0.5</span> * ((_copy[i] - _copy.Min()) / (_copy.Max() - _copy.Min()))); } } } <span class="keyword">else</span> { Output.Fill(<span class="number">class="num">0.5</span>); } }
◍ EURUSD 日线 RBF 系统的实测边界
我们用 GP 核心的 RBF 节点搭了一套智能系统,直接丢到 EURUSD 的 2023 年日线周期上跑。测试设置大多来自极短的优化窗口,只有少数情况例外,而且都没做过前向遍历交叉验证。 实盘前必须自己补做两件事:拉长历史样本重新跑优化,再用前向遍历确认泛化能力。外汇和贵金属杠杆高,这种未交叉验证的设定直接上真金白银属于高风险操作。 目前跑出来的结果列在下方,但记住这些数字只是短窗回测产物,不代表未来概率分布。
「高斯核还能搭什么信号」
径向基函数只是我们啃下的第一种核,后面文章会换其他核格式与替代设置接着测。目前这套高斯过程核心只验证了信号本身,没碰不确定性量化——那本该是它区别于普通预测器的地方。 搭配什么信号更稳,只能靠你在 MT5 里自己跑。MQL5 向导能在一个智能系统里挂多个信号并各自调权重,新读者翻两篇向导指导就能上手。 像 RSI、随机振荡器、能量潮甚至新闻情绪类指标,和高斯核心组队倾向更合拍;简单移动平均、均线交叉、价格通道这类高滞后指标,配对效果可能偏弱。外汇与贵金属波动剧烈,多信号组合也仅是概率优势,不是避险。 先拿 RSI 周期 14 配径向基核心跑一轮 EUR/USD 的 H1 回测,看权重优化后曲线是否比单核平滑,再决定要不要加第二个振荡器。