EA(Expert Advisor)会严格执行写入代码的条件。人可以凭经验理解“趋势明显”“回调到位”,程序却不知道这些词对应哪些价格、指标和时间条件。因此,从需求到源码最重要的工作不是马上写代码,而是先消除歧义。

需求文档必须写清什么

基础信息

先确定MT4或MT5、交易品种、报价位数、运行周期、是否允许多品种、订单识别方式以及经纪商可能存在的最小止损距离。平台不同,订单与持仓模型也可能不同,不能只替换文件扩展名。

入场与离场

多单和空单分别写出指标参数、比较关系、使用当前K线还是已收盘K线、信号是否只触发一次。离场需要区分固定止损、止盈、跟踪止损、反向信号、时间退出和紧急风控的优先级。

仓位与限制

明确固定手数或风险比例、最小和最大手数、最大同时持仓、同方向加仓、最大点差、交易时段、周末处理和连续亏损限制。所有输入参数都应有合理默认值与边界。

把“均线回调做多”改写成规则

例如:仅使用已收盘K线;50周期EMA高于200周期EMA;前一根K线最低价触及或跌破50EMA但收盘重新站上;当前无本策略多单;点差不超过设定值;以信号K线低点减去缓冲作为初始止损;仓位按账户净值的固定风险比例计算。即使这个规则未必有效,它至少已经可以编写、回测和否定。

从规则到交付的六个阶段

  1. 需求确认:列出所有模糊词、冲突条件和缺失参数,确认后冻结版本。
  2. 逻辑建模:把信号、过滤、仓位、订单管理拆成独立模块,并定义执行顺序。
  3. 源码生成:加入参数校验、错误处理、日志、MagicNumber和重复下单保护。
  4. 本地编译:用户下载源码后在自己的MT4/MT5 MetaEditor编译并处理警告。
  5. 历史验证:使用可靠数据检查逻辑是否按预期触发,而不只看最终收益。
  6. 模拟观察:在真实报价环境检查点差、滑点、断线、重启和交易时段差异。

生产服务器不安装或运行MT4、MT5。源码生成与平台运行应当分离,编译和测试由用户在本地终端完成,这样账户凭据与交易权限不会交给网站。

回测时要检查的不只是净利润

  • 逐笔抽查入场和离场,确认代码没有偷看未来K线。
  • 分别测试正常点差、扩大点差和额外滑点。
  • 观察最大回撤、连续亏损、持仓时间和极端单笔结果。
  • 把开发期与样本外测试期分开,避免反复调参拟合全部历史。
  • 更换品种、年份和波动环境,判断规则是否只依赖某一段行情。
  • 测试终端重启、网络恢复、订单拒绝和无效报价等异常路径。

交付验收清单

源码应当无错误编译,关键参数有中文或清晰注释,订单只由对应MagicNumber管理,重复信号不会意外叠加持仓,手数与价格按品种规格规范化,日志能解释为什么下单或放弃。测试版和正式版应分别保存版本号与需求文档。

风险提示

历史回测和模拟盘结果不代表未来表现。马丁、网格和无硬止损策略可能在长时间平稳后出现集中损失。任何EA在实盘前都需要独立审查与充分测试。