//+------------------------------------------------------------------+
//| 5 EMA Red Candle Break SELL EA - MT5 |
//| Timeframe: M1 |
//+------------------------------------------------------------------+
#property strict
#include <Trade/Trade.mqh>
CTrade trade;
input double LotSize = 0.01;
input int EMA_Period = 5;
input ulong MagicNumber = 5555;
int emaHandle;
datetime lastBarTime = 0;
// Signal candle details
double signalLow = 0;
double signalHigh = 0;
bool signalActive = false;
//+------------------------------------------------------------------+
//| Expert initialization |
//+------------------------------------------------------------------+
int OnInit()
{
emaHandle = iMA(_Symbol, PERIOD_M1, EMA_Period, 0, MODE_EMA, PRICE_CLOSE);
if(emaHandle == INVALID_HANDLE)
{
Print("EMA Handle Error");
return(INIT_FAILED);
}
trade.SetExpertMagicNumber(MagicNumber);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick |
//+------------------------------------------------------------------+
void OnTick()
{
MqlRates rates[];
ArraySetAsSeries(rates, true);
if(CopyRates(_Symbol, PERIOD_M1, 0, 3, rates) < 3)
return;
double ema[];
ArraySetAsSeries(ema, true);
if(CopyBuffer(emaHandle, 0, 0, 3, ema) < 3)
return;
// New candle detection
if(rates[0].time != lastBarTime)
{
lastBarTime = rates[0].time;
// Previous candle = rates[1]
bool isRed = rates[1].close < rates[1].open;
// पूरी candle 5 EMA के ऊपर हो
// खासकर LOW EMA को touch नहीं करना चाहिए
bool aboveEMA = rates[1].low > ema[1];
if(isRed && aboveEMA)
{
signalLow = rates[1].low;
signalHigh = rates[1].high;
signalActive = true;
Print("SELL Signal Candle Found. Low: ",
signalLow, " High: ", signalHigh);
}
else
{
signalActive = false;
}
}
// अगर पहले से कोई position है तो नई trade नहीं
if(PositionSelect(_Symbol))
return;
// दूसरी/current candle पहली red candle का LOW तोड़े
if(signalActive && SymbolInfoDouble(_Symbol, SYMBOL_BID) < signalLow)
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
// SL = पहली red candle का HIGH
double sl = signalHigh;
// सुरक्षा: SL सही distance पर होना चाहिए
if(sl > bid)
{
bool result = trade.Sell(
LotSize,
_Symbol,
0,
sl,
0,
"5 EMA Red Candle SELL"
);
if(result)
{
Print("SELL Trade Opened");
signalActive = false;
}
else
{
Print("Trade Failed: ", trade.ResultRetcodeDescription());
}
}
}
}
//+------------------------------------------------------------------+
//| Expert deinitialization |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
IndicatorRelease(emaHandle);
}
//+------------------------------------------------------------------+

Nouveau commentaire