用指标把回测压力摊在桌面上
◍ 用指标把回测压力摊在桌面上
在 MT5 的策略测试器里跑完 EA,多数人只盯着最终盈利曲线,却忽略了测试过程中的余额跳动、回撤深度和订单堆积。把这些隐藏状态做成独立指标,能直接在图表上看见资金曲线背后的真实负载。 这类 LifeHack 指标分三块:订单指标把每一笔开平信号标在图上,余额净值指标重画测试账户权益线,回撤与负载指标则量化浮亏占初始资金的比重。原文示例发布于 2016-09-02,实测贴文获 3195 次查看、10 条讨论,说明老交易员也认这种透明化思路。 外汇与贵金属杠杆高,回测里 30% 的峰值回撤在实盘可能触发断崖式追加保证金。把回撤指标常驻副图,比事后翻日志更能提前嗅到风险。 开 MT5 自建一个余额指标,用 OnTester 回调把账户历史喂给 plot,比肉眼读测试报告更直观。
「把盯盘布局固化进回测可视化」
在 MT5 策略测试器里跑可视化,目的往往不一样:有人想看测试期间余额和净值曲线的实时变动,有人想在“按真实订单逐笔”模式下盯可能出现的趋势结构。两种场景对副图指标的需求不同,所以最好给每种 LifeHack 指标单独存一套图表模板。 通用做法就三步:先在图表上挂好你要的指标,再把模板另存为 tester.tpl,最后启动可视化测试。测试器加载结果图时会自动调用这个文件名,布局就跟着指标走。 手动存模板容易手滑,也可以用一段脚本一键覆盖。下面这段把模板名写死成 "tester",跑完直接覆盖旧文件,适合绑个热键随时存。外汇与贵金属回测含高杠杆风险,可视化结论仅反映历史数据,不代表未来概率。 别把模板名写错 脚本里 ChartSaveTemplate(0,"tester") 的第二个参数不带后缀,系统会生成 tester.tpl。若改成别的字符串,测试器就不会自动加载,布局白存。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| ChartSaveTemplateTester_tpl.mq5 | class=class="str">"cmt">//| Copyright © class="num">2016, Vladimir Karputov | class=class="str">"cmt">//| http://wmua.ru/slesar/ | class=class="str">"cmt">//+------------------------------------------------------------------+ class="macro">#class="kw">property copyright "Copyright © class="num">2016, Vladimir Karputov" class="macro">#class="kw">property link "http:class=class="str">"cmt">//wmua.ru/slesar/" class="macro">#class="kw">property version "class="num">1.00" class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Script program start function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">void OnStart() { ResetLastError(); class=class="str">"cmt">//--- 在模板中保存当前的图表 if(!ChartSaveTemplate(class="num">0,"tester")) MessageBox("保存模板出错 #"+IntegerToString(GetLastError())); else MessageBox("模板 \"tester.tpl\" 被覆盖!"); } class=class="str">"cmt">//+------------------------------------------------------------------+
用 LifeHack 订单指标回放真实成交轨迹
LifeHack 订单指标默认拉取最近 300 个订单时刻,并在子窗口标出最新订单时间。它把真实订单与模拟订单的生成差异直接画出来,方便你判断当前行情里的成交性质。 InpVisible 参数控制可见订单数量,但别把它调过 1000——终端会硬加载多余数据,拖慢刷新且没实际分析价值。 想精确复盘某段历史,可把图表模板存成 tester.tpl,再到 MT5 策略测试器选 EURUSD、H1、真实订单逐笔模式,日期框到 2016.06.03,跳到 14:59 后单步前进,就能逐笔看 15:00 起的那批订单怎么落地。外汇与贵金属杠杆高,这类回放只用于理解微观结构,不构成方向判断。 下方代码是指标初始化里的缓冲区与参数声明,InpVisible 写死 300 是出厂设定,改大前先想清楚终端开销。
class=class="str">"cmt">//--- 指标缓冲区 class="type">class="kw">double AskBuffer[]; class="type">class="kw">double BidBuffer[]; class="type">class="kw">double AskBufferTemp[]; class="type">class="kw">double BidBufferTemp[]; class=class="str">"cmt">//--- 参数 class="type">int InpVisible=class="num">300; class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Custom indicator initialization function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">int OnInit()
◍ 回撤负载指标在测试器里怎么读
LifeHack 回撤与负载指标能在 MT5 策略测试器可视化跑单时,直接把回撤和存款负载画出来。回撤按这条算:账户余额减净值,再除以余额乘 100,得到百分比。 同时挂上 LifeHack 回撤负载和余额净值两个指标,测试画面里就能对照看资金曲线和承压。图里线形是回撤、柱形是负载,标签名已经写明了图形类型,不用再翻设置。 有个细节容易踩坑:Drawdown (line) 和 Load (histogram) 都只保留当前柱的历史最大值。比如某根柱负载冲到 80% 后回落到 10%,标签依旧显示 80%。做外汇、贵金属回测时这种峰值锁定会掩盖中途修复,高杠杆品种回撤可能瞬间爆表,读数得结合逐笔成交看,别只盯柱顶。
「把 LifeHack 模板真正用进回测流程」
把 LifeHack 系列指标先挂到图表上,再存成 tester.tpl,是让策略测试器直接带出 tick、净值、回撤和负载曲线的低成本做法。四个附件里 ChartSaveTemplateTester_tpl.mq5 仅 1.03 KB,逻辑就是用代码调模板保存,避免手动存错路径。 有用户在 2016 年反馈可视化测试器日志里没编译错误却跑不出图,重编译指标后恢复正常——这指向本地编译器缓存而非测试器本身的问题。外汇与贵金属回测中这类环境坑概率不低,开 MT5 先重编再跑可视化能省掉一半误判。 真要验证强弱,别只看终值权益。把 LifeHack_Balance_Equity.mq5(3.43 KB)和 LifeHack_Drawdown_Load.mq5(3.4 KB)一起进模板,四次回测模式各跑一遍,哪段回撤突增、哪段负载吃满,倾向比单模式更早发现策略短板。