Tarea técnica

//+------------------------------------------------------------------+
//| XAUUSD Ultimate Institutional EA                                  |
//| Features:                                                         |
//| - True swing-based market structure                                |
//| - BOS sniper entries on M5                                         |
//| - Liquidity sweep filter                                           |
//| - Partial TP + breakeven                                           |
//| - Visual BOS, swings, liquidity                                   |
//| - ATR-based dynamic SL                                             |
//| - Trailing stop                                                    |
//| - Session filter (London + NY)                                     |
//| - Risk management (1% per trade)                                   |
//+------------------------------------------------------------------+
#property strict
#include <Trade/Trade.mqh>
CTrade trade;

//================ INPUTS =================
input double RiskPercent = 1.0;           // % risk per trade
input double RR = 2.0;                    // Target RR
input double PartialClosePercent = 50.0;  // % to close at first TP
input int    SL_Buffer_Points = 400;      // SL buffer (XAU volatility)
input int    MaxSL_Points = 3000;         // Skip trades if SL too wide
input ENUM_TIMEFRAMES HTF = PERIOD_H1;    // Higher timeframe
input ENUM_TIMEFRAMES LTF = PERIOD_M5;    // Lower timeframe
input int LondonStart = 10;               // London session start
input int LondonEnd   = 13;               // London session end
input int NYStart     = 15;               // NY session start
input int NYEnd       = 18;               // NY session end
input bool UseNewsFilter = true;          // Toggle news filter
input int NewsPauseBefore = 30;           // Minutes before news
input int NewsPauseAfter  = 30;           // Minutes after news
input int FractalDepth = 2;               // For true swing detection
input int ATR_Period = 14;                // ATR period
input double ATR_Multiplier = 1.5;        // ATR multiplier for SL
input double TrailingStart = 1.0;         // RR ratio to start trailing
input double TrailingStep = 50;           // Points per trailing move

//================ GLOBALS =================
datetime LastTradeDay;
bool PartialTaken = false;
bool BuyLiquidityTaken = false;
bool SellLiquidityTaken = false;
double LastSwingHigh = 0;
double PrevSwingHigh = 0;
double LastSwingLow  = 0;
double PrevSwingLow  = 0;

//================ SESSION CHECK =================
bool InSession()
{
   int h = TimeHour(TimeCurrent());
   return (h>=LondonStart && h<=LondonEnd) || (h>=NYStart && h<=NYEnd);
}

//================ TRUE SWING DETECTION =================
void DetectSwings()
{
   for (int i = 5; i < 100; i++)
   {
      double fh = iFractals(_Symbol, HTF, MODE_UPPER, i);
      double fl = iFractals(_Symbol, HTF, MODE_LOWER, i);

      if (fh != 0)
      {
         PrevSwingHigh = LastSwingHigh;
         LastSwingHigh = fh;
      }
      if (fl != 0)
      {
         PrevSwingLow = LastSwingLow;
         LastSwingLow = fl;
      }
      if (PrevSwingHigh > 0 && PrevSwingLow > 0) break;
   }
}

//================ MARKET STRUCTURE =================
bool BullishStructure()
{
   DetectSwings();
   return (LastSwingHigh > PrevSwingHigh &&
           LastSwingLow  > PrevSwingLow);
}

bool BearishStructure()
{
   DetectSwings();
   return (LastSwingHigh < PrevSwingHigh &&
           LastSwingLow  < PrevSwingLow);
}

//================ LOT CALCULATION =================
double LotByRisk(double sl_points)
{
   double bal = AccountInfoDouble(ACCOUNT_BALANCE);
   double riskMoney = bal * RiskPercent / 100.0;
   double tickVal = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
   double tickSz  = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   double lot = riskMoney / (sl_points * tickVal / tickSz);
   return NormalizeDouble(lot, 2);
}

//================ LIQUIDITY SWEEP =================
void DetectLiquiditySweep(double ltf_low, double ltf_high, double close)
{
   BuyLiquidityTaken  = (ltf_low < LastSwingLow && close > LastSwingLow);
   SellLiquidityTaken = (ltf_high > LastSwingHigh && close < LastSwingHigh);

   // Visualize sweeps
   if(BuyLiquidityTaken)
      DrawLabel("LIQ_SWEEP_BUY", TimeCurrent(), LastSwingLow, "Sell-side Liquidity Taken", clrDodgerBlue);
   if(SellLiquidityTaken)
      DrawLabel("LIQ_SWEEP_SELL", TimeCurrent(), LastSwingHigh, "Buy-side Liquidity Taken", clrOrangeRed);
}

