利用余额图进行策略优化并将结果与 "余额 + 最大锋锐比率" 标准进行比较·综合运用
(3/3)·当余额增长不再够用,如何用趋势线方差与前瞻测试筛出真正抗噪的EA参数组合
很多交易者把历史余额曲线向上就当成策略过关,却忽略曲线抖动背后藏着的过拟合风险。只看净利润不看平滑度,参数一换周期就崩。本篇接前两篇的回归框架,把前瞻测试一并拉进来交叉验证。
◍ 云端跑自定义最大优化的实测账
把'自定义最大'设为优化目标、交易量优化参数开 true,丢到 MQL5 Cloud Europe 2 上跑,整轮测试耗时 1 分 5 秒,花费 $0.05。这种轻量云端算力对外汇/贵金属策略预筛很划算,但云端结果只代表历史样本拟合,实盘仍属高风险。 测试 3 的前五组结果依次为通关 163/136/109/82/55,对应的自定义值 16382372.39,盈利 363.32、预期回报 24.22、盈利因子 3.87、恢复因子 74.02、净值回撤 0.91%、交易数 15、止盈 25、尾随停止 50/45/40/35/30。除'结果'列外,所有列与测试 1、测试 2 的最佳行完全一致。 用线性回归对余额图做拟合优化,得到的筛选倾向与'余额 + 最大锋锐比率'方法相同。开 MT5 把同样参数推到云代理,能复现这组 $0.05 的对照成本。
EURUSD M15 开前瞻测试后的三组对照
在 M15 周期上跑 EA test balance regression、Moving Average balance regression 与 MACD Sample balance regression 三套变体,这次统一勾选了前瞻测试(Forward Testing),用样本外区间逼出过拟合的伪装。外汇与贵金属杠杆高,样本外回测飘绿不代表实盘能活,只说明参数没把历史记忆背太死。 先看 EA test balance regression。测试 1 用「余额 + 最大锋锐比率」做优化标准,云上耗时 2 分 14 秒、成本 $0.08;最优通关 352 的回测盈利 23196.38、盈利因子 1.47,但前瞻区只跑出 216.48 盈利、交易缩到 10 笔。测试 2 切到「自定义最大」且交易量优化关掉,回测盈利暴涨到 180332.68,前瞻却直接 -14294.76——和测试 1 的前瞻画像几乎一致,说明线性回归压余额曲线至少不弱于锋锐比率法。 测试 3 把交易量优化打开,云耗时 3 分 29 秒、成本 $0.07;回测最优通关 208 盈利 1660.90,前瞻最好的一行却是 -103.43、303 笔交易、回撤 75.43%。交易量常规化对回测没肉眼可见的影响,但前瞻全负,反而证明这套回归过滤挑出了「不敢吹牛」的真实结果。 换 MACD Sample balance regression。测试 1 标准法云耗时 1 分 3 秒、成本 $0.06,回测通关 171 盈利 2094.29,前瞻通关 78 盈利 1182.13、盈利因子 5.24,样本外比样本内还猛。测试 2 关掉交易量优化用自定义最大,回测盈利 84498.76 但前瞻通关 78 仍落在 1182.13,和测试 1 前瞻重合。测试 3 开交易量优化,回测通关 168 盈利 15089.06,前瞻结构未变——MACD 这只在 M15 上前瞻没崩,回归法和标准法给出的外推表现基本等价。 开 MT5 把交易量优化参数从 false 拨到 true,重跑自己那版 balance regression EA,重点盯 Forward Result 列是不是由正转负;转负未必是坏事,往往意味着样本外没在说谎。
「均线回归EA的前瞻验证三连测」
把 Moving Average balance regression.mq5 接上余额线性回归优化,在 EURUSDM15 上跑三组前瞻测试,看它和「余额最大+锋锐比率」标准法是否同路。测试1用标准参数优化,云上耗时1分28秒、成本$0.05,优化通关53的净值回撤5.92%、交易525次;前瞻通关48的盈利185.78、盈利因子1.06、回撤2.26%、交易175次。 测试2改优化「自定义最大」且交易量优化关掉,优化结果和测试1完全一致(通关53净值11966.34、回撤5.92%),前瞻通关48盈利仍为185.78、因子1.06。说明线性回归拟合余额曲线在这套均线EA上能复现标准法的筛选。 测试3把交易量优化打开、云上耗时0分42秒、成本$0.04,优化通关53数值缩到243.32但形态不变,前瞻通关48盈利185.78、因子1.06依旧。尽管该EA用动态手数,启用交易量优化也没撼动结果。三组对照下,余额线性回归法与标准法在均线EA上表现相当,外汇与贵金属品种此类回测仍属高风险,实盘前建议在MT5用M15以上周期重跑确认。
◍ 回归优化法的后续可挖点
把线性回归套到余额曲线上做优化,实测效果已经摸到“余额+最大锋锐比率”那套方法的水平。动态手数 EA 跑出来的结果更有意思:某些品种和周期下,“交易量常规化”配合前瞻测试,画出来的资金曲线比裸余额更稳,但这种稳只是概率倾向,外汇和贵金属杠杆品种随时会因跳空把回归假设打穿,高风险先摆在台面。 评论区有人点出要害:Alglib 算的是随机误差回归,若把余额当确定序列就得改叫线性近似,否则系数看着漂亮实际可能不存在;还有人发现新库里 CMatrixDouble 的赋值接口变了,老代码直接编译挂掉。下面这段就是改完能过的写法,开 MT5 把注释行换成 Set 调用即可验证。 后续能做的不是停在这:把盈利和亏损持仓时间加权进数组,再拿归一化数值做实验,可能比单纯用余额点更抗过拟合。至于库升级导致的 m_rmserror 改名 m_RMSError,自己跟进头文件就行,别等别人发补丁。
class="kw">operator[] constant variable cannot be passed as reference CMatrixDouble xy(arr_size,class="num">2); for(class="type">int i=class="num">0;i<arr_size;i++) { class=class="str">"cmt">//xy[i].Set(class="num">0,i+class="num">1); class=class="str">"cmt">//xy[i].Set(class="num">1, arr_profits[i]); xy.Set(i, class="num">0, i+class="num">1); xy.Set(i, class="num">1, arr_profits[i]); class=class="str">"cmt">//class="type">class="kw">double:TrendMSE=linear_report.m_rmserror; class="type">class="kw">double TrendMSE=linear_report.m_RMSError;