手动复盘与可视测试:上线前先用历史数据验证
不凭感觉上实盘——用一年以上历史、可视测试与渐进式验证筛掉失灵系统
一、可视化测试是什么
MT5 策略测试器提供「可视化」模式:在回放历史 tick 的同时,实时绘制价格、指标与 EA 动作。它还支持「手动模式」——你可以暂停回放,亲自在图上点鼠标下单,模拟自己在真实行情里的决策。这是连接机械回测与实盘手感的桥梁,也是排查 EA 行为最直观的手段,能把抽象的数字还原成你能「看见」的过程。
很多在日志里看不懂的异常,在图上往往一眼就明白:为什么这单开在奇怪的位置、为什么止损被扫得那么冤、为什么信号明明该触发却没动。可视化不是炫技,而是调试与训练的刚需。
二、OnTester 与回测生命周期
EA 在测试器中同样运行 OnInit / OnTick / OnTrade,外加 OnTester——在回测结束时调用,返回一个 double 作为优化评分。你可以用它输出自定义绩效指标(如盈利因子、回撤比、自定义风险调整收益),供遗传优化在参数空间里筛选。合理地设计这个评分,比盯着总盈利更能找到稳健参数。
double OnTester()
{
double pf = TesterStatistics(STAT_PROFIT_FACTOR); // 盈利因子
double dd = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); // 最大回撤%
// 偏向高盈利因子且低回撤的评分
return (pf > 0) ? pf * (100.0 / (100.0 + dd)) : -1;
}
三、在回测中手动下单
开启「手动」可视化模式后,测试器会在每个 tick 暂停等待你的操作(或按速度倍率自动推进)。你可以像实盘一样拖止损、平仓、加仓,用来训练执行力与纪律,验证「计划内该怎么做」。这种「飞行模拟器」让你在安全环境里重复练最坏情景的应对,而不是拿真金白银去交学费。
手动模式特别适合复盘自己亏损最大的那段行情:你会发现自己当时如果「按规则」会怎么做,以及实际手痒时会怎么做——这两者的差距,就是你要修的地方。看清差距,比任何指标都有用。
四、用 ChartXXXX 在回测里画图
回测中也能调用 ChartOpen / ChartIndicatorAdd / ObjectCreate 等函数,把中间变量(如信号强度、Filter 值、当前 ATR)画成对象,帮助你理解 EA 当时「看到了什么」。这对排查「为什么这单没开」极有用——你不必猜,直接看图上当时各条件的值。
五、可视化测试的局限
手动模式测的是「你的执行」,不是「策略本身」,结论不能外推到自动 EA;可视化用压缩 tick 时,成交价与真实逐笔有偏差;更关键的是你「知道这是历史」,会不自觉用后见之明决策,实盘未必做得出同样决定。这些局限决定了它只是辅助,不是验证主力。
- 手动模式验证的是执行,不是策略有效性
- 压缩 tick 下成交价与真实有偏差
- 后见之明偏差:你清楚这是历史回放
- 速度倍率会改变你对『等待』的主观感受
六、正确用法:先看自动,再手动验证
先用自动「每 tick」回测拿到基线绩效,再切手动可视化模式抽查关键时段(如你亏损最大的那周),观察 EA 在那个行情里的决策是否合理、你自己的应对是否守纪。两者结合,才能既验证策略又磨练自己,缺任一层都只懂一半。
建议把可视化测试写进每周复盘流程:每周挑一段实盘或回测里的失败交易,手动回放一遍,问自己「当时若严格按规则,结果会怎样」。这个习惯比多跑十次优化更能提升稳定性。
七、用 Comment / ObjectCreate 排查信号
在 OnTick 里用 Comment() 打印各条件分量(如 ma_diff、atr、filter 放行与否),或在图上用 ObjectCreate 画箭头标记每次信号评估。回放时你就能逐 tick 看到 EA 的「思考过程」,快速定位是条件写错、数据错位,还是滑点假设不当。
void OnTick()
{
double ma = iMA(_Symbol,0,20,0,MODE_SMA,0);
double fil = iRSI(_Symbol,0,14,0,PRICE_CLOSE);
Comment("ma=", ma, " rsi=", fil, " allowed=", (fil>50));
}