机器学习中的高斯过程:MQL5中的回归模型(基础篇)
📘

机器学习中的高斯过程:MQL5中的回归模型(基础篇)

第 1/3 篇

用高斯过程在MT5里做回归

高斯过程(Gaussian Process, GP)把回归看成函数的概率分布:给定一组观测点,它对未观测点的输出给出均值与方差,而不是单点预测。在外汇与贵金属这种高噪声、非平稳的品种上,GP 给出的置信带比普通拟合线更有参考价值,但请记住模型输出只是概率倾向,实盘仍属高风险。 MQL5 里没有内建 GP 类,但可用矩阵运算自行实现核函数与求解。下面这段用平方指数核做简单一维回归,读者可直接开 MT5 新建脚本粘贴验证。 核宽参数 length_scale 控制平滑度:设太小会过拟合历史噪点,设太大则欠拟合趋势。建议先用 EURUSD 的 H1 收盘跑一遍,观察预测带在拐点处的扩张现象。

MQL5 / C++
class="type">class="kw">double SquaredExpKernel(class="type">class="kw">double x1, class="type">class="kw">double x2, class="type">class="kw">double length_scale)
{
   class="type">class="kw">double diff = x1 - x2;
   class="kw">return exp(-(diff*diff)/(class="num">2*length_scale*length_scale)); class=class="str">"cmt">// 平方指数核:距离越近权重越高
}

class="type">void OnStart()
{
   class="type">int n = class="num">50;
   class="type">class="kw">double X[class="num">50], Y[class="num">50];
   for(class="type">int i=class="num">0; i<n; i++) { X[i] = i; Y[i] = i*class="num">0.1 + MathSin(i*class="num">0.3); } class=class="str">"cmt">// 构造示例序列
   class="type">class="kw">double K[class="num">50][class="num">50];
   class="type">class="kw">double ls = class="num">3.0; class=class="str">"cmt">// 核宽参数,可调
   for(class="type">int i=class="num">0; i<n; i++)
      for(class="type">int j=class="num">0; j<n; j++)
         K[i][j] = SquaredExpKernel(X[i], X[j], ls); class=class="str">"cmt">// 填协方差矩阵
   class=class="str">"cmt">// 此处省略求逆与预测步骤,实际需 MatrixInverse + 矩阵乘
}

「为什么 GP 能给带误差带的预测」

普通回归模型吐出来的是一个点,比如「下一根 H4 收盘 1.0850」,但高斯过程(GP)给的是整条后验分布:均值加一个随距离变宽的区间。对做价格行为的人而言,这等于把「我有多不确定」直接画在图上,而不是靠肉眼估波动率。 GP 本质是靠核函数(协方差函数)衡量两段行情的相似度。EURUSD 的日线若用 Squared Exponential 核,历史里相距 20 根以内的形态会被认为强相关,超过 80 根相关迅速衰减到近 0——这个尺度由核超参数控制,不是拍脑袋定的。 核还能加减乘:把周期核(捕捉 34 周期左右的摆动)加进平滑核,就能同时拟合趋势与节奏。超参数靠最大化边际似然来估,MT5 上跑一遍优化,通常 5~8 次迭代就收敛,比网格搜轻量得多。 外汇与贵金属杠杆高、跳空频繁,GP 的区间只是概率意义上的可能范围,实际穿破区间属正常风险,别当防守铁壁用。

◍ 高斯过程怎么给函数算概率

