Trading Sistemático 게시글

Cierra Órdenes por Objetivo o Limita Pérdidas - Herramienta para MetaTrader 4

첨부파일
34194.zip (995 bytes, 다운로드 0회)

Utilizando el EA para el Trading

En el mundo del trading, contar con las herramientas adecuadas puede marcar la diferencia. Hoy vamos a hablar sobre un Asesor Experto (EA) que te ayudará a gestionar tus órdenes de manera más eficiente.

Inputs Necesarios

Este EA requiere tres entradas que debes configurar:

  • Objetivo de Beneficio
  • Límite de Pérdidas
  • Número Mágico
extern    double         inTargetProfitMoney     = 10;       //Objetivo de Beneficio ($)
extern    double         inCutLossMoney          = 0.0      //Límite de Pérdidas ($)
extern    int            inMagicNumber           = 0        //Número Mágico

Cuando este EA se ejecuta, primero llamará a la función OnInit(), donde verificaremos la inicialización de las entradas y variables.

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

   inCutLossMoney = MathAbs(inCutLossMoney) * -1;

//---
   return(INIT_SUCCEEDED);
  }

Cada vez que haya un movimiento de precio (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 calcula el beneficio o pérdida total. Si se cumple el objetivo o se alcanza el límite de pérdida, se cierran todas las órdenes.

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("AVISO: Cierre Fallido");
              }
           }
        }
     }
  }

Para más información detallada y compartir códigos MQL4, te invito a unirte a nuestro grupo de Telegram: t.me/codeMQL


연관 포스트

댓글 (0)