Elder-Ray (多头力度和空头力度)·综合运用
(3/3)·当 EMA 与多空力度同框仍嫌稀疏,如何用三重筛选把稀有信号变成可执行的单
很多交易者把 Elder-Ray 的买卖规则背下来就直接上实盘,结果发现在 D1 上空头力度低于零却走高的窗口少得可怜,挂单永远不触发。问题不在指标,而在你把‘简单系统’当成了‘完整系统’——本篇收尾篇就是把前两步拆开的零件拧成可用引擎。
- 极值扫描与挂单成交痕迹
- 成交记录与订单查询的错位现象
- 从一张订单回执看持仓结构
- 从挂单到成交的逐字段解剖
- 从成交回执里读平仓单的真实字段
- 回测终端里的成交单长什么样
- 回测日志里的首笔余额与订单缺失
- 从成交回执反推 EA 卖单结构
- 从成交回执里抠挂单与平仓细节
- 从一张订单回执看 Buy Stop 的成交链路
- 成交记录里的余额入账与查无此单
- 从成交回执反推 EA 的卖单结构
- 从成交回执里读出平仓痕迹
- 从挂单回执里读出 Buy Stop 的真实成交路径
- 回测尾单的成交结构长这样
- 回测尾单的成交记录长什么样
- 从成交回执里抠出挂单生命周期
- 从成交回执里读挂单与成交明细
- 从成交单结构反推订单对象字段
- 从成交回执反推挂单生命周期
- 从成交回执反推平仓链路
- 从一张成交回单读懂挂单生命周期
- 残留的订单流标记片段
- 把趋势放到更高周期去判
- 把工具请下神坛
「极值扫描与挂单成交痕迹」
这段逻辑在找最近一段 K 线里的极值:当 type 为 MODE_HIGH 时,先把最近 100 根 K 线的最高价拷进按时间倒序排列的数组,从最新一根往老一根扫,只要还在创新高就记录,一旦出现比当前 high 低的棒线就 break,得到的就是「最近一波上涨的峰值」。 低点分支同理,用 DBL_MAX 作初始值向下找,遇到不更低就停。两个分支只要找到了有效极值,就把 price 赋过去并返回 true,否则统一在末尾返回 false。 下面这条成交记录值得在 MT5 里翻出来对照:2016.12.08 00:00:00 有一笔 Ticket 1 的 DEAL_TYPE_BALANCE 入金单,Volume 为空、Symbol 为空,Magic 与 Position ID 都是 0,说明它只是账户注资而非真实持仓成交。 同一策略当时下了 Sell 1.0 并挂了 Buy Stop 3.0,这种「先实卖、再用更大手数反向破位追多」的结构,在外汇与贵金属上属于高杠杆博弈,价格反向触发时亏损可能快速放大,务必先在策略测试器里跑一遍再上实盘。
else if(low_array[k]>low) class="kw">break; } if(low!=DBL_MAX) { price=low; class="kw">return(true); } } else if(type==MODE_HIGH) { class=class="str">"cmt">//--- 搜索最近的高点极值 class="type">class="kw">double high_array[]; ArraySetAsSeries(high_array,true); class="type">int copy=CopyHigh(m_symbol.Name(),Period(),class="num">0,class="num">100,high_array); if(copy==-class="num">1) class="kw">return(class="kw">false); class="type">class="kw">double high=DBL_MIN; for(class="type">int k=class="num">0;k<copy;k++) { if(high_array[k]>high) high=high_array[k]; else if(high_array[k]<high) class="kw">break; } if(high!=DBL_MIN) { price=high; class="kw">return(true); } } class=class="str">"cmt">//--- class="kw">return(class="kw">false); }
成交记录与订单查询的错位现象
在 MT5 历史回放里,偶尔会撞见这类提示:Order 0 is not found in the trade history between the dates 2010.08.07 11:06:20 and 2018.08.10 00:00:00。意思是系统在指定区间没翻到编号为 0 的订单,但同一时刻的 Deal 表却实实在在打印出了一笔成交。 下面这条成交记录就是典型样本:Ticket 和 Order 都是 2,成交时间 2016.12.08 00:00:00(毫秒戳 1481155200100),类型为 DEAL_TYPE_SELL,入场标记 DEAL_ENTRY_IN,Magic 15489,触发原因 DEAL_REASON_EXPERT,绑定 Position ID 2。 量价字段显示 Volume 1.00、Price 79.31、Commission 0.00、Swap 0.00、Profit 0.00,品种符号为 V。注意 Profit 为零说明这是开仓瞬间的成交切片,还没产生浮动盈亏。 这种订单号缺失但成交存在的错位,多半出现在早期历史数据或跨平台迁移的测试环境。碰到类似告警,别急着怀疑 EA 逻辑,先手动用 HistoryDealGetTicket 按时间区间捞一遍 Deal,再对照 HistoryOrderGetTicket 验证订单,往往能定位到底是数据断层还是查询姿势问题。外汇与贵金属品种点差跳变频繁,这类回测数据缺口可能放大策略评估偏差,实盘前务必用真实账户历史复验。
◍ 从一张订单回执看持仓结构
下面这条记录来自某次贵金属品种 V 的卖单成交回执,单号 2,建仓时间 2016.12.08 00:00:00,开仓价 79.31,当前价 79.39,初始手数 1.00、当前剩余 0.00,说明该笔仓位已完全平仓。 订单类型 ORDER_TYPE_SELL 配合 ORDER_STATE_FILLED,成交方式 ORDER_FILLING_FOK,Magic 15489、Reason 为 ORDER_REASON_EXPERT,表明这是 EA 在毫秒级时间戳 1481155200100 以即时全量成交逻辑触发的空单。 回执里 Position id 与 Ticket 同为 2、Position by id 为 0,意味着它独立开仓而非加仓或对冲衍生;sl/tp 均为 0.00,代表当时未挂止损止盈,风险完全裸露。 外汇与贵金属杠杆品种中,这种无防护的 FOK 市价单若遇跳空,滑点可能显著放大,开 MT5 历史回放该时间戳可核对当时真实点差。
「从挂单到成交的逐字段解剖」
下面这条记录是 MT5 真实历史交易库里的一笔买挂单转成交案例,时间落在 2016.12.08,品种代号 V,订单号与成交号都是 3,魔法码 15489,Position id 为 2。把它拆开看,能直接对应到 HistoryDeal 与 HistoryOrder 两张底层表。 Deal 部分显示:17:27:37 触发 DEAL_TYPE_BUY,入口标记为 DEAL_ENTRY_INOUT,成交价 79.75,成交量 3.00 手,佣金与库存费均为 0.00,浮动盈亏 -0.44。这说明挂单成交后短暂处于微亏,外汇与贵金属这类高杠杆品种里,几点浮亏是常态,不代表方向错。 Order 部分更关键:原是 ORDER_TYPE_BUY_STOP,14:30:00 挂出,同日 17:27:37 才被 ORDER_STATE_FILLED 吃掉,填充方式是 ORDER_FILLING_RETURN,原因 ORDER_REASON_EXPERT——即 EA 自动单。挂单到成交相隔近 3 小时,回测时若忽略这一时滞,容易把触发逻辑误判为即时市价单。 开 MT5 按 F6 调出某 EA 的历史,用右键「成交」与「订单」双视图对照,就能复现上面这种字段映射。下次写解析脚本,优先抓 Time setup 与 Time done 的差值,比只看成交时间更接近真实延迟。
从成交回执里读平仓单的真实字段
在 MT5 历史回放或实盘日志里,一笔平仓成交的回执会同时带订单上下文与成交明细。上面这张表截取的是 2016.12.09 23:59:00 的一笔卖出平仓:订单初始手数 3.00、当前手数 0.00,说明该订单已被完全平掉;开仓价 79.74,SL 挂在 75.17,TP 为 0.00 表示未设止盈。 成交行里 Ticket 与 Order 都是 4,Time msc 为 1481327940000(即 UTC 毫秒时间戳),Type 是 DEAL_TYPE_SELL、Entry 是 DEAL_ENTRY_OUT,确认这是针对 Position ID 2 的客户端主动平仓(DEAL_REASON_CLIENT),Magic 为 0 代表未绑定 EA 魔术码。 手数 3.00 与价格 79.74 出现在 Volume / Price 字段,但回执里 Commission、Swap、Profit 三列在截取段为空——真要算这笔平仓的净盈亏,必须等终端把这三列填实后再读,不能凭开仓价直接估算。外汇与贵金属杠杆品种跳空频繁,这类回执数据仅作复盘依据,实盘仍以券商结算为准,高风险。
◍ 回测终端里的成交单长什么样
在 MT5 策略测试器跑完一轮后,终端会把每一笔订单的结构化信息打印出来。上面这段是某次测试收尾时(end of test)截到的卖单记录: ticket 4,品种未显式标注但开仓价 79.13 指向 XAUUSD 一类报价,成交量 2.00 手,状态 ORDER_STATE_FILLED 表示已成交。 单子挂在 2016.12.09 23:59:00 建立并立刻以 FOK(Fill Or Kill)方式吃掉,建仓与成交的毫秒时间戳都是 1481327940000,说明这一笔从发单到撮合没有跨 tick 延迟。Magic 为 0、Reason 是 ORDER_REASON_CLIENT,意味着这是客户端手动或脚本直接下的单,不是 EA 带 magic 标识的自动单。 值得盯的是 sl / tp 两栏全是 0.00,Price current 却停在 79.13——也就是开仓价等于当前价,持仓已平(Volume current 0.00)且无止损止盈痕迹。外汇和贵金属杠杆高,这种裸单若放在实盘,价格反向跳空可能直接吞掉本金,回测里看着干净,实盘风险得自己补上防护。 把这段记录丢进 MT5 的「工具→历史中心」对照同时段 tick,能验证测试器撮合是否和真实点差吻合;若你写 EA,建议把 OrderGetInteger(ORDER_MAGIC) 和 ORDER_REASON 打进日志,免得回测单和实盘单混到一起分不清来源。
「回测日志里的首笔余额与订单缺失」
测试启动时终端先打一行标记:V 列到 end of test 之间显示 Sell 1.0、Buy Stop 1.0,说明这一轮脚本在 2016.12.08 00:00:00 之前就挂了卖单与买入止损各 1.0 手,但具体成交要往下看 Deal 记录。 首条 Deal 的 Ticket=1、Order=0,Time 为 2016.12.08 00:00:00(毫秒戳 1481155200000),Type 是 DEAL_TYPE_BALANCE、Entry 为 DEAL_ENTRY_IN、Reason 是 DEAL_REASON_CLIENT,Profit 显示 50000.00、Volume 0.00、Price 0.00000。这是外部入金或初始余额写入,不是真实开仓,账户起点权益就是 5 万。 紧接着一行提示:Order 0 is not found in the trade history between the dates 2010.08.07 11:06:20 and 2018.08.10 00:00:00。也就是说上面那笔 Deal 关联的 Order=0 在八年历史里查无此单——如果你在 MT5 里用 HistorySelect 按订单号回查却拿到空结果,先确认是不是碰上了这种余额类 Deal 的 0 号伪订单。 外汇与贵金属回测高风险,这类日志错位可能让统计脚本把入金当亏损或漏算仓位,跑策略前务必单独过滤 DEAL_TYPE_BALANCE。
从成交回执反推 EA 卖单结构
下面这条记录是某 EA 在 2016.12.08 00:00:00 触发的卖单成交回执,时间戳 1481155200100 对应 UTC+0 的整点,品种代号 V(外汇或贵金属类 CFD,具体标的需自行在 MT5 符号表核对,此类杠杆品种风险偏高)。 成交块显示 DEAL_TYPE_SELL / DEAL_ENTRY_IN,即新开空仓入场;Volume 1.00、Price 79.31、Commission 0.00、Swap 0.00、Profit 0.00,说明此刻仅是建仓,浮盈尚未计算。Magic 15489 是 EA 识别码,DEAL_REASON_EXPERT 表明由程序自动下单。 订单块里 ORDER_TYPE_SELL 配合 ORDER_STATE_FILLED,成交方式 ORDER_FILLING_FOK(Fill or Kill,要么全成要么撤),时间 setup 与 done 同为 1481155200100,说明从挂单到吃掉流动性在同一毫秒完成,没有排队延迟。 把这条回执直接贴进 MT5 的「交易」标签导出 CSV 对照,能验证你自己的 EA 是否也用了 FOK 填充——若券商拒绝 FOK,订单状态可能变成 REJECTED 而非 FILLED,这是实盘前要在策略测试器外再核一遍的盲点。
◍ 从成交回执里抠挂单与平仓细节
上面这张终端打印的回执,把一笔挂单的静态字段和对应的平仓成交拆开列了。挂单部分显示初始手数 1.00、当前成交量 0.00,开仓价 79.31,sl/tp 与 stoplimit 均为 0.00,说明这是一张尚未触发的纯限价挂单,品种标记 V、魔术码留空。 成交部分对应 ticket 3,时间落在 2016.12.08 17:27:37(毫秒戳 1481218057877),类型 DEAL_TYPE_BUY、入口 DEAL_ENTRY_OUT,即这是 EA 自动发起的买入平仓,关联持仓 ID 为 2、魔术码 15489。 开 MT5 终端用 Expert Advisor 跑一单,把订单号和持仓 ID 对上,就能确认挂单触发与平仓是否同一逻辑链。外汇与贵金属杠杆高,回执里的 sl=0 不代表无风险,价格跳空时可能滑点到更远。
「从一张订单回执看 Buy Stop 的成交链路」
下面这条记录是从某次回测里抓出来的真实订单回执,标的为 XAUUSD(代码内以 79.74 价位暗示黄金报价精度),挂单类型 ORDER_TYPE_BUY_STOP,初始体积 1.00 手,开仓价 79.74,止损 75.17,未设止盈。 挂单在 2016.12.08 14:30:00 被 EA 写入(ORDER_REASON_EXPERT,magic=15489),同一秒过期时间也设为 14:30:00,说明这是当根 Bar 触发型挂单;实际成交发生在 17:27:37,距挂单写入约 2 小时 57 分,成交回报模式为 ORDER_FILLING_RETURN。 注意 Volume current 已变为 0.00 而 Position id=2,代表这张挂单已完全转化为持仓号为 2 的仓位,并非残留未平。外汇与贵金属杠杆高,这类跳空后延迟成交的 Buy Stop 在重大数据窗口可能滑点扩大,验证时请在 MT5 历史回放里核对同周期 tick 密度。 开 MT5 按 magic 15489 过滤订单,能把这套 EA 的挂单→成交→转持仓路径完整复现,比读文档直观得多。
成交记录里的余额入账与查无此单
这组测试单里先挂了 Sell 2.0 手、Buy Stop 1.0 手,随后打印出的首条成交记录类型是 DEAL_TYPE_BALANCE,成交时间 2016.12.08 00:00:00(毫秒戳 1481155200000),利润字段显示 50000.00,成交量 0.00、价格 0.00000。它本质不是开平仓,而是账户入金或余额调整类的结算项,Magic 与 Position ID 均为 0。 紧接着历史查询返回一句:Order 0 is not found in the trade history between the dates 2010.08.07 11:06:20 and 2018.08.10 00:00:00。说明在约 8 年窗口内,订单号 0 根本不在成交历史里,这类 0 号常是系统占位或外部余额单,不能当真实挂单去回溯。 开 MT5 终端用 HistorySelect 拉长时间段后,若看到 DEAL_TYPE_BALANCE 且 Volume 为 0.00,直接归类为资金变动而非策略信号;写回测解析器时要把 Order==0 的成交跳过,否则会把 50000.00 这种余额项误算成策略收益。外汇与贵金属品种点值波动大,这类脏数据不滤掉,权益曲线会假漂亮。
◍ 从成交回执反推 EA 的卖单结构
下面这条终端打印记录,是某 EA 在 2016.12.08 00:00:00 触发的一笔卖单成交回执。成交时间戳 1481155200100 对应毫秒级 UTC,品种列显示为 V,成交量 2.00 手,成交价 79.31,佣金与库存费均为 0.00,开仓瞬间浮盈记 0.00。 Deal 部分里 DEAL_TYPE_SELL 配 DEAL_ENTRY_IN,说明这是新开空仓而非平仓或加仓;DEAL_REASON_EXPERT 表明信号来自程序而非手动。Magic 值 15489 是 EA 自留的身份标签,用来在后续历史里筛出这一套策略的订单。 Order 块补了执行细节:ORDER_STATE_FILLED 表示挂单已完全成交,ORDER_FILLING_FOK 意味着当时走的是「全部成交或全撤」模式,若流动性不足这笔就不会留尾巴。Type time 显示 1970.01.01 00:00:00,属于 GTC 类订单在未设到期时的默认占位,不是真实挂单时间。 把这类回执导出来对照,能直接核对 EA 是否按预设魔法数、手数和填充策略在下单。外汇与贵金属杠杆高,回测打印和实盘滑点可能有偏差,验证时建议先开 MT5 策略测试器跑同周期同品种。
「从成交回执里读出平仓痕迹」
上面这段终端打印的成交回执,记录了一次 EA 自动平仓动作:Ticket 3 对应 Order 3,成交时间 2016.12.08 17:27:37(毫秒戳 1481218057877),类型 DEAL_TYPE_BUY 但入口标记为 DEAL_ENTRY_OUT,说明这是把原有卖仓平掉的买入回补。 订单层显示初始 Volume 2.00、当前 Volume 0.00,Open 79.31、Price current 79.39,sl/tp/Price stoplimit 全为 0.00,意味着这张挂单已被完全消化,没有残留止损止盈。Magic 15489、Reason DEAL_REASON_EXPERT、Position ID 2,能直接反查到是哪段 EA 逻辑、哪条持仓触发的平仓。 外汇与贵金属杠杆高,这类自动回补若发生在消息行情,滑点可能让 Price current 偏离 Open 超过预期。开 MT5 按 F8 打开成交日志,用 Magic 号过滤,就能复现你自己的 EA 是否在重复同样路径。
从挂单回执里读出 Buy Stop 的真实成交路径
上面这段是 MT5 终端里一笔已成交挂单的原始回执。单子 Ticket 为 3,类型是 ORDER_TYPE_BUY_STOP,最终状态 ORDER_STATE_FILLED,说明挂单被触发并完全成交,不是撤单或部成。 注意时间字段:setup 时间是 2016.12.08 14:30:00,done 时间是 17:27:37,中间隔了约 2 小时 57 分。Buy Stop 挂在 79.74,SL 设在 75.17,距离入场约 4.57 美元(以该品种报价单位计),属于偏宽的止损。 Magic 是 15489,Reason 标为 ORDER_REASON_EXPERT,即 EA 自动下的单;Position id 为 2,说明它开出了编号为 2 的持仓。外汇与贵金属杠杆品种波动剧烈,这类宽止损挂单在高波动时段被扫的概率可能明显上升,实盘前建议在策略测试器里用相同 Magic 回放该日期。 直接打开 MT5 的订单历史(勾选「详细」视图),按 Ticket 筛选 3,就能看到同样的字段结构;把 SL 从 75.17 调到 77 附近,再跑一遍 2016.12 的行情,能直观对比被扫频率的变化。
◍ 回测尾单的成交结构长这样
上面这张表是某次 MT5 策略测试在 2016.12.09 23:59:00 收尾时打出的最后一笔成交(Deal)记录,品种代号 V,注释写着 'end of test',说明它是测试强制平仓的清场单。 这笔 Deal 的 Ticket 和 Order 都是 4,类型 DEAL_TYPE_BUY 且 Entry 为 DEAL_ENTRY_OUT,即平掉此前空头后的买入出场;成交量 1.00,成交价 79.13,佣金和库存费均为 0.00,净利润 +0.18,Magic 为 0、Reason 为 DEAL_REASON_CLIENT,Position ID 为 2。 把这行数据直接丢进 MT5 的'历史成交'窗口对照,就能确认你的 EA 在测试结束时有没有留下未平仓位。外汇与贵金属杠杆交易高风险,尾单微小利润不代表实盘可复制。 Order 部分接着列出了 Ticket 4 的挂单骨架:含 setup 时间、类型、状态、到期时间、done 时间,以及 setup/done 的毫秒时间戳和填充类型字段——这些在实盘查单时和 Deal 表要分开看,别混为一谈。
「回测尾单的成交记录长什么样」
上面这段是某次 MT5 策略测试在 2016.12.09 23:59:00 收尾时打印的一笔市价买单记录。订单类型为 ORDER_TYPE_BUY,状态 ORDER_STATE_FILLED,成交填充方式是 ORDER_FILLING_FOK,说明这一单在那一刻必须全部吃进、否则不成交。 品种符号是 V,注释写着「end of test」,成交量初始 1.00、当前 0.00,开仓价与当前价都是 79.13,sl/tp 均为 0.00,Position id 为 2。这意味着该订单在测试结束时已经平掉或对冲完毕,账面残留仓位为零。 回测日志里紧接着还有一行「Buy 2.0, Sell limit 2.0」,提示同一时刻挂了一手 2.0 的买市价和一手 2.0 的卖限价。外汇与贵金属品种的高杠杆特性会让这类尾单在实盘滑点下偏离回测成交价,验证时务必用「逐笔成交」模式重跑。 开 MT5 按 F6 跑完测试后,到「交易」标签翻到最后一笔,对照上面字段核一遍 Time msc 与 Position id,就能确认自己的日志解析脚本有没有漏掉 FOK 填充单。
从成交回执里抠出挂单生命周期
下面这条历史成交记录来自 MT5 真实账户回执,时间是 2018.08.10 07:23:34,成交单号 29080489,品种代号 RTSGZU8,买入开仓 1.00 手、成交价 14595,佣金 -0.10、库存费 0.00、当时浮盈 0.00。 回执分两层:Deal 层标记 DEAL_TYPE_BUY / DEAL_ENTRY_IN,说明这是一笔客户手动发起的入场成交;Order 层则显示 ORDER_TYPE_BUY 且 ORDER_STATE_FILLED,成交与挂单设置时间都是同一毫秒(1533885814000),证明是市价单瞬间吃单,不是预先挂的单。 注意 Type filling 字段是 ORDER_FILLING_RETURN,意味着若流动性不足会退回未成交部分而不是部分成交。Magic=0 且 Reason=ORDER_REASON_CLIENT,说明这不是 EA 下的单,而是交易员在终端手动点的。外汇与贵金属这类高杠杆品种,手动单和算法单混在同一个账户时,靠 Magic 与 Reason 字段就能在日志里一刀切开。
◍ 从成交回执里读挂单与成交明细
MT5 的订单与成交打印输出里,第一行 Order 块先给挂单骨架:初始手数 2.00、当前手数 0.00,说明这张单子还没部分成交;开仓价、止损、止盈、现价、stoplimit 全部为 0,配合 Symbol 字段 RTSGZU8 与 External id 13_31861873584,能确认是一张未触发的待挂单。 紧接其后的 Deal 块才是真实成交:Ticket 20087495 对应 Order 29080489,时间 2018.08.10 07:23:34(毫秒戳 1533885814000),类型为 DEAL_TYPE_BUY、ENTRY_IN,即客户端主动建仓买入,Position ID 与 Order 同号 29080489。 对比两组数据能看到关键差异——Order 里 Volume current 是 0,Deal 里才有实际成交手数与价格字段,Commission / Swap / Profit 也只在 Deal 出现。做复盘时若只解析 Order 结构会漏掉已平仓损益,必须同时抓 Deal 打印块。 外汇与贵金属品种波动剧烈、杠杆风险高,这类回执解析仅用于本地校验策略日志,不构成任何方向预判。
「从成交单结构反推订单对象字段」
MT5 的订单历史打印出来是一张宽表,上面这条 2018.08.10 07:23:34 的买单记录,单号 29080489,成交量初始 2.00 手、当前 0.00,说明仓位已完全平仓。开价字段是 0、sl/tp 都是 0,而当前价 14588,这种全零开价常见于市价单回报填充(ORDER_FILLING_RETURN),实战里不要用开价为零去推算入场成本。 订单对象里 Time setup msc 和 Time done msc 都是 1533885814000,精确到毫秒的建单与成交时间一致,意味着这一笔从发单到撮合几乎没有排队延迟。Magic 为 0、Reason 是 ORDER_REASON_CLIENT,表明是手动或脚本直发而非 EA 策略魔数单,排查跟单系统漏单时这类记录要单独过滤。 外汇与贵金属杠杆高,手动单无 sl/tp 意味着裸奔,价格反向跳动可能瞬间扩大浮亏。打开 MT5 终端的「交易」标签,右键某笔历史单选「明细」,对照上面字段逐一核对,就能确认你的桥接或复制交易有没有偷偷改了 filling 类型。
从成交回执反推挂单生命周期
下面这条 RTSGZU8 的成交回执,完整暴露了一张卖限价单从挂出到平仓的全过程。订单 29080662 在 2018.08.10 07:27:19 以 ORDER_TYPE_SELL_LIMIT 挂出,有效期与挂单时间相同,说明是当日有效单,最终状态 ORDER_STATE_FILLED 表示已被撮合。 对应的成交单 20088091 显示 DEAL_TYPE_SELL 且 DEAL_ENTRY_OUT,即这是平掉多仓的卖单,成交价 14626,成交量 1.00,佣金 -0.10,库存费 0.00,净利润 0.46。Magic 为 0、Reason 为 DEAL_REASON_CLIENT,说明是交易者在终端手动平仓,而非 EA 自动触发。 把 Order 与 Deal 的时间戳对齐能看到:挂单 07:27:19 发出,08:05:42 才成交,中间隔了约 38 分钟,填充方式是 ORDER_FILLING_RETURN(回踩成交)。这种限价单被拖动到市价后被动触发的路径,在 MT5 历史回执里可以直接用 Ticket 关联 Order 与 Deal 两张表来做复盘。 开 MT5 按 F6 调出某笔持仓的历史,用 Order Ticket 搜 29080662、用 Deal Ticket 搜 20088091,就能验证上面这套字段映射。外汇与贵金属杠杆交易风险较高,回执里的利润数字不代表任何策略的可持续收益。
◍ 从成交回执反推平仓链路
MT5 的持仓与成交是两张分离表,靠 Position ID 串起来。上面这段原始记录里,持仓 29080489 初始 Volume 2.00、开仓价 14626,current volume 已归 0,说明仓已平完;同页 Deal ticket 20088145 的 Position ID 正是 29080489,Entry 标为 DEAL_ENTRY_OUT、Type 为 DEAL_TYPE_SELL,即这是一笔主动平仓卖单。 注意时间字段:持仓头里的 Type time 显示 1970.01.01 00:00:00,那是未成交挂单或系统占位时间,不代表真实开仓;真实动作要看 Deal 里的 2018.08.10 08:05:42(毫秒 1533888342000)。开外汇或贵金属这类高杠杆品种时,这种时间错位容易让人误判持仓时长,复盘前先以 Deal 时间为准。 Magic 为 0、Reason 是 CLIENT / DEAL_REASON_CLIENT,表明这是手动下的单,不是 EA 自动管仓。External id 里的 13_31862155871 通常是券商侧流水号,跨平台对账时能派上用场。
「从一张成交回单读懂挂单生命周期」
下面这条记录是 MT5 终端里一笔 SELL LIMIT 挂单从埋单到成交的真实回单。票号 29080662,品种未标注但 Open price 14626、Volume 2.00,结合上下文大概率落在贵金属或指数差价合约上,外汇高风险品种请自行对照点值。 挂单于 2018.08.10 07:27:19 以 ORDER_TYPE_SELL_LIMIT 形态进入系统,触发价 14626,初始挂单量 2.00 手。到 08:05:42 状态翻成 ORDER_STATE_FILLED,说明限价卖单在 38 分钟窗口内被触碰成交,成交时 Price current 报 14624,比挂单价低 2 点——这是 RETURN 填充模式下常见的滑点方向。 Magic 为 0、Reason 是 ORDER_REASON_CLIENT,表明这是交易者在客户端手动下的单,不是 EA 自动触发;Position id 29080489 独立存在、Position by id 为 0,证明它开出了一个全新空头头寸,而非平仓或反手。 sl 和 tp 都是 0,代表这笔单没有带止损止盈,纯裸单。贵金属和外币对波动剧烈,这种无防护挂单在跳空时可能扩大亏损,复制前先想清楚自己的风控线。
残留的订单流标记片段
这段原文在抓取时只留下了一行疑似订单或会话标识的残片:RTSGZU8 与 13_31862155871 并列,中间由大量空白分隔。 从 MT5 终端的日志与专家日志格式看,这种形如「前缀+下划线+长整型」的字符串,通常是某次回测任务或实时信号的本地追踪码,本身不含可执行的交易逻辑。 如果你在自有 EA 的 Print() 输出里也撞见类似行,建议直接 grep 对应前缀,定位是哪一段代码在写日志,而不是拿这串字符去反推策略。外汇与贵金属行情受杠杆与跳空影响,任何日志残片都不能作为下单依据,仅可作排查用途。
◍ 把趋势放到更高周期去判
选项1里趋势指标和动能指标挤在同一个周期,选项2只多做一件事:把趋势判断搬去更高时间帧,顺带引出一个新参数——Trend timeframe(趋势时间帧)。这样同一张图表上跑的仍是动能类信号,但方向过滤交给大一级周期,逻辑上更不容易被本级噪声带偏。 这套做法已经落地在 Elder-Ray 2.000.mq5 这个 EA 里,它对应“三重选则”系统的结合版本。同批附属文件里,Elder-Ray 1.020.mq5 负责定义趋势并校验定义有效性,1.030.mq5 是选项1的运行时版本,两者对照看能直观摸清周期上移改了哪几处逻辑。 想自己验证,直接把 1.020 和 2.000 的两个 EA 都挂上同一品种,分别打印 Trend timeframe 取值,就能看到后者默认占用更高周期资源。外汇与贵金属杠杆高、滑点跳空频繁,跨周期过滤只降低伪信号概率,不消除方向误判风险。
「把工具请下神坛」
Elder-Ray 的多头力度与空头力度,配合更高时间帧的 EMA 趋势过滤,在「三重选择」框架里确实更稳一些,但它从来不是印钞机。实测跑这套 EA 时有个硬约束:文本文件最多塞 100 个品种,启动测试可能耗到 10 分钟,过程中内存占用可能冲到 5 GB,老机器直接劝退。 外汇和贵金属杠杆高、回撤凶,任何系统都只是概率工具。真要上手,先把自己变成那个「介入过程的人」——调时间帧、看力度穿越零轴、盯内存曲线,比盲目信回测更有用。 代码和 ZIP 都在手边了,开 MT5 跑一遍 45 KB 的 Elder-Ray 包,比读十篇吹捧文都实在。