把视野从单点随机变量拉到整条函数曲线:普通正态分布只管一个数值,高斯过程管的是一组随机变量,只要任取有限个点,它们联合起来就服从多元正态分布。这意味着在 MT5 里做信号建模时,你拿到的不是一条死板的拟合线,而是一整片带置信带宽的可能走势。 它属于非参数模型,不必像线性回归那样先拍板用线性还是多项式。背后假定有个观测不到的隐函数 f(x) 在主导真实依赖,我们能采到的只是 x 处叠了噪声的 y。基础假设写得很直白:f(x) ~ N(μ, Σ),μ 常直接取 0 省事,Σ 靠核函数 K(x, x') 算出来,元素值就是两点间的相关强度。 核函数才是命门。它直接决定曲线的光滑度、周期性和非平稳性——换一个核,小布盯盘里那条预测带可能从平滑变成带锯齿。最终目标就一件事:拿着有限数据 D=(X,y) 把隐函数 f(x) 还原出来,X 是特征集,y 是带噪标签。外汇与贵金属波动高风险,这类还原只给概率倾向,别当确定性结论。

用贝叶斯把不确定性写进预测里

高斯过程走的是贝叶斯推断的路子:把先验认知和观测数据揉在一起,吐出来的不是单点预测,而是一整条带置信区间的分布。这和神经网络、SVM 很不一样——后者多数只给一个值,不确定性得你自己脑补。

核心就是贝叶斯定理:后验正比于先验乘似然再除以边缘概率。落到高斯过程里,假设 H 换成能生成样本的函数分布 f(x),数据 D 就是训练集 (X, y),公式变成 p(fy,X) ∝ p(yf,X)·p(fX) / p(yX)。
关键红利在共轭性:因为先验 p(fX) 和似然 p(yf,X) 都是高斯,后验 p(fy,X) 也还是高斯过程,只是均值和协方差被数据刷新了一遍。这意味着你开 MT5 跑 GPR 指标时,预测带宽度直接反映模型对当前价位区间的把握程度,外汇和贵金属波动大、跳空频繁,这种概率化输出比硬预测更抗误导。

边缘似然 p(y|X) 常被拿去优化核函数超参数,实操中可把它当目标函数丢进优化器,调一遍 length scale 看预测带是否更贴实线。

「核函数决定先验长什么样」

先验分布是观测任何报价数据之前,你对潜在价格函数形态的初始信念集合。高斯过程不会凭空造函数,而是从一组候选曲线里,靠训练样本挑出最贴合的那条;而候选曲线的“长相”完全由核函数掌管。 RBF核(高斯核)生成光滑非线性曲线,公式 exp(-∥x−x′∥²/(2l²))·σ_f² 里,σ_f 管波动幅度,l 管相关性衰减快慢,∥x−x′∥ 是两点欧氏距离。线性核只看 x·x′·σ_l²,采样出来就是斜率各异的直线。周期核带周期 p,能吐出以 p 为重复频率的循环函数,适合抓贵金属日内的节律。维纳过程更极端,协方差 K(x,x′)=min(x,x′),曲线带随机游走质感。 图例里 RBF 采样全是顺滑弯线,线性核全是斜线,周期核曲线严格按 p 循环,维纳过程则越走越散。这些图都由脚本 SamplesPrior 直接出,你在 MT5 里跑一遍就能对照参数改 σ_f、l、p 看形态怎么变。 高斯过程真正灵活的地方在于核能相加或相乘:线性加周期,就能建模带趋势的震荡;RBF 乘周期,可压住振幅随平滑度变化。组合核是高斯过程适配外汇高波动场景的关键抓手,调参前先想清楚你要先验长成哪副模样。

常见问题

把历史样本按时间切出一段没参与训练的数据,看真实价格落进误差带的比例;若长期低于 80% 就要调核函数或缩短训练窗口。
这是模型对未知区域不确定性升高的正常反应;可换用周期性核或加入趋势项先验,让长相更贴合行情结构。
小布会读取该品种近期波动与样本覆盖情况,标出预测带可信度偏低的时间段,你只需打开对应页面看提示即可。
会。核决定先验平滑度和周期假设,选错会让拟合线过度平滑或硬套周期;建议先用 RBF 核看基线再换 Matérn 对比。
只在不确定性低的区间顺概率方向轻仓试单,带宽超标时停手;外汇贵金属波动大,高概率也不等于稳,必须带止损。