首页 / 交易学院 / 小布知识库 / 在 MQL5 中连接 NeuroSolutions 神经网络
在 MQL5 中连接 NeuroSolutions 神经网络
🧠

在 MQL5 中连接 NeuroSolutions 神经网络

MQL5 编程 难度 · 高阶 2011 13 分钟阅读
神经网络DLLNeuroSolutions

一、为什么用 NeuroSolutions

NeuroSolutions 提供可视化的网络搭建、训练与测试,且第 5 版拥有成熟的 DLL 接口,方便从外部程序(如 MQL5 EA)调用训练好的网络做实时预测。

二、策略构思:WeekPattern

示例策略很简单:D1 新柱开盘时,用前 5 根 K 线的 OHLC 预测当根收盘方向,据此做多或做空并持有整天。预测基于“相对当前开盘价的变化量”而非价格本身,以提升泛化。

三、导出训练数据

先用 MQL5 脚本把客户端历史按网络要求的格式导出为 CSV:每行 = 过去 5 根 OHLC(输入)+ 当前收盘(输出),逐根平移构造样本。

// WeekPattern-Export.mq5
void OnStart(void)
{
   int fh = FileOpen("weekpattern.csv", FILE_CSV|FILE_WRITE, ',');
   for(int i=rates_total-1; i>0; i--)
   {
      // 写 过去5根OHLC(输入) + 当前收盘(输出)
      FileWrite(fh, Open[i-5], High[i-5], Low[i-5], Close[i-5],
                   Open[i-4], High[i-4], Low[i-4], Close[i-4],
                   ..., Close[i]);
   }
   FileClose(fh);
}

四、在 EA 中调用网络 DLL

NeuroSolutions 生成 DLL(如 NSNetwork.h),MQL5 用 #import 声明函数,把实时特征喂入网络取预测输出。

#import "NSNetwork.h"
   bool CalcNeuralNet(double &inputs[], double &output[]);
#import

// 实时把当前 OHLC 变化量喂入网络
double inp[20];
// ... 填充相对开盘价的变化量 ...
double out[1];
if(CalcNeuralNet(inp, out))
   Trade(out[0] > 0.5 ? BUY : SELL);

五、关键注意

⚠ 三个雷区
1) 训练用“相对开盘价的变化量”而非价格本身,提升泛化;2) DLL 位数(32/64)须与终端匹配;3) 神经网络极易过拟合,必须留出样本外验证。

六、导出数据给 NeuroSolutions

NeuroSolutions 是外部神经网络工具。典型流程:用 MQL5 把历史 OHLC、指标、成交量导出成 CSV,喂给 NeuroSolutions 训练网络(如预测下根涨跌),再把训练好的网络参数导回 MQL5 调用。

导出时要严格对齐时间轴、做特征标准化(不同量纲归一),否则训练出的网络在 MQL5 里对接时数值对不上,预测全错。

七、导入训练好的网络

训练好的网络本质是一组权重和激活函数。可以把它翻译成 MQL5 的前向计算代码(矩阵乘加激活),或导出为可被 MQL5 调用的格式(如通过 DLL)。翻译要逐节点核对,浮点精度要一致。

double Net(double x[])
{
   double h = Tanh(W1*x[0] + b1);     // 隐含层
   return Sigmoid(W2*h + b2);         // 输出层
}
✦ 对接要对齐精度
外部训练、MQL5 调用,浮点与激活函数必须逐节点一致,否则网络行为漂移,回测好实盘崩。

八、实盘调用与预警

实盘里每 tick 把最新特征送进网络得预测值,超过阈值触发信号。但神经网络是黑盒,必须配样本外验证和回撤熔断——它也可能过拟合历史,不能因为它「看起来高级」就放松风控。

务实做法:把网络预测当「其中一个信号」参与投票,而非单独决策,用它的非线性能力补其他信号的不足,同时不被它一家绑架。

九、特征工程的纪律

神经网络效果七分靠特征、三分靠模型。把 OHLC 直接丢进去往往不如先做有意义的变换:收益率、波动率、动量、成交量偏离,再标准化。特征表达对了,简单网络也能行。

特征要「可解释且稳定」:今天用这个口径、明天换那个,网络学的分布就漂移。固定一套特征管线,像固定交易规则一样固定它,训练结果才可比、可复现。

另一个纪律:防止未来信息泄漏——构造特征时只能用截至当前的 bar,任何用到未来极值的特征都会让网络在回测里作弊,实盘原形毕露。

十、神经网络策略的风险底线

无论网络多花哨,都必须配回撤熔断与样本外验证,绝不因「AI」二字放松风控。一个务实纪律:网络预测只决定「仓位偏向」,真实下单仍受资金模块与硬止损约束,网络没有「绕过风控」的特权。

另外要警惕「调参屠龙」:花三个月把网络准确率从 52% 提到 55%,不如花三天把止损和仓位管好。ML 是放大器,放大的是已有正期望,而非凭空造期望,这个认知能省下大量无效投入。

模型导出后务必在 MQL5 侧做样本对齐校验:用同一组输入分别跑 NeuroSolutions 与 DLL,比对输出差是否仅在浮点误差内。一旦超出即说明接口约定或归一化不一致,绝不能上实盘。神经网络对输入尺度极敏感,训练侧和推理侧必须用同一套标准化参数,差一点结果就全变。

十一、小结

✦ 各司其职
神经网络负责“预测”,EA 负责“风控与下单”。不要把仓位决策也塞进网络,保持职责分离才好调试与回测。

常见问题

变化量对价位尺度不敏感,训练集与实盘分布更接近,泛化更好。
通过 NeuroSolutions 生成的 DLL(如 NSNetwork.h),用 #import 声明函数,喂输入取输出。
过拟合历史与 DLL 稳定性;务必留出样本外测试与严格资金管控。