首页 / 交易学院 / 小布知识库 / 用 ENCOG 机器学习框架做 MQL5 时间序列预测
用 ENCOG 机器学习框架做 MQL5 时间序列预测
🤖

用 ENCOG 机器学习框架做 MQL5 时间序列预测

MQL5 编程 难度 · 高阶 2012 13 分钟阅读
ENCOG机器学习RPROP

一、为什么选 ENCOG

ENCOG 是 Heaton Research 开发的高级神经网络/机器学习框架,被选中有几个硬理由:

二、网络结构:RPROP 前馈

弹性传播(RPROP)前馈网络用梯度符号独立调整每层步长,对中小样本金融序列比普通反向传播更稳,不易陷局部极小。

三、输入特征:StochK / WilliamsR

随机振荡指标与威廉指标都是界内振荡量,归一化稳定,且对超买超卖敏感,适合作为方向特征。归一化到 [0,1] 或 [-1,1] 是训练前提。

// 归一化到 [0,1]
double normalize(double x, double min, double max)
   { return (x - min) / (max - min); }
double deNormalize(double x, double min, double max)
   { return min + x * (max - min); }

// 输入: 过去 N 根 StochK, WilliamsR
double input[FEAT];
input[0] = normalize(iStochastic(...), 0, 100);
input[1] = normalize(iWilliamsR(...), -100, 0);

四、导出与训练

MQL5 负责特征工程,把样本导出给 ENCOG(C#/Java 环境)训练;预测时可加载模型或经 DLL 调用。导出格式用 CSV 最简单。

// 把 MQL5 特征导出给 ENCOG 训练
void ExportToEncog(double &inp[], double &out[])
{
   int fh = FileOpen("encog_train.csv", FILE_CSV|FILE_WRITE, ',');
   for(int i=0;i<ArraySize(inp);i++) FileWrite(fh, inp[i]);
   FileClose(fh);
}

五、关键注意

⚠ 训练四忌
1) 必须归一化,否则梯度爆炸;2) 样本外切分防过拟合;3) 网络别太深,金融小样本易记忆;4) 特征比网络结构更关键。

六、ENCOG 能做什么

ENCOG 是 .NET 下的机器学习库,支持神经网络、SVM、线性回归等多种模型。在 MQL5 生态里,它常被用来做「价格模式→未来方向」的建模:把历史特征喂进去训练,得到可预测的模型。

它比手写网络方便:内置多种训练算法与评估指标,你专注特征与数据,不必自己实现反向传播。适合想用 ML 但不想从零造轮子的交易者。

七、训练流程

流程:准备特征与标签(如用未来 N 根收益当标签)→ 划分训练/验证集 → 选模型与超参 → 训练 → 在验证集看误差 → 达标后导出模型供 MQL5 调用(通常经 DLL 或序列化权重)。

// 伪代码:ENCOG 训练
var net = new BasicNetwork();
net.AddLayer(...); net.Randomize();
var train = new ResilientPropagation(net, dataset);
while(!train.IsTrained) train.Iteration();
✦ 验证集是底线
ENCOG 训练完必须看验证集误差,不是训练集。训练集误差低只是记忆,验证集低才是真泛化。

八、在 MQL5 里调用与预警

训练好的模型通过 DLL 或权重文件被 MQL5 调用:每 tick 算特征、送模型得预测、超阈值发信号。但 ML 模型是黑盒,必须配样本外验证与回撤熔断,不能因为它「高级」就放松风控。

务实做法:把 ML 预测当投票中的一个信号,而非唯一决策源,用它的非线性能力补其他信号的不足,同时不被它一家绑架。

九、数据量与时序切分

ML 最忌随机切分时序数据(会把未来泄漏给训练)。必须用「时间顺序切分」:靠前训练、靠后验证,模拟真实「用过去预测未来」。这点错了,验证误差再低也是假象。

数据量上,样本太少模型学不到结构、样本太多训练慢,按特征维度配足够但不浪费的量,并定期用新数据重训练,让模型跟上市场。

十、ML 策略的监控与退化

ML 模型会「退化」:市场 regime 一变,昨天拟合的权重今天就失效。监控指标是「近期预测准确率」和「近期实盘盈亏」,两者同时下滑就触发重训练或暂停。

退化不可怕,可怕的是没发现。给 ML 策略装一个「健康度仪表」,定期自动评估,比等亏大了再查主动得多,也符合「系统长期运行」的工程纪律。

训练时的早停机制是关键:一旦验证集误差开始回升就立刻停,别等训练集误差见底才收手,那时早已过拟合。网络结构从简到繁,先用小网络跑通整条训练—推理—部署流程,再逐步加隐层,避免一上来就掉进调不动的超参黑洞。记录每轮的训练曲线,方便对比哪种结构真正有用。

保存最终网络权重时连同训练配置一起存,下次复现结果才不会因参数丢失而前功尽弃。把训练脚本、数据版本、随机种子都归档,才是可交付的机器学习工程。

十一、小结

✦ 分工明确
ENCOG 负责学习,MQL5 负责特征与执行。把精力放在特征工程与样本质量上,比纠结网络层数收益更高。

常见问题

RPROP 用梯度符号调步长,对中小样本金融序列更稳,不易陷局部极小。
它们是界内振荡指标,归一化稳定,且对超买超卖敏感,适合做方向特征。
通常在外部 C#/Java 环境训练,MQL5 负责导出特征与加载预测;或本地调用 DLL。