Code
//+------------------------------------------------------------------+
//| MODULOLG SH TP SL MULTIBUY MULTISELL .mq4 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| PARAMETRES EURUSD 1 MN |
//+------------------------------------------------------------------+
int MagicNumber=01012020; //magic
extern string Name_EA = "MODULOLG SH TP SL MULTIBUY MULTISELL";
extern double LotFactorLONG=300 ; //
double LotFactorSHORT = 130; //lotsize factor
extern double MultiplierLONG = 0; //
double MultiplierSHORT = 0.7; //from 0.04...to 0.09
extern double multiplier1=10;
extern double multiplier2=9;
extern double multiplier3=3;
extern double multiplier4=3;
extern double multiplier5=6;
extern double multiplier6=4;
int long_courtLONG=1; // 0 = Long & 1 = Court
int long_courtSHORT=1; // 0 = Long & 1 = Court
extern int gainLONG=300; // no comment ;)
extern int gainSHORT=300; // no comment ;)
input int ecartLONG=82;// Ecart : 150, 1000, ou 1500 selon les paires..
int ecartSHORT=18;// Ecart : 150, 1000, ou 1500 selon les paires
extern bool trail=true;
extern double TrailingStop=48;
double pips = 0.00001; //leave as default for 5 digit brokers
int stopOK = 0; // ne pas modifier
int sendOK = 0; // ne pas modifier
int hour=23;
int c=0;
double LotSizeLONG; //lotsize
double SizeLotLONG;
double LotSizeSHORT; //lotsize
double SizeLotSHORT;
int stop =75;
extern int Slippage =0;
//----
double TP=0,SL=0,TR;
//+------------------------------------------------------------------+
//| Hidden StopLoss Calculations |
//+------------------------------------------------------------------+
void StopLoss()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
SL=stop*MyPoint;
double OrdP=0,OrdTP=0,OrdSL=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol())
{
OrdP=OrderProfit()-MathAbs(OrderSwap())-MathAbs(OrderCommission());
OrdSL=(-1)*SL*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE)/Point;
OrdTP=TP*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE)/Point;
if(OrdP>OrdTP || OrdP<OrdSL)
{
if(OrderType()==OP_BUY)
bool OrdClP=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrGreen);
if(OrderType()==OP_SELL)
bool OrdClL=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrYellow);
}
}
}
}
//+------------------------------------------------------------------+
//| Trailing Stoploss après Breakeven |
//+------------------------------------------------------------------+
void trail()
{
for (int i = OrdersTotal()-1; i >= 0; i --)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop *10* MarketInfo(OrderSymbol(),MODE_POINT))
{
if(((OrderStopLoss() < Bid - TrailingStop *10* MarketInfo(OrderSymbol(), MODE_POINT))&& ((Bid-OrderOpenPrice())>(Point*TrailingStop)))||
(OrderStopLoss()==0))
{
bool modify1=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT),OrderTakeProfit(),Red);
}
}
} else if(OrderType()==OP_SELL) {
if(OrderOpenPrice()-Ask>TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT))
{
if(((OrderStopLoss()>Ask+TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT))&& ((OrderOpenPrice()-Ask)>(Point*TrailingStop)))||
(OrderStopLoss()==0))
{
bool modify2=OrderModify(OrderTicket(),OrderOpenPrice(),
Ask+TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT),OrderTakeProfit(),Red);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(trail) trail();
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
if(IsNewCandle())
{
Lot_Volume(); //calc lotsize
return(0);
}
//MODIF***********
if(c==0){if(OrderSend(Symbol(), OP_BUY, SizeLotLONG, Ask, 0, Ask - (stop * Point),0, "MODULOLG SH TP SL MULTIBUY MULTISELL"))c=1;}
//
if(c==0){if(OrderSend(Symbol(), OP_BUY, SizeLotSHORT, Ask, 0, Ask - (stop * Point),0, "MODULOLG SH TP SL MULTIBUY MULTISELL"))c=1;}
//
//MODIF***********
Comment(AccountEquity() - AccountBalance());
int type = OrderType();
int type2 = OrderType();
if (Hour()==1 && Minute()==1 && Seconds()==1 && sendOK==0)
{
sendOK=1;stopOK=0;
//+------------------------------------------------------------------+
if(long_courtLONG==1)
{
{
{
{
{
{
{
{
{
{
{
{
int ticket1= OrderSend(Symbol(), OP_SELLSTOP, LotSizeLONG, Bid-ecartLONG*multiplier1*pips, 0, 0, 0, 0);
int ticket2= OrderSend(Symbol(), OP_SELLSTOP, LotSizeLONG, Bid-ecartLONG*multiplier2*pips, 0, 0, 0, 0);
int ticket3= OrderSend(Symbol(), OP_SELLSTOP, LotSizeLONG, Bid-ecartLONG*multiplier3*pips, 0, 0, 0, 0);
int ticket4= OrderSend(Symbol(), OP_SELLSTOP, LotSizeLONG, Bid-ecartLONG*multiplier4*pips, 0, 0, 0, 0);
int ticket5= OrderSend(Symbol(), OP_SELLSTOP, LotSizeLONG, Bid-ecartLONG*multiplier5*pips, 0, 0, 0, 0);
int ticket6= OrderSend(Symbol(), OP_SELLSTOP, LotSizeLONG, Bid-ecartLONG*multiplier6*pips, 0, 0, 0, 0);
if(long_courtSHORT==1)
{
{
{
{
{
{
{
{
{
{
{
{
int ticket7= OrderSend(Symbol(), OP_SELLSTOP, LotSizeSHORT, Bid-ecartSHORT*multiplier1*pips, 0, 0, 0,0);
int ticket8= OrderSend(Symbol(), OP_SELLSTOP, LotSizeSHORT, Bid-ecartSHORT*multiplier2*pips, 0, 0, 0,0);
int ticket9= OrderSend(Symbol(), OP_SELLSTOP, LotSizeSHORT, Bid-ecartSHORT*multiplier3*pips, 0, 0, 0,0);
int ticket10= OrderSend(Symbol(), OP_SELLSTOP, LotSizeSHORT, Bid-ecartSHORT*multiplier4*pips, 0, 0, 0,0);
int ticket11= OrderSend(Symbol(), OP_SELLSTOP, LotSizeSHORT, Bid-ecartSHORT*multiplier5*pips, 0, 0, 0,0);
int ticket12= OrderSend(Symbol(), OP_SELLSTOP, LotSizeSHORT, Bid-ecartSHORT*multiplier6*pips, 0, 0, 0,0);
if(ticket1<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket2<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket3<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
if(ticket4<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket5<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket6<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
if(ticket7<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket8<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket9<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
if(ticket10<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket11<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket12<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
//+------------------------------------------------------------------+
if(long_courtLONG==0)
{
{
{
{
{
{
{
{
{
{
{
{
int ticket13= OrderSend(Symbol(), OP_BUYSTOP, LotSizeLONG, Ask+ecartLONG*1*pips, 0, 0, 0,0);
int ticket14= OrderSend(Symbol(), OP_BUYSTOP, LotSizeLONG, Ask+ecartLONG*2*pips, 0, 0, 0,0);
int ticket15= OrderSend(Symbol(), OP_BUYSTOP, LotSizeLONG, Ask+ecartLONG*3*pips, 0, 0, 0,0);
int ticket16= OrderSend(Symbol(), OP_BUYSTOP, LotSizeLONG, Ask+ecartLONG*1*pips, 0, 0, 0,0);
int ticket17= OrderSend(Symbol(), OP_BUYSTOP, LotSizeLONG, Ask+ecartLONG*2*pips, 0, 0, 0,0);
int ticket18= OrderSend(Symbol(), OP_BUYSTOP, LotSizeLONG, Ask+ecartLONG*3*pips, 0, 0, 0,0);
if(long_courtSHORT==0)
// if (!IsTradeContextBusy() && IsTradeAllowed())
{
{
{
{
{
{
{
{
{
{
{
{
int ticket19= OrderSend(Symbol(), OP_BUYSTOP, LotSizeSHORT, Ask+ecartSHORT*1*pips, 0, 0, 0,0);
int ticket20= OrderSend(Symbol(), OP_BUYSTOP, LotSizeSHORT, Ask+ecartSHORT*2*pips, 0, 0, 0,0);
int ticket21= OrderSend(Symbol(), OP_BUYSTOP, LotSizeSHORT, Ask+ecartSHORT*3*pips, 0, 0, 0,0);
int ticket22= OrderSend(Symbol(), OP_BUYSTOP, LotSizeSHORT, Ask+ecartSHORT*1*pips, 0, 0, 0,0);
int ticket23= OrderSend(Symbol(), OP_BUYSTOP, LotSizeSHORT, Ask+ecartSHORT*2*pips, 0, 0, 0,0);
int ticket24= OrderSend(Symbol(), OP_BUYSTOP, LotSizeSHORT, Ask+ecartSHORT*3*pips, 0, 0, 0,0);
if(ticket13<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket14<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket15<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
if(ticket16<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket17<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket18<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
if(ticket19<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket20<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket21<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
if(ticket22<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket23<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
if(ticket24<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
}
}
}
//+------------------------------------------------------------------+
}
if (Hour()>=hour && stopOK==0)
{
stopOK=1;sendOK=0;
int u = OrdersTotal() - 1;
while (u >= 0)
{
if(OrderSelect(u, SELECT_BY_POS))
if (type == OP_SELLSTOP || type == OP_BUYSTOP)
{
bool modif3= OrderDelete(OrderTicket());
}
u -= 1;
}
}
if (AccountEquity()>= AccountBalance()+ gainLONG)
if (AccountEquity()>= AccountBalance()+ gainSHORT)
{
int w = OrdersTotal() - 1;
while (w >= 0)
{
if(OrderSelect(w, SELECT_BY_POS))
{
bool modif1= OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID),2);
bool modif2= OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK),2);
}
w -= 1;
}
//MODIF***********
// if (!IsTradeContextBusy() && IsTradeAllowed())
int ticket25=OrderSend(Symbol(), OP_BUY, SizeLotLONG, Ask, 0, Ask - (stop * Point),0, "MODULOLG SH TP SL MULTIBUY MULTISELL");
int ticket26=OrderSend(Symbol(), OP_BUY, SizeLotSHORT, Ask, 0, Ask - (stop * Point),0, "MODULOLG SH TP SL MULTIBUY MULTISELL");
//--- place market order to buy 1 lot
if(ticket25<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
if(ticket26<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
//MODIF***********
}
return(0);
}
//+------------------------------------------------------------------+
//insuring its a new candle function
//+------------------------------------------------------------------+
bool IsNewCandle()
{
static int BarsOnChart=0;
if (Bars == BarsOnChart)
return (false);
BarsOnChart = Bars;
return(true);
}
//+------------------------------------------------------------------+
//Calculates Lot Size based on balance and factor
//+------------------------------------------------------------------+
double Lot_Volume()
{
LotSizeLONG=AccountBalance() * 0.01 /LotFactorLONG ;
SizeLotLONG=LotSizeLONG*MultiplierLONG;
return(LotSizeLONG);
return(SizeLotLONG);
LotSizeSHORT=AccountBalance() * 0.01 /LotFactorSHORT ;
SizeLotSHORT=LotSizeSHORT*MultiplierSHORT;
return(LotSizeSHORT);
return(SizeLotSHORT);
}
//+------------------------------------------------------------------++