昨天整理复盘日志的时候又踩了一次坑,同一个错误三个月前犯过,当时还特意记在笔记本上,结果还是重蹈覆辙。这让我意识到,光靠脑子记和手动翻MT4的历史记录,根本没法做真正的策略归因。于是我把之前折腾过的订单导出脚本又翻出来重新捣鼓了一遍,今天就把这套流程完整写下来,给同样被复盘效率折磨的朋友一个参考。
先说为什么要做这件事。MT4自带的历史记录导出功能其实很简陋,导出来的HTML或者CSV字段不全,尤其缺少订单平仓时间、持仓时长、最大浮盈浮亏这些关键维度。你要分析一套EA在欧美或者黄金上的表现,光看总盈利和总亏损根本不够,必须拆到每一单的持仓周期、入场时段、盈亏比分布,才能知道问题出在哪个环节。我之前做镑美M15的一套策略,回测曲线很漂亮,实盘却一直阴跌,后来把订单导出来按小时统计才发现,亏损集中在下午三点到五点这个区间,正好是伦敦盘和纽约盘交接的流动性真空期,点差扩大导致频繁扫损。
具体操作我分几步走:
说个真实教训。去年做黄金的一套突破策略,归因之后发现周三的胜率明显低于其他交易日,一开始以为是偶然,后来把三个月的订单全导出来按星期分组,发现周三平均亏损是其他天的两倍多。查了财经日历才想起来,周三经常有美联储官员讲话或者EIA数据,波动结构完全不一样。这就是手动复盘绝对看不出来的东西,因为你不可能凭记忆去统计几十上百单的星期分布。
另外提醒一句,脚本导出的时候建议按平仓时间排序,而不是开仓时间,因为归因分析看的是结果发生在什么时候,不是决策发生在什么时候。这个细节很小,但影响很大。
你们平时复盘是手动翻记录还是有自己的一套脚本工具?有没有遇到过导出后发现字段对不上的情况,一起聊聊。
补充个小细节:脚本跑之前记得先把MT4的历史记录全部刷新出来,不然导出的订单会缺最近几单,我一开始就被这个坑了半天。
先说为什么要做这件事。MT4自带的历史记录导出功能其实很简陋,导出来的HTML或者CSV字段不全,尤其缺少订单平仓时间、持仓时长、最大浮盈浮亏这些关键维度。你要分析一套EA在欧美或者黄金上的表现,光看总盈利和总亏损根本不够,必须拆到每一单的持仓周期、入场时段、盈亏比分布,才能知道问题出在哪个环节。我之前做镑美M15的一套策略,回测曲线很漂亮,实盘却一直阴跌,后来把订单导出来按小时统计才发现,亏损集中在下午三点到五点这个区间,正好是伦敦盘和纽约盘交接的流动性真空期,点差扩大导致频繁扫损。
具体操作我分几步走:
- 第一步,在MT4里打开“账户历史”标签,右键选择“所有历史记录”,确保时间范围覆盖你要分析的周期。注意一定要先切换到这个标签再运行脚本,否则脚本读不到订单数据。
- 第二步,把脚本拖到图表上,脚本会自动遍历OrdersHistoryTotal(),逐单读取OrderOpenTime、OrderCloseTime、OrderOpenPrice、OrderClosePrice、OrderLots、OrderProfit、OrderSwap、OrderCommission这些字段。这里有个坑,OrderProfit()返回的是不含隔夜利息和手续费的毛利润,必须手动加上OrderSwap()和OrderCommission()才是真实净盈亏,我第一次做归因就是忘了这一步,导致盈亏比算出来偏差很大。
- 第三步,脚本把数据写到一个CSV文件里,默认路径是MQL4/Files文件夹。建议用FileOpen加上FILE_CSV|FILE_WRITE|FILE_ANSI这几个标志,不然中文注释容易乱码。
- 第四步,用Excel打开CSV,加一列持仓时长,公式就是平仓时间减开仓时间,再按小时或者星期几做透视表,很快就能看出策略在哪些时段表现最差。
说个真实教训。去年做黄金的一套突破策略,归因之后发现周三的胜率明显低于其他交易日,一开始以为是偶然,后来把三个月的订单全导出来按星期分组,发现周三平均亏损是其他天的两倍多。查了财经日历才想起来,周三经常有美联储官员讲话或者EIA数据,波动结构完全不一样。这就是手动复盘绝对看不出来的东西,因为你不可能凭记忆去统计几十上百单的星期分布。
另外提醒一句,脚本导出的时候建议按平仓时间排序,而不是开仓时间,因为归因分析看的是结果发生在什么时候,不是决策发生在什么时候。这个细节很小,但影响很大。
你们平时复盘是手动翻记录还是有自己的一套脚本工具?有没有遇到过导出后发现字段对不上的情况,一起聊聊。
补充个小细节:脚本跑之前记得先把MT4的历史记录全部刷新出来,不然导出的订单会缺最近几单,我一开始就被这个坑了半天。
