黄金稳定EA专为交易黄金(XAUUSD)设计,核心目标是保护资金。它结合了简单的移动平均线交叉和基于ATR的波动率过滤器,以避开震荡市场。仅在趋势方向明确且波动率高于安全阈值时开仓。每笔交易均设有基于当前ATR的固定止损和止盈。无马丁格尔,无网格,无高风险资金管理。
加载周期建议: M15(15分钟图)
交易逻辑:
免责声明: 外汇和黄金交易涉及重大风险。本EA仅供教育用途。过往业绩不代表未来表现。使用风险自负。
```mql4
//+------------------------------------------------------------------+
//| GoldStabilityEA.mq4 |
//| Copyright 2025, Gold EA Trader |
//| https://www.example.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Gold EA Trader"
#property link "https://www.example.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| 输入参数 (可调节) |
//+------------------------------------------------------------------+
input double LotSize = 0.01; // 固定手数(低风险)
input int FastMAPeriod = 10; // 快速均线周期(判断趋势方向)
input int SlowMAPeriod = 30; // 慢速均线周期(判断趋势方向)
input int ATRPeriod = 14; // ATR周期(用于止损止盈和波动率过滤)
input double ATRMultiplierSL = 1.5; // 止损倍数 = ATR * 此值
input double ATRMultiplierTP = 2.5; // 止盈倍数 = ATR * 此值
input double ATRThreshold = 1.2; // 最小ATR比率(当前ATR / 过去50根平均ATR)
input int MagicNumber = 202505; // EA唯一标识号
input int Slippage = 30; // 滑点(点数)
//+------------------------------------------------------------------+
//| 全局变量 |
//+------------------------------------------------------------------+
double atrValue, avgATR50;
int lastBarTime = 0;
bool hasPosition = false;
//+------------------------------------------------------------------+
//| 初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
if(FastMAPeriod >= SlowMAPeriod)
{
Print("错误: FastMAPeriod 必须小于 SlowMAPeriod");
return(INIT_PARAMETERS_INCORRECT);
}
if(LotSize <= 0 || LotSize > 1.0)
{
Print("错误: LotSize 必须在 0.01 到 1.0 之间");
return(INIT_PARAMETERS_INCORRECT);
}
lastBarTime = 0;
hasPosition = false;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 反初始化函数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| Tick主函数 |
//+------------------------------------------------------------------+
void OnTick()
{
// 检查新K线(M15)
if(Time[0] == lastBarTime) return;
lastBarTime = Time[0];
// 刷新报价
RefreshRates();
// 检查是否已有持仓
hasPosition = (OrderSelect(0, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber);
if(hasPosition) return;
// 计算指标
double fastMA = iMA(Symbol(), 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double slowMA = iMA(Symbol(), 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
atrValue = iATR(Symbol(), 0, ATRPeriod, 1);
// 计算过去50根K线的平均ATR(波动率基准)
double sumATR = 0;
for(int i=1; i<=50; i++)
sumATR += iATR(Symbol(), 0, ATRPeriod, i);
avgATR50 = sumATR / 50;
// 波动率过滤:避免极低波动的盘整
if(avgATR50 == 0 || atrValue < ATRThreshold * avgATR50) return;
// 趋势过滤与开仓信号
if(fastMA > slowMA) // 多头
{
double sl = Bid - atrValue * ATRMultiplierSL;
double tp = Bid + atrValue * ATRMultiplierTP;
if(sl > 0 && tp > Bid)
{
int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, sl, tp, "黄金EA", MagicNumber, 0, clrGreen);
if(ticket < 0) Print("买入订单失败: ", GetLastError());
}
}
else if(fastMA < slowMA) // 空头
{
double sl = Ask + atrValue * ATRMultiplierSL;
double tp = Ask - atrValue * ATRMultiplierTP;
if(tp > 0 && sl > Ask)
{
int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, sl, tp, "黄金EA", MagicNumber, 0, clrRed);
if(ticket < 0) Print("卖出订单失败: ", GetLastError());
}
}
}
//+------------------------------------------------------------------+
```
参考来源: 基于适合黄金品种的低风险趋势跟随原则。无马丁格尔,无网格。
```