Summary: 本EA采用ATR止损和双均线趋势过滤,低风险交易黄金与外汇品种,避免过度交易,内置硬止损和止盈。




本EA针对黄金(XAUUSD)及主要外汇品种设计。它基于双均线交叉,结合ATR动态止损止盈。交易逻辑要求趋势确认(快速均线高于慢速均线做多,低于做空)以及最低ATR过滤以避免低波动期。每次仅持有一笔仓位。硬止损/止盈可防范市场跳空。使用MQL4 build 600或更高版本编译。参考来源:基于经典趋势跟随和波动率管理技术。

```mql4
//+------------------------------------------------------------------+
//| LowRiskGoldEA.mq4 |
//| Generated by Professional Developer |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, LowRisk Trader"
#property link ""
#property version "1.00"
#property strict

//+------------------------------------------------------------------+
//| 输入参数及其注释 |
//+------------------------------------------------------------------+
input double LotSize = 0.01; // 固定手数(微型账户最小0.01)
input int FastMAPeriod = 5; // 快速移动平均线周期
input int SlowMAPeriod = 20; // 慢速移动平均线周期
input int ATRPeriod = 14; // ATR周期用于波动率计算
input double ATRMultiplierSL = 2.0; // 止损的ATR倍数(例如2.0表示止损=2倍ATR)
input double ATRMultiplierTP = 3.0; // 止盈的ATR倍数(必须大于ATRMultiplierSL)
input int MinATRValue = 150; // 最小ATR值(点数),过滤低波动(例如黄金用150)
input int MagicNumber = 202501; // EA唯一标识符
input int Slippage = 30; // 允许滑点点数
input bool TradeLong = true; // 允许开多单
input bool TradeShort = true; // 允许开空单

// 全局变量
double atrValue;
int ticket;
bool isOrderOpened;

//+------------------------------------------------------------------+
//| EA初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
if(FastMAPeriod >= SlowMAPeriod)
{
Print("错误:快速均线周期必须小于慢速均线周期,EA停止。");
return(INIT_PARAMETERS_INCORRECT);
}
if(ATRMultiplierTP <= ATRMultiplierSL)
{
Print("错误:止盈倍数必须大于止损倍数,EA停止。");
return(INIT_PARAMETERS_INCORRECT);
}
isOrderOpened = false;
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| EA反初始化函数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment(""); // 清除图表注释
}

//+------------------------------------------------------------------+
//| EA tick处理函数 |
//+------------------------------------------------------------------+
void OnTick()
{
// 检查本EA是否已持有仓位
isOrderOpened = IsExistingOrder();
if(isOrderOpened)
return;

// 计算ATR并过滤低波动
atrValue = iATR(Symbol(), PERIOD_CURRENT, ATRPeriod, 1);
if(atrValue < MinATRValue)
return; // 市场过于平静,不交易

// 获取移动平均值
double fastMA = iMA(Symbol(), PERIOD_CURRENT, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double slowMA = iMA(Symbol(), PERIOD_CURRENT, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

// 交易信号
bool buySignal = (fastMA > slowMA) && TradeLong;
bool sellSignal = (fastMA < slowMA) && TradeShort;

if(buySignal)
{
double sl = NormalizeDouble(Ask - (atrValue * ATRMultiplierSL), Digits);
double tp = NormalizeDouble(Ask + (atrValue * ATRMultiplierTP), Digits);
sl = NormalizeDouble(MathMax(sl, MarketInfo(Symbol(), MODE_STOPLEVEL)), Digits);
tp = NormalizeDouble(MathMax(tp, MarketInfo(Symbol(), MODE_STOPLEVEL)), Digits);
ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, sl, tp, "LowRiskGold EA", MagicNumber, 0, clrGreen);
if(ticket < 0) Print("买入订单失败:", GetLastError());
}
else if(sellSignal)
{
double sl = NormalizeDouble(Bid + (atrValue * ATRMultiplierSL), Digits);
double tp = NormalizeDouble(Bid - (atrValue * ATRMultiplierTP), Digits);
sl = NormalizeDouble(MathMin(sl, Bid - MarketInfo(Symbol(), MODE_STOPLEVEL)), Digits);
tp = NormalizeDouble(MathMin(tp, Bid - MarketInfo(Symbol(), MODE_STOPLEVEL)), Digits);
ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, sl, tp, "LowRiskGold EA", MagicNumber, 0, clrRed);
if(ticket < 0) Print("卖出订单失败:", GetLastError());
}
}

//+------------------------------------------------------------------+
//| 检查是否已存在本EA的订单 |
//+------------------------------------------------------------------+
bool IsExistingOrder()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
return true;
}
}
return false;
}
//+------------------------------------------------------------------+
```

加载周期建议: 将EA应用于黄金(XAUUSD)的H1(1小时)图表,或主要外汇对的M30图表。较高时间周期有助于减少市场噪音。

交易逻辑简述: EA使用双SMA交叉(快速5周期上穿慢速20周期)判断趋势方向。ATR(14周期)计算市场波动率以设置动态止损和止盈,确保风险与波动率成正比。最低ATR过滤器防止在极其平静的市场中交易。每次仅持有一单,并带有硬止损/止盈。

*参考来源:改编自机构算法交易中使用的经典移动平均线交叉和ATR止损方法。*

免责声明: 本EA仅供教育用途。过往业绩不保证未来结果。实盘交易前务必在模拟账户上充分测试。作者不对任何资金损失承担责任。
```