首页 / 交易学院 / 小布知识库 / 从零写第一个 EA:MA+ADX 分步指南
从零写第一个 EA:MA+ADX 分步指南
🐣

从零写第一个 EA:MA+ADX 分步指南

用 MA+ADX 范例,从向导建壳到测试器跑通第一个 EA

EA 开发实战 难度 · 入门 2026-07-15 12 分钟阅读
#EA#入门#MA#ADX#分步

本文用 MA-8 趋势 + ADX 过滤做范例:先人工定义买卖条件,再逐步代码化,适合零基础。

一、先定策略,再写代码

别一上来就抠语法。先把“什么时候买、什么时候卖”用自然语言写清楚,再翻译成代码,效率最高。

二、用向导搭骨架

三、初始化与反初始化

OnInit 里取指标句柄(iMA、iADX)、按 _Digits 调整止损止盈点数;OnDeinit 用 IndicatorRelease 释放句柄,避免泄漏。

✦ 三大基石
指标句柄、幻数(Magic)、新柱判断(static datetime Old_Time)是 EA 三大基石,先吃透再堆逻辑。

四、OnTick 核心逻辑

五、买卖条件

⚠ 教学值别照抄
固定 30 点止损、100 点获利只是教学值;实盘必须把止损距离与账户风险、品种波动挂钩,别照抄数字。

六、调试与测试

MetaEditor 设断点(F9)单步(F10/F11)监视变量;Strategy Tester(Ctrl+R)选品种/周期/日期,看图形与报表;可调周期、止损再优化。

七、ADX 阈值怎么调

ADX 衡量趋势强度而非方向:经验上 ADX<20 视为震荡、>25 视为有趋势,参数常用 14。别把 ADX 当买卖信号,它只回答「现在适不适合用趋势策略」;震荡市就切到均值回归或空仓,避免被双 MA 来回打脸。

八、信号逻辑:MA 交叉加 ADX 过滤

第一个 EA 用「快线穿慢线」做方向,再用 ADX 过滤「趋势够不够强」:ADX 低于阈值说明震荡市,交叉多是假信号,直接不开仓。这样把「什么时候交易」和「交易什么方向」拆成两层判断。

阈值别拍脑袋:ADX 用 20 还是 25,要看历史里哪种更能躲开震荡亏损。第一版宁严勿松,先保证少亏,再逐步放开。 一个省事的做法是按品种波动率动态设阈值:波动大的品种用更高的 ADX 门槛,过滤掉更多假突破;波动小的品种适当放低,避免长期空仓。

九、下单与手数计算

信号确认后用 CTrade 下单,手数不要写死,而是按账户净值与止损距离反推(风险百分比法),账户缩水自动减仓。这是新手最容易忽略、却最能保命的一环。

#include <Trade/Trade.mqh>
CTrade trade;
void OnTick()
{
   if(CrossOver() && ADX() > 20)
      trade.Buy(RiskLot(), _Symbol);   // 风险百分比定手数
}
✦ 手数随账户走
写死 0.1 手,账户回撤时风险占比飙升。用风险百分比反推,回撤自动减仓,活得更久。

十、回测验证清单

上线前至少跑三年历史,看期望收益、最大回撤、盈利因子;再切一段没参与优化的样本外数据重跑,确认不是过拟合。两者都过关才敢用极小仓(0.01 手)上模拟盘。 三年里最好覆盖至少一次趋势市和一次震荡市,单看一段行情容易高估策略;若只在暴涨段回测漂亮,震荡段一上来就亏,那策略并不可靠。

清单逐条核对:信号是否去重(不会每 tick 都开)、止损是否真的挂上、部分成交是否处理。把这些写成检查项,比事后 debug 省十倍时间。 顺便把每次「想开仓却被风控拦下」的原因记进日志,跑一段时间你就知道自己的信号到底卡在哪类行情,反向优化信号比盲调参数有效。

十一、小结

✦ 小结
第一个 EA 不要贪复杂:MA 交叉定方向、ADX 过滤震荡、CTrade 下单、手数用风险百分比反推。上线前三年回测加样本外验证,逐条核对去重与止损。先求少亏,再求多赚。

常见问题

能。文章是分步向导建壳再填空的模式,先把骨架跑通,再理解每一段,比一上来啃语法书高效。
避免同一根 K 内重复触发开仓,既省算力也防止一根柱里连开多单,逻辑更干净。
ADX 衡量趋势强度,22 是常用门槛;低于它说明震荡市,趋势策略容易挨耳光,所以用来过滤。
点位(_Point)在 5 位平台是 0.00001,而 30 点止损通常指 30 个报价点 = 0.00030,要把输入参数乘 10 换算。
不能。教学 EA 未做样本外验证与风控,先前向测试、小仓位试,确认稳健再放大。