MQL5神经网络EA从零实战
用单神经元网络构建可盈利交易系统
一、神经网络与交易者的距离
很多中文交易者听到神经网络就觉得高深莫测,认为只有数学博士才能使用。其实在MetaTrader 5中,借助MQL5我们完全可以从一个神经元开始搭建自己的智能交易系统。本文旨在拆掉神秘感,把神经网络的核心架构、数据处理、激活函数以及在EA中的真实运用讲透,让你能够照着改出属于自己的神经网络策略。
人工神经网络属于人工智能研究分支,它尝试粗略模拟人脑神经元的学习与适应能力。网络由大量人工神经元连接而成,通过不断调整连接权重来‘学习’历史数据中的模式。在量化交易中,这意味着EA不再写死买卖规则,而是让网络从行情特征中自行提炼决策边界。
二、人工神经元与多层网络结构
一个标准人工神经元包含:输入、权重、净输入计算、激活函数、输出。输入乘以对应权重求和得到净输入,再经过激活函数映射为输出信号。单层神经元可视为黑箱:喂入行情特征,吐出交易方向。
多层神经网络通常由三层构成。输入层只负责把数据(如指标过去值)分发到网络,不做计算;隐藏层可以有一层或多层,负责信号加工;输出层一般只有一个神经元,输出最终控制信号,比如‘做多’或‘做空’。本文示例采用极简结构:仅一个神经元,但原理与深层网络完全一致,多层不过是上一层的输出成为下一层的输入。
- 输入层:承接RSI等指标的若干历史值
- 隐藏层:本例为0层,复杂网络可堆叠
- 输出层:产生EA下单逻辑的基础信号
三、为什么必须做输入数据正态化
正态化是把不同量级的输入压缩到[0,1]或[-1,1]区间的过程。若不处理,价格类指标数值可能成千上万,而RSI在0-100,直接输入会让大数值主导净输入,小特征被淹没,网络做出错误决策。公式:x_norm = (x - x_min)*(d2-d1)/(x_max-x_min) + d1,其中d1、d2为目标区间上下限。
例如把[0,10]的数据缩到[0,1],则d1=0,d2=1,代入即可。MQL5实现时,先取指标缓冲区的极值,再逐元素缩放。以下代码展示了对移动平均缓冲区的正态化,结果存入inputs数组供神经元使用。
double d1=0.0;
double d2=1.0;
double x_min=iMA_buf[ArrayMinimum(iMA_buf)];
double x_max=iMA_buf[ArrayMaximum(iMA_buf)];
for(int i=0;i<ArraySize(iMA_buf);i++)
{
inputs[i]=(((iMA_buf[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
}
四、激活函数类型与形状调节
激活函数决定神经元如何把加权和变成输出。主要三类:单位阶梯函数(硬阈值)返回0或1;S形函数(1/(1+e^-x))光滑连续,适合多层网;双曲正切返回[-1,1]负值,亦连续。硬阈值带阈值参数,其余阈值取0。
以S形为例,当加权和超出[-5,5]后曲线平坦,信号饱和失去区分度。我们可乘系数d扩展有效范围,如d=0.4让值分布更均匀。双曲正切类似,乘d=0.2改善形状。这种调节能显著提升单神经元对行情的拟合效率。
for(int n=0; n<10; n++)
{
NET+=Xn*Wn;
}
NET*=0.4;
for(int n=0;n<10;n++)
{
NET+=Xn*Wn;
}
NET*=0.2;
- 硬阈值:if(NET>=x) Out=1; else Out=0;
- S形:Out=1/(1+exp(-NET))
- 双曲正切:Out=(exp(NET)-exp(-NET))/(exp(NET)+exp(-NET))
五、MQL5中神经元的代码实现
计算净输入就是输入与权重点乘。下面片段声明全局数组,在OnInit里赋样例值并求和。真实EA中权重设为input参数,便于策略测试器优化。
double NET;
double x[3];
double w[3];
int OnInit()
{
x[0]=0.1; x[1]=0.8; x[2]=0.5;
w[0]=0.5; w[1]=0.6; w[2]=0.3;
for(int n=0;n<3;n++)
{
NET+=x[n]*w[n];
}
}
完整EA示例(neuro-example.mq5)用RSI(14)最近10根值作输入,10个权重作input。OnInit获取RSI句柄、填充权重数组;OnDeinit释放。交易部分引用CTrade与CPositionInfo标准库。原文提供下载ZIP含该文件及macd-neuro-example.mq5。
input double w0=0.5; ... input double w9=0.5; double inputs[10]; double weight[10]; double out; iRSI_handle=iRSI(my_symbol,my_timeframe,14,PRICE_CLOSE); ArraySetAsSeries(iRSI_buf,true); weight[0]=w0; ... weight[9]=w9;
六、用策略测试器训练你的网络
训练=优化权重。在MT5策略测试程序中选择日期从年初开始(周期越长过拟合越少),执行模式用仅开盘价即可,因为EA只取指标最后10值。优化选基因算法快速评估,满意后再慢速完整。前进分析设1/2以验证样本外。
将10个权重input加入优化范围,起始值0.5、步长自定。运行后于优化结果选最大盈利轮次,双击回测看报告。单神经元示例已能盈利,证明即便极简结构也有价值。
七、神经网络EA vs 标准逻辑EA
以MACD为例,标准MACD样例EA与基于MACD的神经网络EA同参数测试。结果显示:神经网络净利润2658 vs 733,回收系数4.25 vs 2.16,但盈利交易占比降至56.84%、夏普仅0.15。说明网络抓更多机会但单笔质量降,需配合风控。
- 神经网络总净利润更高,交易次数多十余倍
- 标准逻辑盈利百分比高、夏普好
- 网络EA无硬止盈止损,依赖权重自适应
对比告诉我们,神经网络不是银弹。它擅长挖掘非线性特征,但参数敏感,必须严谨优化与样本外验证。初学者可先以单神经元练手,理解数据流后再堆隐藏层。
八、常见疑问与延伸
有用户问RSI周期14与输入数10是否冲突?不冲突:14是指标计算周期,10是取缓冲区的过去值个数。另有评论指出仅回溯1笔交易,常因优化区间过窄或数据不足。建议拉长样本、检查权重范围。原文链接:https://www.mql5.com/zh/articles/497,俄文原址:https://www.mql5.com/ru/articles/497。