Trading Sistemático 게시글

Trailing Stop con MagicNumber - Sistema de Trading para MetaTrader 4

첨부파일
34177.zip (1.19 KB, 다운로드 0회)


El Trailing Stop es una herramienta fundamental que apoya nuestras operaciones al mover el stop loss hacia la zona de ganancias, permitiéndonos asegurar automáticamente nuestras transacciones.

Iniciaremos escribiendo el código especificando los parámetros de entrada del trailing stop.

input    bool     isTrailingStop = true;  //Trailing Stop
input    int      trailingStart  = 15;    //Inicio del Trailing (pips)
input    int      trailingStep   = 5     //Paso del Trailing (pips)

input    int      MagicNumber = 0;        //Número Mágico


Variable Global

//Variable Global
double   myPoint    = 0.0;


Cuando ejecutamos este sistema de trading, la función OnInit() se ejecutará por primera vez, y en esta función validaremos e inicializaremos las variables de entrada.

int OnInit()
  {
  
   if (isTrailingStop && trailingStart <= 0){
      Alert ("Parámetros incorrectos");
      return(INIT_PARAMETERS_INCORRECT);
   }
   
   myPoint     = GetPipPoint(Symbol());
   
   return(INIT_SUCCEEDED);
  }


Cada vez que ocurre un movimiento de precio (tick) en el gráfico donde está emparejado este sistema de trading, se ejecutará la función OnTick(). Dentro de esta función se llamará a setTrailingStop().

void OnTick()
  {
//---
   setTrailingStop(MagicNumber);
   
  }


Función setTrailingStop()

void setTrailingStop(int magicNumber=0){
   if (isTrailingStop==false) return;
   
   int      tOrder = 0;
   string   pair = "";
   double   sl = 0.0, tp = 0.0;
   
   pair = Symbol();
   
   tOrder = OrdersTotal();
   for (int i=tOrder-1; i>=0; i--){
      bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){
         if (OrderType() == OP_BUY){
            if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()
                  && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )
                )
            {
               sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ 
                  Print ("#", OrderTicket(), " fallo en actualizar sl");
               }
            }
         }
         
         if (OrderType() == OP_SELL){
            if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()
                  && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)
               )
            {
               sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ 
                  Print ("#", OrderTicket(), " fallo en actualizar sl");
               }
            }
         }
      } //fin if magicNumber
   }//fin for
}


Otras funciones estándar requeridas son GetPipPoint() 

// Función GetPipPoint
double GetPipPoint(string pair)
{
   double point= 0.0;
   int digits = (int) MarketInfo(pair, MODE_DIGITS);
   if(digits == 2 || digits== 3) point= 0.01;
   else if(digits== 4 || digits== 5) point= 0.0001;
   return(point);
}


Si tienes alguna pregunta, déjala en los comentarios o también puedes unirte a nuestro grupo de intercambio t.me/codeMQL


También ofrecemos la aplicación SignalForex.

Puedes apoyarnos descargando y utilizando la aplicación SignalForex para hacer tus operaciones más rentables.

https://play.google.com/store/apps/details?id=com.autobotfx.signalforex



    연관 포스트

    댓글 (0)