Code
//+------------------------------------------------------------------+
//| Candles Harami Engulfing Star.ex4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
extern int MagicNumber=26022020;
extern double LotFactor=210;
extern double StopLoss=117;
extern double TakeProfit=0;
extern int TrailingStop=43;
extern int Slippage=3;
extern int min_gap_size=7;//Min gap size in points
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double Lots = (AccountEquity() * 0.01 /LotFactor);
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if (Open[0]>Close[0]&&Open[0]>Open[1]&&Close[0]>Open[1]&&Close[0]>Close[1]-min_gap_size*Point&&Open[2]<Open[3]&&Open[2]<Close[3]&&Close[2]<Open[3]&&Close[2]<Close[3]&&Open[3]<Close[3]&&Close[1]>Open[1])//Star
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
//OrderSelect(result,SELECT_BY_TICKET);
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif1=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[0]>Close[0]&&Open[0]>Open[1]&&Close[0]>Open[1]&&Close[0]>Close[1]-min_gap_size*Point&&Open[2]<Open[3]&&Open[2]<Close[3]&&Close[2]<Open[3]&&Close[2]<Close[3]&&Open[3]<Close[3]&&Close[1]<Open[1])//Star
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif2=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Close[1]>Open[1]&&Open[0]>Close[0]&& Close[0]<Close[1]&&Close[0]<Open[1]&&Open[0]>Open[1]&&Open[0]>Close[1])//Harami
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif3=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[1]<Close[1]&&Open[0]<Close[1]&& Open[0]>Open[1]&&Close[0]<Close[1]&&Close[0]>Open[1]&&Open[0]<Close[1]&&Open[0]>Open[1]&&Close[0]<Close[1]&&Close[0]>Open[1])//engulfing
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif4=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[0]>Close[0]&&Close[0]>Open[1]&&Open[1]==Low[1]&&Close[1]>Open[1]&&Open[2]<Close[2]&&Close[1]<Close[2]) // Holding Belt
// Here is your open Buy rule bearish gap
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif5=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[0]<Close[0]&&Open[0]<Open[1]&&Close[0]<Open[1]&&Close[0]<Close[1]+min_gap_size*Point&&Open[2]>Open[3]&&Open[2]>Close[3]&&Close[2]>Open[3]&&Close[2]>Close[3]&&Open[3]>Close[3]&&Close[1]<Open[1])//Star
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif6=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[0]<Close[0]&&Open[0]<Open[1]&&Close[0]<Open[1]&&Close[0]<Close[1]+min_gap_size*Point&&Open[2]>Open[3]&&Open[2]>Close[3]&&Close[2]>Open[3]&&Close[2]>Close[3]&&Open[3]>Close[3]&&Close[1]>Open[1])//Star
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif7=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Close[1]<Open[1]&&Open[0]<Close[0]&& Close[0]>Close[1]&&Close[0]>Open[1]&&Open[0]<Open[1]&&Open[0]<Close[1])// Harami
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif8=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[1]>Close[1]&&Open[0]>Close[1]&& Open[0]<Open[1]&&Close[0]>Close[1]&&Close[0]<Open[1]&&Open[0]>Close[1]&&Open[0]<Open[1]&&Close[0]>Close[1]&&Close[0]<Open[1])//Engulfing
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif9=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if (Open[0]<Close[0]&&Close[0]<Open[1]&&Open[1]==High[1]&&Close[1]<Open[1]&&Open[2]>Close[2]&&Close[1]>Close[2])// Holding Belt
// Here is your open Sell rule bullish gap
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
if(OrderSelect(result, SELECT_BY_TICKET))
bool modif10=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
bool modif11= OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
bool modif12= OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool modif13= OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}