Home Trading Sistemático Post

Cierre de Órdenes por Objetivo o Pérdida – Sistema de Trading para MetaTrader 4

Attachments
34194.zip (995 bytes, Download 0 times)
Usamos este sistema de trading como una herramienta eficaz para maximizar tus resultados en el mercado.

Para su funcionamiento, se requieren 3 entradas, que son las siguientes:

  1. Objetivo de Beneficio
  2. Pérdida Máxima
  3. Número Mágico
extern    double         inTargetProfitMoney     = 10;       //Objetivo de Beneficio ($)
extern    double         inCutLossMoney          = 0.0      //Pérdida Máxima ($)
extern    int            inMagicNumber           = 0        //Número Mágico


Al ejecutar este sistema de trading, primero se llamará a la función OnInit(). En esta etapa verificaremos las entradas y la inicialización de variables.

int OnInit()
  {
//---
   if(inTargetProfitMoney <= 0)
     {
      Alert("Entrada no válida");
      return(INIT_PARAMETERS_INCORRECT);
     }

   inCutLossMoney = MathAbs(inCutLossMoney) * -1;

//---
   return(INIT_SUCCEEDED);
  }


Cada vez que se produzca un movimiento de precios (tick), se llamará a la función OnTick().

void OnTick()
  {
//---

   double   tFloating = 0.0;
   int tOrder  = OrdersTotal();
   for(int i=tOrder-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == inMagicNumber)
           {
            tFloating   += OrderProfit()+OrderCommission() + OrderSwap();
           }
        }
     }

   if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))
     {
      fCloseAllOrders();
     }

  }

En la función OnTick, se calculará continuamente el beneficio o la pérdida total. Luego, se cerrarán todas las órdenes que cumplan con el objetivo o el límite de pérdida máxima.

void fCloseAllOrders()
  {
   double   priceClose = 0.0;
   int tOrders = OrdersTotal();
   for(int i=tOrders-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))
           {
            priceClose  = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);
            if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))
              {
               Print("ADVERTENCIA: Cierre fallido");
              }
           }
        }
     }
  }


Para obtener información más detallada y compartir educación sobre el código MQL4, por favor únete a nuestro grupo de Telegram.




Related Posts

Comments (0)