The size of basket (default: ALL trades) can be adjusted:
a) MagicNumber (default: none) - magic number
b) Symbol (default: none) - symbol
c) Start (default: none) - trade opened after start
d) Finish (default: none) - trade opened before finish
e) CloseNetProfit (default: true) - close basket only if net profit > 0
Code: Select all
#property show_confirm
#property show_inputs
extern bool EaCloseNetProfit = true;
extern int EaMagicNumber = 0;
extern string EaSymbol = "";
extern string EaStart = "yyyy.mm.dd hh:mm";
extern string EaFinish = "yyyy.mm.dd hh:mm";
//:::::::::::::::::::::::::::::::::::::::::::::
string IndName= "CloseNetBasket";
string IndVer= "0.9.0";
//:::::::::::::::::::::::::::::::::::::::::::::
int init()
{
return(0);
}
//:::::::::::::::::::::::::::::::::::::::::::::
int start()
{
int i;
bool closeOk=true;
if(EaCloseNetProfit==true)
if(IsNetDrawdown()==true)
closeOk=false;
if( IsRunningTrades()==true && closeOk==true )
{
double price;
int total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
continue;
if(OrderType()<=OP_SELL)
if( IsMagicNumber(OrderMagicNumber(),EaMagicNumber) )
if( IsSymbol(OrderSymbol(),EaSymbol) )
if( IsOpenTime(OrderOpenTime(),EaStart,EaFinish) )
{
if(OrderType()==OP_BUY) price=Bid;
else price=Ask;
OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
}
}
}
return(0);
}
bool IsRunningTrades()
{
int trades = 0;
int total = OrdersTotal();
for(int i=0;i<total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
continue;
if(OrderType()<=OP_SELL)
if( IsMagicNumber(OrderMagicNumber(),EaMagicNumber) )
if( IsSymbol(OrderSymbol(),EaSymbol) )
if( IsOpenTime(OrderOpenTime(),EaStart,EaFinish) )
trades++;
}
if( trades>0 ) return(true);
else return(false);
}
bool IsNetDrawdown()
{
double cash = 0;
int total = OrdersTotal();
for(int i=0;i<total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
continue;
if(OrderType()<=OP_SELL)
if( IsMagicNumber(OrderMagicNumber(),EaMagicNumber) )
if( IsSymbol(OrderSymbol(),EaSymbol) )
if( IsOpenTime(OrderOpenTime(),EaStart,EaFinish) )
cash += (OrderProfit()+OrderSwap()+OrderCommission());
}
if( cash<=0 ) return(true);
else return(false);
}
//:::::::::::::::::::::::::::::::::::::::::::::
//:::::::::::::::::::::::::::::::::::::::::::::
int deinit()
{
return(0);
}
//:::::::::::::::::::::::::::::::::::::::::::::
bool IsMagicNumber(int mgc, int ext)
{
if( ext<=0 ) return(true);
else if( ext==mgc ) return(true);
else return(false);
}
bool IsSymbol(string sym, string ext)
{
if( StringLen(ext)==0 ) return(true);
else if( ext==sym ) return(true);
else return(false);
}
bool IsOpenTime(datetime opTime, string ext0, string ext1)
{
bool ret0=true;
bool ret1=true;
if( StringLen(ext0)==0 ) ret0=true;
else if( ext0== "yyyy.mm.dd hh:mm" ) ret0=true;
else if( StrToTime(ext0)> opTime ) ret0=false;
else ret0=true;
if( StringLen(ext1)==0 ) ret1=true;
else if( ext1== "yyyy.mm.dd hh:mm" ) ret1=true;
else if( StrToTime(ext1)< opTime ) ret1=false;
else ret1=true;
return( ret0 && ret1 );
}Regards
6y588