神经网络实验(第 3 部分):实际应用·进阶篇
(2/3)· 用MT5原生工具把10-20组感知器权重合成一个EA,省掉多图表盯盘的笨办法
◍ 双感知机共振下的开仓条件
这段逻辑用两个感知机输出叠加过滤信号:只有当 perceptron1 与 perceptron2 同时小于负阈值 Param,且当前符号无同魔法值卖单、慢指标数组前一根大于快指标、点差不超上限时,才触发 OpenSell。 反向 BUY 分支要求两个感知机同时大于 Param,且 ind_In1[1] 小于 ind_In2[1],同样受持仓检查与点差约束。把 Param 设成 0.5 在 EURUSD 五分钟图上回测,信号频率会明显下降,但假突破概率可能更低。 外汇与贵金属属高风险品种,点差突扩会直接掐断入场;实盘前应在 MT5 策略测试器里把 MaxSpread 按经纪商常态调好再跑。
if ((perceptron1()<-Param) && (perceptron2()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==class="num">0) && (ind_In1[class="num">1]>ind_In2[class="num">1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } class=class="str">"cmt">//BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (perceptron2()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==class="num">0) && (ind_In1[class="num">1]<ind_In2[class="num">1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
单感知器配四路TEMA倾角的SL/TP落点
这套 EA 用 1 个感知器读取 4 条 TEMA 的倾角,离场完全交给止损与止盈。优化跑满 10 次后,复杂准则刷出 99.99 的极值,盈利因子落在 4–8 区间,属于偏高的分布。 把优化结果导进 Excel,只留前 100 组最优,删掉 х1–х4 和 Param 以外的列,存成逗号分隔的 CSV。我这边文件命名为 EURUSD,直接当文本数组塞进 EA 代码,结构就像下图的二维数组。 通过 MetaEditor 把文件挂进工程编译,再做一次前向验证,曲线大概率能平稳爬完一整年。外汇和贵金属杠杆高,前向好的参数换个时段也可能塌,验证完别直接上实盘。 别把正态当圣经 盈利因子 4–8 是优化窗里的数字,不是样本外保证,前向测试才是过滤过拟合的第一道闸。
class="type">class="kw">string EURUSD[][class="num">6]= { {"class="num">19","class="num">1","class="num">3","class="num">6","class="num">1100"}, {"class="num">20","class="num">1","class="num">4","class="num">6","class="num">1000"}, {"class="num">20","class="num">0","class="num">4","class="num">4","class="num">1200"}, {"class="num">19","class="num">0","class="num">6","class="num">4","class="num">1100"}, {"class="num">19","class="num">1","class="num">5","class="num">4","class="num">1100"}, {"class="num">17","class="num">0","class="num">7","class="num">4","class="num">1100"}, {"class="num">19","class="num">1","class="num">3","class="num">8","class="num">1000"}, {"class="num">20","class="num">0","class="num">4","class="num">3","class="num">1300"}, {"class="num">17","class="num">0","class="num">7","class="num">0","class="num">1400"} };
「感知器4角度EA的平仓逻辑与回测表现」
这个修改版 EA 去掉了常规止损止盈,仓位退出完全交给感知器回调信号。也就是说,开仓后不会被动触发价位止损,而是由模型输出穿越阈值反向时主动平仓。 优化跑下来的复杂准则成绩略逊于前一种方案,盈利因子落在 2 到 2.5 区间。前向验证里余额曲线形状跟上一次近似,但回撤挖得更深,说明样本外承压更明显。 外汇与贵金属品种用这类无硬止损的感知器策略,滑点和点差扩张会直接放大回撤,属典型高风险玩法,实盘前务必在 MT5 策略测试器用历史数据复算。 下面这段是卖卖与买买双向的核心触发,注意感知器函数 perceptron1() 与两个指标数组前一根烛芯的比较关系: //SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, 0, 0, EAComment); } if ((perceptron1()>0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)>0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, 0, 0, EAComment); } if ((perceptron1()<0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)>0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY); } 逐行拆解:第 2 行感知器输出小于负 Param 且当前无卖仓、指标1前根大于指标2前根、点差不超标,才开卖。第 5 行感知器翻正且已有卖仓,立刻平卖。第 9 行对称地,感知器大于正 Param 且无买仓、指标1前根小于指标2前根、点差合规,开买。第 12 行感知器转负且持买仓,平买。把 Param 调小会让信号更敏感,可能频繁进出但回撤也可能更碎。
class=class="str">"cmt">//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==class="num">0) && (ind_In1[class="num">1]>ind_In2[class="num">1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, class="num">0, class="num">0, EAComment); } if ((perceptron1()>class="num">0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)>class="num">0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL); } class=class="str">"cmt">//BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==class="num">0) && (ind_In1[class="num">1]<ind_In2[class="num">1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, class="num">0, class="num">0, EAComment); } if ((perceptron1()<class="num">0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)>class="num">0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY); }
◍ 单感知器配八向TEMA倾角的止损止盈EA
这套 EA 的离场逻辑只认两件事:止损位和止盈位,中间不参与人工干预。入场信号由 1 个感知器对 8 条 TEMA 指标的倾角做判别,也就是用 8 个角度特征喂给单层神经元做二分类。 跑优化前得先备好一张 Excel 表,把 х1、х2、х3、х4、y1、y2、y3、y4 以及 Param 这几个参数先列出来,MT5 优化器就在这些维度上搜权重。 回测里复杂准则打分偏高,盈利因子落在 2.5–3 的区间,单看这个数字不算难看。但切到前向验证(样本外)就露怯了:余额曲线抖得厉害,回撤幅度也不小,只是最终净值方向还是正的。外汇与贵金属品种波动大,这类样本外不稳的 EA 实盘前务必用小资金验证。
感知器配 8 倾角 TEMA 的平仓逻辑
这套 EA 没有挂止损和止盈,出场完全交给感知器的逆向信号。它用 1 个感知器去读 8 个 TEMA 指标的倾角,当倾角组合翻面就反向平掉原单。 优化环节里复杂准则跑出的盈利因子落在 2.5–3 的区间,属于偏高的数值。前向验证里余额曲线比较平稳,全年账面有明显抬升,回撤也不深。 外汇和贵金属波动大、杠杆高,这类回测好看的策略实盘仍可能失效,上 MT5 用历史中心做前向测试再决定要不要跟。
「双感知器八角度的裸止损实测」
这一版把止损和止盈彻底拿掉,靠两个感知器各自吃 4 个市场倾角来驱动出入场,和前面带防护的单感知器结构明显不同。 优化跑出来复杂准则卡在 99.99 这一档,盈利因子差不多是 4.3,说明样本内拟合强度很高。 前向验证的余额线是锯齿状,不是平滑上行,但全年算下来每个月份都有盈利落袋。外汇和贵金属杠杆高,这种无 SL/TP 结构遇到单边跳空可能瞬间回吐,只能当概率优势看,不能当护城河。 真要验证,就把两个感知器的倾角参数拉到 MT5 里跑一遍前向,重点看锯齿的峰谷差是否超出你的回撤容忍度。