【10月13日交易ea】用ea执行你的计划
计划你的交易,交易你的计划用ea执行你的计划
把10月13日的交易计划,做成ea,60的多单已经止盈了
策略一:区间高抛低吸(主策略)做空思路:
[*]若金价反弹至 4200-4210 区域受阻,可轻仓做空。
[*]止损设在 4230 上方。
[*]目标看向 4165-4170,跌破后可进一步看向 4150 附近。
做多思路:
[*]若金价回踩至 4155-4160 区域企稳,可轻仓做多。
[*]止损设在 4140 下方。
[*]目标看向 4185-4190,有效突破后可进一步看向 4200-4210。
策略二:突破跟随(备选策略)
[*]向上突破:若金价放量有效突破 4217 并站稳,可回踩 4200 附近接多,目标 4230-4250。
[*]向下跌破:若金价有效跌破 4150 关键支撑,可反弹至 4160 附近做空,目标 4105-4120。
风险提示
[*]严格止损:黄金波动较大,务必设置止损,控制单笔风险。
[*]轻仓操作:建议仓位不超过总资金的 2%-5%。
[*]关注美盘:欧美时段波动加剧,可等待更明确信号再入场。
[*]数据风险:若晚间有突发消息,及时调整策略。
//+------------------------------------------------------------------+
//| XAUUSD_DayTrade_20261013.mq4 |
//| 只限 2026.10.13 使用,挂 M15 图表 |
//+------------------------------------------------------------------+
#property strict
input double Lots = 0.01; // 交易手数
input int Magic = 20261013; // 魔术号
input string TradeDate = "2026.10.13"; // 只允许交易的日期
input bool CheckDate = true; // 是否启用日期限制
input int Slippage = 30; // 滑点(点)
input int StartHour = 1; // 开始交易小时(服务器时间)
input int EndHour = 23; // 结束交易小时
input int EndMinute = 55; // 结束交易分钟
input int CloseHour = 23; // 强制平仓小时
input int CloseMinute = 58; // 强制平仓分钟
// 做空区间
input double ShortZoneLow= 4200.0; // 做空区间下沿
input double ShortZoneHigh = 4210.0; // 做空区间上沿
input double ShortSL = 4230.0; // 做空止损
input double ShortTP = 4165.0; // 做空止盈
// 做多区间
input double LongZoneLow = 4155.0; // 做多区间下沿
input double LongZoneHigh= 4160.0; // 做多区间上沿
input double LongSL = 4140.0; // 做多止损
input double LongTP = 4185.0; // 做多止盈
// 向上突破
input double BreakoutLevel = 4217.0; // 向上突破确认位
input double RetestLongLow = 4200.0; // 回踩做多下沿
input double RetestLongHigh= 4210.0; // 回踩做多上沿
input double BreakoutLongSL= 4190.0; // 突破多止损
input double BreakoutLongTP= 4230.0; // 突破多止盈
// 向下跌破
input double BreakdownLevel= 4150.0; // 向下跌破确认位
input double RetestShortLow= 4150.0; // 反弹做空下沿
input double RetestShortHigh=4160.0; // 反弹做空上沿
input double BreakdownShortSL=4170.0; // 跌破空止损
input double BreakdownShortTP=4105.0; // 跌破空止盈
// 放量参数
input int VolumeMA_Period = 20; // 平均成交量周期
input double VolumeFactor = 1.5; // 放量倍数
bool breakoutUpReady = false;
bool breakoutDownReady = false;
datetime lastBarTime = 0;
//+------------------------------------------------------------------+
bool IsTradeDate()
{
if(!CheckDate) return true;
string today = TimeToString(TimeCurrent(), TIME_DATE);
return (today == TradeDate);
}
//+------------------------------------------------------------------+
bool IsOpenTime()
{
int hour = TimeHour(TimeCurrent());
int minute = TimeMinute(TimeCurrent());
if(hour < StartHour) return false;
if(hour > EndHour) return false;
if(hour == EndHour && minute > EndMinute) return false;
return true;
}
//+------------------------------------------------------------------+
bool IsCloseTime()
{
int hour = TimeHour(TimeCurrent());
int minute = TimeMinute(TimeCurrent());
if(hour > CloseHour) return true;
if(hour == CloseHour && minute >= CloseMinute) return true;
return false;
}
//+------------------------------------------------------------------+
bool HasPosition()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
return true;
}
}
return false;
}
//+------------------------------------------------------------------+
void CloseAllOrders()
{
RefreshRates();
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrWhite);
else if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrWhite);
}
}
}
}
//+------------------------------------------------------------------+
void OpenBuy(double sl, double tp, string comment)
{
RefreshRates();
double price = Ask;
if(sl > 0 && price <= sl) return;
if(tp > 0 && price >= tp) return;
int ticket = OrderSend(Symbol(), OP_BUY, Lots, price, Slippage, sl, tp, comment, Magic, 0, clrBlue);
if(ticket < 0) Print("开多失败: ", GetLastError());
}
//+------------------------------------------------------------------+
void OpenSell(double sl, double tp, string comment)
{
RefreshRates();
double price = Bid;
if(sl > 0 && price >= sl) return;
if(tp > 0 && price <= tp) return;
int ticket = OrderSend(Symbol(), OP_SELL, Lots, price, Slippage, sl, tp, comment, Magic, 0, clrRed);
if(ticket < 0) Print("开空失败: ", GetLastError());
}
//+------------------------------------------------------------------+
double AvgVolume(int period)
{
double sum = 0;
int count = 0;
for(int i = 2; i <= period + 1; i++)
{
long vol = iVolume(Symbol(), PERIOD_M15, i);
if(vol > 0)
{
sum += (double)vol;
count++;
}
}
if(count == 0) return 0;
return sum / count;
}
//+------------------------------------------------------------------+
bool IsVolumeSpike(int shift)
{
double avg = AvgVolume(VolumeMA_Period);
if(avg <= 0) return false;
return ((double)iVolume(Symbol(), PERIOD_M15, shift) > avg * VolumeFactor);
}
//+------------------------------------------------------------------+
bool IsBullishBar(int shift)
{
return (iClose(Symbol(), PERIOD_M15, shift) > iOpen(Symbol(), PERIOD_M15, shift));
}
//+------------------------------------------------------------------+
bool IsBearishBar(int shift)
{
return (iClose(Symbol(), PERIOD_M15, shift) < iOpen(Symbol(), PERIOD_M15, shift));
}
//+------------------------------------------------------------------+
int OnInit()
{
if(CheckDate && !IsTradeDate())
{
Alert("EA只限 ", TradeDate, " 使用。当前服务器日期: ", TimeToString(TimeCurrent(), TIME_DATE));
Comment("EA只限 ", TradeDate, " 使用。当前日期不符,不会交易。");
}
else
{
Comment("EA已加载,仅限 ", TradeDate, " 使用。");
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
void OnTick()
{
// 日期限制
if(CheckDate && !IsTradeDate())
{
CloseAllOrders();
Comment("EA只限 ", TradeDate, " 使用,今日已停止。");
return;
}
// 强制平仓时间
if(IsCloseTime())
{
CloseAllOrders();
Comment("已到平仓时间,今日停止。");
return;
}
// 已有持仓则不再开新仓
if(HasPosition()) return;
// 不在开仓时间段
if(!IsOpenTime()) return;
// 每根新 M15 K线检查一次突破/跌破状态
datetime curBar = iTime(Symbol(), PERIOD_M15, 0);
if(curBar != lastBarTime)
{
lastBarTime = curBar;
bool volSpike = IsVolumeSpike(1);
// 向上有效突破:连续2根M15收盘 > 4217,且放量
if(iClose(Symbol(), PERIOD_M15, 1) > BreakoutLevel &&
iClose(Symbol(), PERIOD_M15, 2) > BreakoutLevel &&
volSpike)
{
breakoutUpReady = true;
breakoutDownReady = false;
Print("向上有效突破确认,等待回踩做多");
}
// 向下有效跌破:连续2根M15收盘 < 4150,且放量
if(iClose(Symbol(), PERIOD_M15, 1) < BreakdownLevel &&
iClose(Symbol(), PERIOD_M15, 2) < BreakdownLevel &&
volSpike)
{
breakoutDownReady = true;
breakoutUpReady = false;
Print("向下有效跌破确认,等待反弹做空");
}
}
// 1) 向上突破后回踩做多
if(breakoutUpReady && Bid >= RetestLongLow && Bid <= RetestLongHigh)
{
if(IsBullishBar(1))
{
OpenBuy(BreakoutLongSL, BreakoutLongTP, "突破回踩做多");
breakoutUpReady = false;
return;
}
}
// 2) 向下跌破后反弹做空
if(breakoutDownReady && Ask >= RetestShortLow && Ask <= RetestShortHigh)
{
if(IsBearishBar(1))
{
OpenSell(BreakdownShortSL, BreakdownShortTP, "跌破反弹做空");
breakoutDownReady = false;
return;
}
}
// 3) 区间做空:价格进入4200-4210,上一根M15阴线
if(!breakoutUpReady && Ask >= ShortZoneLow && Ask <= ShortZoneHigh)
{
if(IsBearishBar(1) && iHigh(Symbol(), PERIOD_M15, 1) >= ShortZoneLow)
{
OpenSell(ShortSL, ShortTP, "区间受阻做空");
return;
}
}
// 4) 区间做多:价格进入4155-4160,上一根M15阳线
if(!breakoutDownReady && Bid <= LongZoneHigh && Bid >= LongZoneLow)
{
if(IsBullishBar(1) && iLow(Symbol(), PERIOD_M15, 1) <= LongZoneHigh)
{
OpenBuy(LongSL, LongTP, "区间企稳做多");
return;
}
}
}
//+------------------------------------------------------------------+ 你可以发话题的,发这个以为是ea呢
页:
[1]