Discusión sobre el artículo "Cómo crear tu propio Trailing Stop"

 

Artículo publicado Cómo crear tu propio Trailing Stop:

La regla básica del trader -dejar correr el beneficio, cortar las pérdidas! Este artículo aborda una de las técnicas básicas, lo que permite seguir esta regla -mover el tope de pérdida dinámico (Stop Loss level) después de incrementar el beneficio de la posición, es decir el nivel Trailing Stop. Encontrarás el procedimiento paso a paso para crear una clase Trailing Stop en los indicadores SAR y NRTR. Cualquiera podrá insertar este Trailing Stop en sus expertos o utilizarlo independientemente para controlar las posiciones de sus cuentas.

Figure 11. Buttons and Indicators on the Chart After Starting the Sample_TrailingStop.

Autor: Dmitry Fedoseev

 

Muy útil. Gracias.


Steven

 

El ejemplo final falla con un error.

 
Especifique cuál.
 

Programadores, ¡¡¡ayuda con mql5, por favor!!!

¿Es posible utilizar simplemente una función trailing ordinaria como en mql4 sin ninguna clase? Al igual que, por ejemplo, la función TradeSizeOptimised se implementa en Moving Averages.mq5.

Ya he buscado de todo, en ejemplos, artículos, foro - no he encontrado nada. Ya me he perdido completamente.... Tal vez alguien tiene una variante listo, voy a estar muy agradecido!!! - Tengo muchas ganas de participar en el campeonato.

 
Setslav:

Programadores, ¡¡¡ayuda con mql5, por favor!!!

¿Es posible utilizar simplemente una función trailing ordinaria como en mql4 sin ninguna clase? Al igual que, por ejemplo, la función TradeSizeOptimised se implementa en Moving Averages.mq5.

Ya he buscado de todo, en ejemplos, artículos, foro - no he encontrado nada. Ya me he perdido completamente.... Tal vez alguien tiene una variante listo, voy a ser muy agradecidos!!! - Me gustaría participar en el campeonato.


aquí tienes

int TrailingStop()
  {
   if(PositionSelect(Symbol())) // seleccionar posición
     {
      //MqlTradeRequest m_request;// declarar la estructura de la petición al servidor
      //MqlTradeResult m_result;// declarar la estructura de respuesta del servidor
      double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);                         // escribir el precio de oferta en la variable
      double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);                         // escribir en la variable precio de venta
      double OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);                     // escribe el precio de apertura de la posición en la variable
      double PositionSL=PositionGetDouble(POSITION_SL);                            // escribir el nivel de stop loss en la variable
      double PositionTP=PositionGetDouble(POSITION_TP);                            // escribe el nivel de beneficio en la variable

      if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // definir tipo de posición
        {
         if(TrailWhileMinus==true || Bid-OpenPrice>_Point*Trail) // no arrastre hasta que podamos alcanzar el punto de equilibrio con la transferencia de la primera parada.
           {
            if(Bid-PositionSL>Trail*_Point) //condición básica para la necesidad de mover el stop loss
              {
               //--- escribir datos en la estructura
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Bid-Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                              // enviar la solicitud al servidor
              }
           }
        }
      else
        {
         if(TrailWhileMinus==true || OpenPrice-Ask>_Point*Trail) // no arrastre hasta que podamos alcanzar el punto de equilibrio con la transferencia de la primera parada.
           {
            if(PositionSL-Ask>Trail*_Point) //condición básica para la necesidad de mover el stop loss
              {
               //--- escribir datos en la estructura
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Ask+Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                            // enviar la solicitud al servidor
              }
           }
        }
     }
   return(0);
  }
[Eliminado]  
sergey1294:

aquí tienes

Supongo (probablemente no sin razón) que es mejor pasar el resultado como parámetro :)

De lo contrario no hay manera de analizarlo. De alguna manera no es bueno...

PS

También crearía dos funciones - TrailingStopBuy y TrailingStopSell

 
Interesting:

Supongo (probablemente no sin razón) que es mejor pasar el resultado como parámetro :)

De lo contrario, no hay forma de analizarlo. De alguna manera no es bueno...

PS

Yo también crearía dos funciones - TrailingStopBuy y TrailingStopSell.

Bueno, le di a la persona un ejemplo, porque ya ha hecho su cerebro cómo escribir un trailing ordinaria, y luego dejar que él piensa un poco, que funcionaría sin errores, en el probador en principio y esta construcción funciona normalmente. en la vida real no comprobó
[Eliminado]  
sergey1294:
Bueno, le di al hombre un ejemplo, porque ya ha hecho su cerebro cómo escribir un trailing ordinaria, y luego dejar que él piensa un poco, que funcionaría sin errores, en el probador en principio, y este diseño funciona bien. en la vida real no comprobó
Como ejemplo por supuesto que va a hacer, pero si sin analizar el resultado habrá un montón de errores (tarde o temprano) ...
 
sergey1294:

Aquí tiene.

¡Gracias!
 

sergey1294,

Gracias de nuevo, ¡¡¡todo funciona!!!

Hay una pequeña duda más, ¿cómo añadir un check por número mágico a la función? Estoy intentando insertar un check de este tipo:

if (OrderGetInteger(ORDER_MAGIC)==EA_Magic)
{
.....
}
..... pero algo que rompe todo el comercio.....