Code
//+------------------------------------------------------------------+
//| SCALPING SHORT V2.mq4 |
//| 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 TakeProfit = 28;
int StopLoss = 0;
int ecartask=0;
int ecartbid=0;
int MagicNumber =27112019;
extern int LotFactor=100;//100 <---> 300
int Slippage=0;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int total=OrdersTotal();
int i;
double OpenLongOrders=0,OpenShortOrders=0,PendLongs=0,PendShorts=0;
if(total==0 && OpenLongOrders==0 && OpenShortOrders==0 && PendLongs==0 && PendShorts==0)
{
openbuy();
sellstop();
}
for(i=0;i<total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
int type=OrderType();
if(type == OP_BUY ) {OpenLongOrders=OpenLongOrders+1;}
if(type == OP_SELL ) {OpenShortOrders=OpenShortOrders+1;}
if(type == OP_BUYSTOP ) {PendLongs=PendLongs+1;}
if(type == OP_SELLSTOP ) {PendShorts=PendShorts+1;}
if(total==1 && OpenLongOrders==0 && OpenShortOrders==0 && (PendLongs==1 || PendShorts==1))
{
deleteallpendingorders();
}
}
}
}
//+------------------------------------------------------------------+
//| openbuy |
//+------------------------------------------------------------------+
void openbuy()
{
int ticket= OrderSend(Symbol(),OP_BUY,(AccountBalance() * 0.01 /LotFactor)*1,Ask,5,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,MagicNumber,0,clrBlue);
if (GetLastError()!=0) Print(" BUY Order Error "+(string)ticket);
}
//+------------------------------------------------------------------+
//| sellstop |
//+------------------------------------------------------------------+
void sellstop()
{
int ticket =OrderSend(Symbol(),OP_SELLSTOP, (AccountBalance() * 0.01 /LotFactor)*2,Bid-ecartbid*Point,5,(Bid-ecartbid*Point)+StopLoss*Point,(Bid-ecartbid*Point)-TakeProfit*Point,NULL,MagicNumber,0,clrBlue);
if (GetLastError()!=0) Print(" SELL Order Error "+(string)ticket);
}
//+------------------------------------------------------------------+
//| buystop |
//+------------------------------------------------------------------+
void buystop()
{
int ticket= OrderSend(Symbol(),OP_BUYSTOP, (AccountBalance() * 0.01 /LotFactor)*3,Ask+ecartask*Point,5,(Ask+ecartask*Point)-StopLoss*Point,(Ask+ecartask*Point)+TakeProfit*Point,NULL,MagicNumber,0,clrBlue);
if (GetLastError()!=0) Print(" BUY Order Error "+(string)ticket);
}
//+------------------------------------------------------------------+
//| deleteallpendingorders |
//+------------------------------------------------------------------+
void deleteallpendingorders()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && ((OrderType()==OP_BUY) || (OrderType()==OP_SELL) ||(OrderType()==OP_BUYSTOP) || (OrderType()==OP_SELLSTOP) || (OrderType()==OP_BUYLIMIT) || (OrderType()==OP_SELLLIMIT)))
{
bool modify= OrderDelete(OrderTicket());
}
}
}