首页 / 交易学院 / 小布知识库 / EA 交易的限制与验证:开仓前的 7 道安全检查
EA 交易的限制与验证:开仓前的 7 道安全检查
🛡️

EA 交易的限制与验证:开仓前的 7 道安全检查

一个稳健 EA 在发单前必须自查什么——交易时段、保证金、止损风险、新 K 线、挂单与手数限制。

EA 开发实战 难度 · 进阶 2026-03-10 13 分钟阅读
EA验证保证金手数限制新K线交易时段OrderCalc

一、为什么 EA 需要「限制」

EA 一旦自动运行,就可能因为逻辑漏洞在几秒内下几十单、或在单边行情里无限加仓,把账户打穿。所谓「限制」,就是给 EA 装上护栏:单日最大单数、最大持仓、最小下单间隔、最大回撤熔断。没有这些,回测再漂亮也只是纸面富贵。

限制的本质是承认「我会写错代码、市场会出意外」。护栏不是不信任策略,而是不信任自己和极端行情。职业 EA 的第一行代码往往不是信号,而是风控。

二、单日/单品种订单数上限

用 OrdersTotal() / PositionsTotal() 配合时间戳,限制单位时间内的下单次数。例如「距上一单至少 60 秒」「当日最多 20 单」。这能挡住因信号抖动导致的重复下单,也能在逻辑死循环时保命。

datetime lastOrder = 0;
bool CanOrderNow()
{
   if(PositionsTotal() >= MaxPositions) return false;
   if(TimeCurrent() - lastOrder < MinGapSec) return false;
   return true;
}

三、保证金与可用资金护栏

下单前用 AccountInfoDouble(ACCOUNT_MARGIN_FREE) 或 AccountInfoDouble(ACCOUNT_EQUITY) 检查剩余保证金/权益是否够。结合「单笔风险不超过净值 1%~2%」反推手数,从源头避免保证金不足被拒或强平。

更稳妥的做法是动态手数:随净值增长放大、随回撤缩小。这样在连亏时自动降仓,而不是死扛固定手数直到爆仓。

四、最大回撤熔断

记录策略启动以来的权益高点,当当前权益低于高点一定百分比(如 15%)时,强制停止开新单甚至清仓。这是 EA 的「保险丝」,防止一次黑天鹅或一段持续亏损把账户打成负数。

⚠ 没有熔断的 EA 等于裸奔
任何不监控回撤的 EA,都在赌「这段行情不会打破历史」。但黑天鹅恰恰专挑这种自信。回撤熔断是底线,不是可选项。

五、验证:先在历史里拷问 EA

上线前用策略测试器的「每 tick」模式把 EA 跑穿:看它在极端行情(跳空、流动性枯竭、点差飙升)下是否还守得住限制。测试器里人为制造极端条件(如调大点差、选剧烈行情段),观察护栏是否真的工作。

六、验证:用日志与断言抓逻辑错误

在关键分支加 Print/Comment 输出状态,用 OnTrade 监听成交事件核对「该下的单是否真下了、该止的损是否真止了」。更复杂的,可在开发期用断言(ASSERT 风格日志)捕获不变量被打破的情况,比如「持仓数不应为负」。

七、常见验证盲区

很多人验证只看「盈利」,不看「限制是否真触发」。要专门测试:把 MaxPositions 设成 1,看 EA 会不会违反;把行情调成暴涨,看回撤熔断会不会停。只有这些边界被验证过,EA 才算可信。

八、限制参数的取值经验

单数上限、最小间隔、回撤熔断百分比没有标准答案,取决于策略频率与品种波动。建议从保守值起步,再用回测逐步放宽到「刚好不挡正常交易」。一组常见起点:最小下单间隔 MinGap=60 秒、最大同方向持仓 MaxPositions=3、回撤熔断 15%。重点是这些数字要来自你对自己策略的观察,而不是拍脑袋,且上线后要随实盘表现微调。

九、护栏也要被拷问

护栏上线前要在测试器里被『拷问』:把 MaxPositions 设成 1,看 EA 会不会违反;把行情调成暴涨暴跌,看回撤熔断会不会停、市价单会不会被滑点打穿。很多人只测『盈利多少』,不测『限制是否真触发』。没被测过的护栏等于没装——它只是在代码里安静地躺着,真出事时从不起作用。

十、限制的优先级

记住:限制的目标不是赚更多,而是保证 EA 不会自己把自己搞死——这条优先级高于任何收益优化。一个平庸但永不出格的 EA,远胜暴利但随时崩盘的 EA。

11、小结

✦ 先保命,再赚钱
EA 的限制与验证,目标不是提升收益,而是保证它不会自己把自己搞死。一个平庸但永不出格的 EA,远胜一个暴利但随时崩盘的 EA。

常见问题

先写风控护栏(单数上限、持仓上限、最小间隔、回撤熔断),再写信号。没有护栏的信号,上线即风险。
在测试器里人为制造极端行情(调大点差、选剧烈段),把上限设小看 EA 是否违反;并用 OnTrade 核对实际成交与预期一致。
动态手数(随净值/回撤缩放)更稳,能在连亏时自动降仓;固定手数在回撤期反而放大了破产风险。