//================ DRAWING FUNCTIONS =================
void DrawLine(string name, datetime t1, double p1, datetime t2, double p2, color clr)
{
   ObjectDelete(0, name);
   ObjectCreate(0, name, OBJ_TREND, 0, t1, p1, t2, p2);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
}
void DrawLabel(string name, datetime t, double p, string text, color clr)
{
   ObjectDelete(0, name);
   ObjectCreate(0, name, OBJ_TEXT, 0, t, p);
   ObjectSetText(name, text, 10, "Arial", clr);
}

//================ ATR =================
double ATR(int period, ENUM_TIMEFRAMES tf)
{
   return iATR(_Symbol, tf, period, 0);
}

//================ PARTIAL TP + BREAKEVEN =================
void ManagePosition()
{
   if (!PositionSelect(_Symbol)) return;

   double entry = PositionGetDouble(POSITION_PRICE_OPEN);
   double sl    = PositionGetDouble(POSITION_SL);
   double tp    = PositionGetDouble(POSITION_TP);
   double vol   = PositionGetDouble(POSITION_VOLUME);
   int type     = PositionGetInteger(POSITION_TYPE);
   double price = (type==POSITION_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_BID)
                                            : SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double risk = MathAbs(entry - sl);
   double oneR = (type==POSITION_TYPE_BUY) ? entry + risk : entry - risk;

   // Partial TP
   if (!PartialTaken &&
       ((type==POSITION_TYPE_BUY && price >= oneR) ||
        (type==POSITION_TYPE_SELL && price <= oneR)))
   {
      trade.PositionClosePartial(_Symbol, vol * PartialClosePercent / 100.0);
      trade.PositionModify(_Symbol, entry, tp); // move SL to breakeven
      PartialTaken = true;
   }

   // Trailing Stop
   double rrAchieved = (type==POSITION_TYPE_BUY) ? (price - entry)/risk : (entry - price)/risk;
   if(rrAchieved >= TrailingStart)
   {
      double new_sl;
      if(type==POSITION_TYPE_BUY)
         new_sl = price - TrailingStep*_Point;
      else
         new_sl = price + TrailingStep*_Point;

      if((type==POSITION_TYPE_BUY && new_sl > sl) ||
         (type==POSITION_TYPE_SELL && new_sl < sl))
      {
         trade.PositionModify(_Symbol, new_sl, tp);
      }
   }
}

//================ NEWS FILTER PLACEHOLDER =================
bool NewsSafe()
{
   if(!UseNewsFilter) return true;
   // Placeholder: safe, can integrate news API
   return true;
}

//================ MAIN LOGIC =================
void OnTick()
{
   if(_Symbol != "XAUUSD") return;
   if(!InSession()) return;
   if(!NewsSafe()) return;

   ManagePosition();
   if(PositionsTotal() > 0) return;

   double close = iClose(_Symbol, LTF, 1);
   double prevHigh = iHigh(_Symbol, LTF, 2);
   double prevLow  = iLow(_Symbol, LTF, 2);

   DetectLiquiditySweep(prevLow, prevHigh, close);

   double atr = ATR(ATR_Period, LTF);

   //================ BUY =================
   if(BullishStructure() && BuyLiquidityTaken && close > prevHigh)
   {
      double entry = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      double sl = entry - atr * ATR_Multiplier;
      double sl_points = (entry - sl)/_Point;
      if(sl_points > MaxSL_Points) return;
      double tp = entry + (entry - sl) * RR;
      double lot = LotByRisk(sl_points);

      trade.Buy(lot, _Symbol, entry, sl, tp);
      PartialTaken = false;

      DrawLine("BOS_BUY", iTime(_Symbol,LTF,2), prevHigh, iTime(_Symbol,LTF,1), close, clrLime);
      DrawLabel("BOS_BUY_LABEL", iTime(_Symbol,LTF,1), close, "BOS BUY", clrLime);
   }

   //================ SELL =================
   if(BearishStructure() && SellLiquidityTaken && close < prevLow)
   {
      double entry = SymbolInfoDouble(_Symbol, SYMBOL_BID);
      double sl = entry + atr * ATR_Multiplier;
      double sl_points = (sl - entry)/_Point;
      if(sl_points > MaxSL_Points) return;
      double tp = entry - (sl - entry) * RR;
      double lot = LotByRisk(sl_points);

      trade.Sell(lot, _Symbol, entry, sl, tp);
      PartialTaken = false;

      DrawLine("BOS_SELL", iTime(_Symbol,LTF,2), prevLow, iTime(_Symbol,LTF,1), close, clrRed);
      DrawLabel("BOS_SELL_LABEL", iTime(_Symbol,LTF,1), close, "BOS SELL", clrRed);
   }
}

