stevehopwoodforex.com
https://www.stevehopwoodforex.com/phpBB3/
Print view

Script to close basket of adjusted size and only if profit
https://www.stevehopwoodforex.com/phpBB3/viewtopic.php?t=2162
Page 1 of 1
Author:  6y588 [ Mon May 20, 2013 8:17 am ]
Post subject:  Script to close basket of adjusted size and only if profit

This is a script to close a basket of trades.

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 );
}
Please understand and use the script at your own risk, and test it on a demo first before applying it live.

Regards
6y588
Author:  6y588 [ Fri Jun 07, 2013 1:55 pm ]
Post subject:  Re: Script to close basket of adjusted size and only if prof

This is a script deletes a basket of pending orders.

Delete ALL pending orders unless the parameters below are specified to adjust the basket size:
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

Code: Select all

//:::::::::::::::::::::::::::::::::::::::::::::
#property show_confirm 
#property show_inputs 
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= "DeletePendBasket";
string IndVer= "0.9.0";
//:::::::::::::::::::::::::::::::::::::::::::::
int init()
{
  return(0);
}
//:::::::::::::::::::::::::::::::::::::::::::::
int start()
{
  int i;

  bool closeOk=true;
  if( IsPendingTrades()==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_BUYLIMIT && OrderType()<=OP_SELLSTOP)
        if( IsMagicNumber(OrderMagicNumber(),EaMagicNumber) )
          if( IsSymbol(OrderSymbol(),EaSymbol) )
            if( IsOpenTime(OrderOpenTime(),EaStart,EaFinish) )
            {
              OrderDelete(OrderTicket());
            }
    }
  }

  return(0);
}
bool IsPendingTrades()
{
  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_BUYLIMIT && OrderType()<=OP_SELLSTOP)
      if( IsMagicNumber(OrderMagicNumber(),EaMagicNumber) )
        if( IsSymbol(OrderSymbol(),EaSymbol) )
          if( IsOpenTime(OrderOpenTime(),EaStart,EaFinish) )
            trades++;
  }
  if( trades>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 );
}
Understand and use the script at your own risk, and test it on a demo first before applying it live.
All times are UTC Page 1 of 1