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
- Promedio Móvil: Asesor Experto para MetaTrader 5
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Dark Cloud Cover y Piercing Line
- Señales de Trading con Patrón Hammer/Hanging Man y Estocástico en MetaTrader 5
- MQL5 Wizard: Crea un Asesor Experto con Señales de Bullish Harami y Bearish Harami + CCI