Han respondido

1
Desarrollador 1
Evaluación
(22)
Proyectos
33
52%
Arbitraje
1
100% / 0%
Caducado
1
3%
Libre
2
Desarrollador 2
Evaluación
Proyectos
0
0%
Arbitraje
0
Caducado
0
Libre
3
Desarrollador 3
Evaluación
(2)
Proyectos
2
0%
Arbitraje
0
Caducado
0
Trabaja
4
Desarrollador 4
Evaluación
Proyectos
0
0%
Arbitraje
0
Caducado
0
Libre
5
Desarrollador 5
Evaluación
(4)
Proyectos
3
33%
Arbitraje
2
0% / 100%
Caducado
0
Libre
6
Desarrollador 6
Evaluación
(10)
Proyectos
15
13%
Arbitraje
6
0% / 67%
Caducado
2
13%
Libre
7
Desarrollador 7
Evaluación
(6)
Proyectos
8
0%
Arbitraje
8
13% / 88%
Caducado
0
Libre
8
Desarrollador 8
Evaluación
(12)
Proyectos
19
42%
Arbitraje
3
0% / 67%
Caducado
3
16%
Trabaja
9
Desarrollador 9
Evaluación
Proyectos
1
0%
Arbitraje
1
0% / 100%
Caducado
1
100%
Trabaja
10
Desarrollador 10
Evaluación
(5)
Proyectos
5
60%
Arbitraje
1
0% / 0%
Caducado
2
40%
Libre
Ha publicado: 1 ejemplo
11
Desarrollador 11
Evaluación
(64)
Proyectos
144
46%
Arbitraje
20
40% / 15%
Caducado
32
22%
Trabaja
12
Desarrollador 12
Evaluación
Proyectos
0
0%
Arbitraje
0
Caducado
0
Trabaja
13
Desarrollador 13
Evaluación
Proyectos
0
0%
Arbitraje
0
Caducado
0
Libre
Solicitudes similares
Hi, are you able to create a script/indicator on tradingview that displays a chart screener and it allows me to input multiple tickers on the rows. then the colums with be like "premarket high, premarket low, previous day high, previous day low" . When each or both of the levels break, there will pop up a circle on the chart screener, signaling to me what names are above both PM high and previous day high or maybe
Looking for an experienced MQL5 developer to design and develop a custom Expert Advisor (EA) for MetaTrader 5. The purpose of this EA is not just automated trading, but also to help me better structure, test, and refine my personal trading strategy
Phahla fx boto 30+ USD
99.99% signal accuracy 10-15 trades distribution all currency trade and meta AI assistance on loss[advice] stop and start robot cyber security firewall protection activation code: 20060605TLP20 Please create a trading bot with any logo with the name elevation
Ai robot 30 - 50 USD
1️⃣ System Architecture An AI robot typically consists of the following subsystems: 🔹 1. Perception Layer Collects environmental data using: RGB / Depth cameras LiDAR Ultrasonic sensors IMUs (Inertial Measurement Units) Microphones Data is processed using: Computer Vision (e.g., object detection, SLAM) Signal processing Sensor fusion algorithms 🔹 2. Cognition / Intelligence Layer Implements AI models such as
Data Integrity 500 - 1000 USD
The trading bot is an automated software system designed to monitor financial markets, execute trades, and manage risk based on predefined strategies. The bot aims to maximize profits while minimizing human intervention and emotional decision-making. Scope: Supports automated trading on selected exchanges (e.g., Binance, Bitget, Coinbase). Executes trades based on technical indicators, signals, or AI models. Provides
Saya ingin dibuatkan Expert Advisor untuk MetaTrader 5 berbasis strategi EMA 50/200 + Breakout 20 candle dengan sistem risk percentage otomatis. EA harus memiliki fitur ATR stop loss, trailing stop, break even, max spread filter, dan daily loss limit. Dilarang menggunakan martingale, grid, atau averaging. Target RR minimal 1:2 dan drawdown di bawah 20%

Información sobre el proyecto

Presupuesto
300+ USD
Plazo límite de ejecución
de 1 a 10 día(s)