在亚洲市场进行夜间交易: 如何保持盈利·综合运用
(3/3)·从时区错位的平盘本质到回测验证,补齐前两步缺的最后一块拼图
◍ 挂单与持仓的互斥清理逻辑
这段片段展示了在 EA 主循环里如何处理 SellStop 挂单与反向持仓的冲突。先以 trade.SellStop 在指定价位挂空单,并立即用 trade.Result 取回成交回执,随后把 work 置 false 锁住本次发单,避免同根 K 线重复刷单。 当账户里已有持仓且 work_del 开关为真时,代码用 PositionSelect(_Symbol) 锁定当前品种,再读 POSITION_TYPE 判断多空方向。若是空单在跑,就删掉之前备好的 buy 挂单;若是多单在跑,则删掉 sell 挂单——保证同一标的不会多空挂单同时悬着。 持仓数归零会把 work_del 重新打开,而当前小时不等于预设发单小时 order_time 时,work 又被置真,等于给下一根 K 线腾出发单窗口。外汇与贵金属杠杆高,这类自动删单逻辑若 SL/TP 传参为空,可能在剧烈波动中留下无保护仓位,上 MT5 用策略测试器跑 2023 年 XAUUSD H1 复盘能直接看到删单触发次数。
trade.SellStop(order_volume,price_sell,_Symbol,sell_sl,sell_tp,ORDER_TIME_SPECIFIED,time_end,"SellLimit"); trade.Result(result_sell); work=class="kw">false; } if(PositionsTotal()>class="num">0 && work_del==true) { PositionSelect(_Symbol); class="type">long position_type=PositionGetInteger(POSITION_TYPE); if(position_type==POSITION_TYPE_SELL) trade.OrderDelete(result_buy.order); if(position_type==POSITION_TYPE_BUY) trade.OrderDelete(result_sell.order); work_del=class="kw">false; } if(PositionsTotal()==class="num">0) work_del=true; if(time_now_str.hour!=order_time) { work=true; } }
「布林带夜盘策略的回测账本」
拿 EURUSD 在 M30 跑 2017.01.01–2017.11.03,初始存款 100 AUD、杠杆 1:100,优化出的参数是:夜间 1:00–11:00(MSK)工作,布林周期 11、信号偏移 12、预留空间 13,止损 140 点、获利 120 点,每周全开但周二休。 用 M1 的 OHLC 模式回测,净利约 152%;换「真实分时每一分时」模式降到 48%,作者归因为历史数据质量差异。两种模式回撤都压在 25% 以内,对外汇和贵金属这类高杠杆品种来说,这个回撤控制值得盯一眼。 把 EA 放到图 3 里的前两个时段细看:第一段三次入场,首单止损、后两单吃亚洲尾盘和欧洲开盘的获利;第二段两次入场一盈一亏;第三段因为是周二直接空仓。跨品种扩测 AUDUSD / GBPUSD / NZDUSD / USDCAD / USDCHF 同周期,综合下来 EURUSD、NZDUSD、AUDUSD 最适配,信号在盈亏比不超 1:3 时最有用。 USDJPY H1 上改了剧烈波动版:order_sl 从 110 拉到 140,8:00 MSK 入场受欧盘牵连,2015 年起拉长看基本无利润。重新锁亚洲夜盘、只周二 4:00 MSK 开仓,止损 270、获利 220、挂单位距 130 点,2015–2017 才转正。外汇高风险,回测盈利不等于实盘能复现,开 MT5 用这几组参数自己跑一遍最实在。
一点提醒
回测里布林带平缓振荡策略在亚洲夜盘表现最稳,小回撤取利的概率偏高;波动触发型策略白天中等优秀,但收益更受星期几影响而非通道信号,长期跑下来冗余明显,作者已不打算再改。 两个 EA 文件都在附件里:BollingerBandsForFlat_v1.01.mq5 专做亚洲时段横盘,TimeBuyOrSell_v1.01.mq5 扑市场最乱的时点。外汇与贵金属杠杆高、滑点狠,夜盘流动性薄,拿去 MT5 复盘前先关掉自动下单,手调 div_signal 看价差怎么吃信号。 策略简单不代表能裸奔,真要上实盘得自己压住仓位,把星期效应和平台点差算进回测再说话。