Discusión sobre el artículo "Asesor Experto Multiplataforma: Stops Personalizados, Ausencia de Pérdidas y Trailing" - página 2

 
Enrico Lambino:

Tu primer código activa el breakeven, no el trailingstop. Si hubiera alguna otra modificación del SL, sería el takeprofit. Pero si su TP es de 500 puntos, el trailing no se activaría en absoluto a 500 puntos, ya que la operación ya ha salido del mercado en ese punto.

Su segundo código utiliza trailingstop, pero no breakeven. Porque incluso antes de que el breakeven se puede aplicar, el SL ya se ha movido por encima del precio de equilibrio.


Hola Enrico,

No entendí tu punto.

Esto es breakeven:

 //--- establecer el punto de equilibrio
   CTrail *trail_be=new CTrail();
   //trail_be.Set(BELevel,BEOpenPriceDist,0); 
   trail_be.Set(230,250,0);   
   trails.Add(trail_be);

Esto es trailing:

//--- fijar el trailing stop
   CTrail *trail=new CTrail();
   //trail.Set(valor_trayecto,inicio_trayecto,paso_trayecto);
   trail.Set(400,500,10);
   trails.Add(trail);

Breakeven se activa en 250 puntos, trailing se activa en 500 puntos. Como ves trailing no se activa antes que breakeven.

El SL no se movió por encima (o por debajo) del precio de breakeven. El stop loss fue el mismo SL inicial por debajo del precio de apertura. El trailing stop movió el SL por primera vez por encima del precio de apertura (y del precio de equilibrio).

El trailing stop funciona bien. Breakeven no funciona(objeto trail_be). Si no uso el trailing stop el breakeven funciona bien.

 

El problema parece ser sólo para la orden de venta.

double CTrailsBase::Check(const string symbol,const ENUM_ORDER_TYPE type,const double entry_price,const double price,const ENUM_TRAIL_TARGET mode)
  {
   if(!Active())
      return 0;   
   double val=0.0,ret=0.0;
   MqlDateTime time_curr;
   TimeCurrent(time_curr);
   if(time_curr.day==3 && time_curr.hour==11 && time_curr.min>=30)
      Print("");
   for(int i=0;i<Total();i++)
     {
      CTrail *trail=At(i);
      if(!CheckPointer(trail))
         continue;
      if(!trail.Active())
         continue;
      int trail_target=trail.TrailTarget();
      if(mode!=trail_target)
         continue;
      val=trail.Check(symbol,type,entry_price,price,mode);
      if((type==ORDER_TYPE_BUY && trail_target==TRAIL_TARGET_STOPLOSS) || (type==ORDER_TYPE_SELL && trail_target==TRAIL_TARGET_TAKEPROFIT))
      {
         if(val>ret || ret==0.0)
            ret=val;
      }      
      else if((type==ORDER_TYPE_SELL && trail_target==TRAIL_TARGET_STOPLOSS) || (type==ORDER_TYPE_BUY && trail_target==TRAIL_TARGET_TAKEPROFIT))
      {
         if(val<ret || ret==0.0)
            ret=val;
      }      
     }
   return ret;
  }

Problema en este lugar

 else if((type==ORDER_TYPE_SELL && trail_target==TRAIL_TARGET_STOPLOSS) || (type==ORDER_TYPE_BUY && trail_target==TRAIL_TARGET_TAKEPROFIT))
      {
         if(val<ret || ret==0.0)
            ret=val;
      }      

Supongo que debería cambiarse a

 else if((type==ORDER_TYPE_SELL && trail_target==TRAIL_TARGET_STOPLOSS) || (type==ORDER_TYPE_BUY && trail_target==TRAIL_TARGET_TAKEPROFIT))
      {
         if( (val>0 && val<ret) || ret==0.0)
            ret=val;
      }      
 

Gracias por explicarme mejor el tema, y perdón por haberme explicado mal antes. Con respecto a este cambio:

else if((type==ORDER_TYPE_SELL && trail_target==TRAIL_TARGET_STOPLOSS) || (type==ORDER_TYPE_BUY && trail_target==TRAIL_TARGET_TAKEPROFIT))
      {
         if( (val>0 && val<ret) || ret==0.0)
            ret=val;
      }   

Normalmente, sólo pongo el CTrail breakeven como el último índice por lo que se evalúa en último lugar, pero el código anterior es una solución más permanente para trailing el stoploss de vender operaciones.

 

¿Cómo vinculo un stop específico a una señal específica? Debido a la lógica de mi estrategia, cada señal de entrada tiene su propio stop.

Lo mismo con la señal de salida.

 

hola tengo un problema con el experto ¿me podeis ayudar?


'SetContainer' - unexpected token, probably type is missing?	SymbolManagerBase.mqh	55	21
'SetContainer' - function already defined and has different type	SymbolManagerBase.mqh	55	21
'Deinit' - unexpected token, probably type is missing?	SymbolManagerBase.mqh	62	21
'Deinit' - function already defined and has different type	SymbolManagerBase.mqh	62	21