系统设计介绍:基于 H1 周期与 ATR 的动态趋势跟踪 EA
1. 系统概述
本 EA(智能交易系统)基于 MetaTrader 5 平台开发,核心策略为日间趋势跟踪。它使用 1 小时(H1)K 线图作为数据源,通过比较最近 1 根与 6 根 K 线前的价格变化判断短期趋势方向,并结合 ATR(平均真实波幅) 动态计算止损与止盈距离。系统设计强调每日仅交易一次、单笔持仓控制以及波动率自适应风控。
2.1 开仓条件
无任何持仓(
PositionsTotal() == 0)当日尚未开仓(通过
lastTradeDay变量确保每日最多一笔交易)历史 K 线充足(至少 10 根 H1 K 线,保证计算第 6 根开盘价)
趋势信号:
trend = close1 - open6若
trend > 0→ 开多单若
trend < 0→ 开空单(注:当前代码片段未显式写出开仓动作,但参数与逻辑指向顺势突破)
2.2 止损与止盈(动态 ATR 倍数)
SL_Multiplier = 1.5:止损距离 =1.5 × ATRTP_Multiplier = 3.0:止盈距离 =3.0 × ATR使用当前 ATR 值(基于 H1 周期,周期数 14)计算******点数,然后转换为价格偏移:
ask - SL_distanceask + TP_distance做空bid + SL_distancebid - TP_distance2.3 仓位管理
固定手数:
LotSize = 0.1手(可外部调整)魔术号(MagicNumber)用于区分该 EA 的订单,便于管理
3. 模块与函数设计
3.1 初始化函数 OnInit()
强制周期检查:若非 H1 图表,弹出报警并停止运行。
创建 ATR 指标句柄:
iATR(_Symbol, PERIOD_H1, ATR_Period)设置魔术号:
trade.SetExpertMagicNumber(MagicNumber)随机数种子:为可能的随机化扩展提供基础(当前未使用)
3.2 核心数据获取
double close1 = iClose(_Symbol, PERIOD_H1, 1); // 前一根已完成K线的收盘价 double open6 = iOpen(_Symbol, PERIOD_H1, 6); // 6根K线前的开盘价 double atrValue = atrBuffer[0]; // ******ATR值
3.3 每日交易限制
通过
MqlDateTime结构提取当前日期的“日”字段,与上次交易日期(lastTradeDay)比较。注意:
TimeDay()返回当月日期(1~31),跨月时需结合月份比较更严谨;当前实现简单有效,适用于同月份内每日一次。