🤖
用 ENCOG 机器学习框架做 MQL5 时间序列预测
ENCOG机器学习RPROP
为什么选 ENCOG
ENCOG 是 Heaton Research 开发的高级神经网络/机器学习框架,被选中有几个硬理由:
- 已在两个商业交易软件(C#/Java)中用于金融时间序列预测,经过实战检验。
- 开源免费、文档完善,可通读源码理解网络内部。
- 持续维护(写文时在开发 2.6/3.0),且支持多核、多线程甚至 OpenCL(GPU)。
网络结构: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 负责学习,MQL5 负责特征与执行。把精力放在特征工程与样本质量上,比纠结网络层数收益更高。
常见问题
RPROP 用梯度符号调步长,对中小样本金融序列更稳,不易陷局部极小。
它们是界内振荡指标,归一化稳定,且对超买超卖敏感,适合做方向特征。
通常在外部 C#/Java 环境训练,MQL5 负责导出特征与加载预测;或本地调用 DLL。