Spezifikation
//+------------------------------------------------------------------+
//| 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);
}
}
Bewerbungen
1
Bewertung
Projekte
30
57%
Schlichtung
0
Frist nicht eingehalten
1
3%
Arbeitet
2
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
3
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
4
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
5
Bewertung
Projekte
3
33%
Schlichtung
2
0%
/
100%
Frist nicht eingehalten
0
Frei
6
Bewertung
Projekte
15
13%
Schlichtung
6
0%
/
67%
Frist nicht eingehalten
2
13%
Frei
7
Bewertung
Projekte
8
0%
Schlichtung
8
13%
/
88%
Frist nicht eingehalten
0
Frei
8
Bewertung
Projekte
19
42%
Schlichtung
3
0%
/
67%
Frist nicht eingehalten
3
16%
Frei
9
Bewertung
Projekte
0
0%
Schlichtung
1
0%
/
100%
Frist nicht eingehalten
0
Frei
10
Bewertung
Projekte
5
60%
Schlichtung
2
0%
/
0%
Frist nicht eingehalten
2
40%
Arbeitet
Veröffentlicht: 1 Beispiel
Ähnliche Aufträge
Moving forward
100+ USD
Position Size = (Account Risk %) / (Stop Loss %) Example: $1000 account, 1% risk = $10 If SL = 0.75%, position = $10 / 0.0075 = $1333 moving average
SpikeEnginePro EA
30+ USD
// Add this to your EA after ExportState() function void SendToBase44(const string state, const string dir, double entry, double sl, double tp) { string url = " https://preview-sandbox--ee0a32a725b788974de435e8cef40b7a.base44.app/api/functions/receiveEAState "; string headers = "Content-Type: application/json\r\n"; string json = "{" "\"symbol\":\""+_Symbol+"\","
1.Sinyal Perdagangan : Sinyal beli: garis MACD utama memotong garis sinyal ke atas (macd_current>signal_current && macd_previous<signal_previous). Sinyal jual: garis MACD utama memotong garis sinyal ke bawah (macd_current<signal_current && macd_previous>signal_previous). Gambar di bawah menunjukkan kasus beli dan jual. 2. Posisi ditutup pada sinyal yang berlawanan: Posisi beli ditutup pada sinyal jual, dan posisi
can anyone help me with building a complete automated pine code strategy and indicator that work for both FXs & CFDs and have a high winning rate proved through back testing. I have a very complex current code that developed mostly using AI but lots of gaps are there although it translate exactly what I have in my mind. So, you are free to decide whether wo build a complete new code or fix my current working code ( i
Projektdetails
Budget
300+ USD
Ausführungsfristen
von 1 bis 10 Tag(e)
Kunde
Veröffentlichte Aufträge1
Anzahl der Schlichtungen0