Home Trading Sistematico Post

Chiudere tutte le posizioni al raggiungimento di un drawdown specifico - EA per MetaTrader 4

Allegato
14582.zip (2.27 KB, Scarica 0 volte)

In questo articolo voglio parlarti di un interessante codice che ti consente di chiudere automaticamente tutte le posizioni aperte quando il drawdown raggiunge una certa percentuale del saldo del tuo conto.

Per utilizzare questo codice, dovrai semplicemente inserire il numero magico delle posizioni (puoi inserire 0 per controllare tutte le posizioni) e la percentuale massima di drawdown che consentirà alla logica del codice di chiudere le operazioni al raggiungimento di tale soglia.

Basta chiamare la funzione DD_close per utilizzare questo codice.

In allegato trovi il file di intestazione di questo codice con l'EA che è costruito su di esso.

// Per utilizzare questa opzione, devi solo chiamare la funzione : ( DD_close ) 
//+------------------------------------------------------------------+
//|                          Ambito globale                            |
//+------------------------------------------------------------------+
bool Close_All_V;
//+------------------------------------------------------------------+
//|                         Funzione principale                            |
//+------------------------------------------------------------------+
// DD:               Qui si indica la percentuale di DD, 100 significa non chiudere mai alcuna posizione.
// Magic_Number:     Il numero magico del tuo EA, inserisci 0 per controllare tutte le posizioni.
void DD_close(int DD,int Magic_Number)
  {
   if(DD(Magic_Number)>=DD)
      Close_All_V=true;
   if(Close_All_V)
      Close_All(Magic_Number);
  }
//+------------------------------------------------------------------+
//|                          Controlla chiusura                             |
//+------------------------------------------------------------------+
void Check_Close(int Check_Number) // controlla chiusura ordine
  {
   if(Check_Number<0) Print("Chiusura ordine fallita con errore: ",ErrorDescription(GetLastError()));
   else Close_All_V=false;
  }
//+------------------------------------------------------------------+
//|                          Chiudi tutto                               |
//+------------------------------------------------------------------+
void Close_All(int M_N)
  {
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       Loop++;
       if(OrderSymbol()==Symbol())
        if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
          {
           if(OrderType()==OP_BUY)
              Check_Close(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE));
           if(OrderType()==OP_SELL)
              Check_Close(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE));
          }
      }
  }
//+------------------------------------------------------------------+
//|                          Calcola perdita                          |
//+------------------------------------------------------------------+
double Loss(int M_N)
  {
   double re=0;
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         Loop++;
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
               re=re+OrderProfit();
        }
   return re * -1;
  }
//+------------------------------------------------------------------+
//|                  Calcola la percentuale di drawdown                   |
//+------------------------------------------------------------------+
double DD(int M_N)
  {
   return ( 100 / AccountBalance ( ) ) * Loss ( M_N );
  }
//+------------------------------------------------------------------+

Post correlati

Commento (0)