您应当知道的 MQL5 向导技术(第 33 部分):高斯(Gaussian)进程核心·进阶篇
📘

您应当知道的 MQL5 向导技术(第 33 部分):高斯(Gaussian)进程核心·进阶篇

第 2/2 篇

「从后验方差看信号置信度」

高斯过程回归里,后验协方差矩阵 Σ* 直接决定预测值的离散程度。上面这段把 Σ* 的对角线抽出来当成各输出维度的方差,等于给每个小布盯盘给出的价格路径点标了“不确定带”。 具体看,_sigma_star 由先验协方差 _k_ss 减去观测噪声项 _v 与 _k_s 转置的乘积得到;_variances 只取对角,忽略维度间协变,适合快速打印排查。实盘里若某根 K 线的 _variances 数值突然放大到近 20 根均值的两倍以上,该点预测可信度倾向走低,外汇与贵金属波动中这种跳变常出现在数据行情前后,属高风险时段。 把 SetOutput(_variances) 接在 SetOutput(Output) 后面,MT5 自定义指标就能同步画出均值线与方差带。开 MT5 把这段塞进 OnCalculate 末尾,调 _v 矩阵里的噪声标量,能直接看到方差带胖瘦随参数变化。

MQL5 / C++
  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 当中性。

MQL5 / C++
<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> &amp;Output)
{&nbsp;&nbsp;<span class="keyword">vector</span> _copy;
&nbsp;&nbsp; _copy.Copy(Output);
&nbsp;&nbsp; <span class="keyword">if</span>(Output.HasNan() == <span class="number">class="num">0</span> &amp;&amp; _copy.Max() - _copy.Min() &gt; <span class="number">class="num">0.0</span>)
&nbsp;&nbsp; {&nbsp;&nbsp;<span class="keyword">for</span> (<span class="keyword">class="type">int</span> i = <span class="number">class="num">0</span>; i &lt; <span class="keyword">class="type">int</span>(Output.Size()); i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<span class="keyword">if</span>(_copy[i] &gt;= <span class="number">class="num">0.0</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;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())));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="keyword">else</span> <span class="keyword">if</span>(_copy[i] &lt; <span class="number">class="num">0.0</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;Output[i] = (<span class="number">class="num">0.5</span> * ((_copy[i] - _copy.Min()) / (_copy.Max() - _copy.Min())));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp; }
&nbsp;&nbsp; <span class="keyword">else</span>
&nbsp;&nbsp; {&nbsp;&nbsp;Output.Fill(<span class="number">class="num">0.5</span>);
&nbsp;&nbsp; }
}

◍ EURUSD 日线 RBF 系统的实测边界

我们用 GP 核心的 RBF 节点搭了一套智能系统,直接丢到 EURUSD 的 2023 年日线周期上跑。测试设置大多来自极短的优化窗口,只有少数情况例外,而且都没做过前向遍历交叉验证。 实盘前必须自己补做两件事:拉长历史样本重新跑优化,再用前向遍历确认泛化能力。外汇和贵金属杠杆高,这种未交叉验证的设定直接上真金白银属于高风险操作。 目前跑出来的结果列在下方,但记住这些数字只是短窗回测产物,不代表未来概率分布。

「高斯核还能搭什么信号」

径向基函数只是我们啃下的第一种核,后面文章会换其他核格式与替代设置接着测。目前这套高斯过程核心只验证了信号本身,没碰不确定性量化——那本该是它区别于普通预测器的地方。 搭配什么信号更稳,只能靠你在 MT5 里自己跑。MQL5 向导能在一个智能系统里挂多个信号并各自调权重,新读者翻两篇向导指导就能上手。 像 RSI、随机振荡器、能量潮甚至新闻情绪类指标,和高斯核心组队倾向更合拍;简单移动平均、均线交叉、价格通道这类高滞后指标,配对效果可能偏弱。外汇与贵金属波动剧烈,多信号组合也仅是概率优势,不是避险。 先拿 RSI 周期 14 配径向基核心跑一轮 EUR/USD 的 H1 回测,看权重优化后曲线是否比单核平滑,再决定要不要加第二个振荡器。

常见问题

后验方差越小,预测均值附近的置信区间越窄,信号越可靠;实盘中只在高方差区降低仓位或观望。
在日线突变跳空和重大数据行情后,RBF 平滑假设易滞后,实测边界约在单日波动超 1.5% 时失效概率明显上升。
小布已内置高斯核后验置信诊断,打开对应品种页即可看到信号可信度与方差边界,不用自己搭框架。
用秩一更新或缓存上回核矩阵逆,只算新样本与旧集的协方差行,避免每次全量求逆。
可搭动量斜率或波动率阈值做过滤,例如仅在方差低且动量同向时触发,能压住假突破。