rahul allgo

rahul allgo

//+------------------------------------------------------------------+

//| 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);

}

//+------------------------------------------------------------------+

Новый комментарий

Чтобы добавить комментарий, или