Inicio Trading Sistemático Publicación

Cierra Todas las Órdenes al Alcanzar un Porcentaje Específico de Drawdown - Sistema para MetaTrader 4

Archivos adjuntos
14582.zip (2.27 KB, Descargar 2 veces)

Hoy quiero compartir contigo un código muy útil que te permitirá cerrar todas tus órdenes abiertas una vez que el drawdown alcance un porcentaje específico de tu saldo de cuenta. Esto es crucial para proteger tu capital y mantener una buena gestión de riesgos.

Para utilizar este sistema, solo necesitas ingresar el número mágico de las órdenes (si quieres controlar todas, simplemente pon 0) y el porcentaje máximo de drawdown que permitirás antes de que el código cierre automáticamente las órdenes.

Para activar esta función, solo tienes que llamar a la función DD_close.

Adjunto encontrarás el archivo de encabezado de este código junto con el sistema de trading que se basa en él.

// Para usar esta opción, solo necesitas llamar a la función: ( DD_close )
//+------------------------------------------------------------------+
//|                          Ámbito global                            |
//+------------------------------------------------------------------+
bool Close_All_V;
//+------------------------------------------------------------------+
//|                          Función principal                            |
//+------------------------------------------------------------------+
// DD:               Aquí está el porcentaje de DD, 100 significa nunca cerrar ninguna orden.
// Magic_Number:     Tu número mágico de EA, ingresa 0 para controlar todas las órdenes.
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);
  }
//+------------------------------------------------------------------+
//|                          Verificar cierre                             |
//+------------------------------------------------------------------+
void Check_Close(int Check_Number) // verificar cierre de orden
  {
   if(Check_Number<0) Print("Cierre de orden fallido con error: ",ErrorDescription(GetLastError()));
   else Close_All_V=false;
  }
//+------------------------------------------------------------------+
//|                          Cerrar todo                               |
//+------------------------------------------------------------------+
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));
              }
        }
  }
//+------------------------------------------------------------------+
//|                          Calcular pérdida                          |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//|                  Calcular porcentaje de drawdown                   |
//+------------------------------------------------------------------+
double DD(int M_N)
  {
   return ( 100 / AccountBalance ( ) ) * Loss ( M_N );
  }
//+------------------------------------------------------------------+

Publicaciones relacionadas

Comentarios (0)