hanjiang2356 发表于 2026-10-13 11:28:35

【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%。
[*]关注美盘:欧美时段波动加剧,可等待更明确信号再入场。
[*]数据风险:若晚间有突发消息,及时调整策略。

hanjiang2356 发表于 2026-10-13 11:32:27

//+------------------------------------------------------------------+
//| 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;
      }
   }
}
//+------------------------------------------------------------------+

djwrm 发表于 2026-10-13 12:08:09

你可以发话题的,发这个以为是ea呢
页: [1]
查看完整版本: 【10月13日交易ea】用ea执行你的计划