Respuesta

Función TrailingStop - cuestionable

5 respuestas

Mike H.

Abonado, bbp_participant, comunidad, 76 respuestas.

Visitar el perfil

hace 9 años #112526

Cuando vi la función TrailingStop en el editor, me di cuenta de que el código era idéntico

tanto para el tipo de orden COMPRA como para el tipo de orden VENTA.

 

Me preguntaba por qué mis reglas TrailingStop para mis operaciones cortas no se activaban...

 

A continuación se muestra cómo el Asistente de EA escribe la Función: (He subrayado los segmentos en cuestión) (observe los diferentes MagicNumbers)

 

double getOrderTrailingStop(int orderMagicNumber, int orderType, double price) {
   valor doble = 0;
   if(orderMagicNumber == 2456) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {        
            valor = Oferta - valor;
         } else {
            valor = Pregunta + valor;
         }
      }

 

Lo mismo ocurre con OrderBreakEven:
   }
   if(orderMagicNumber == 3798) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {        
            valor = Oferta - valor;
         } else {
            valor = Pregunta + valor;
         }
      }
   }
   return(NormalizarDoble(valor, Dígitos));
}
 

Lo mismo ocurre con OrderBreakEven:

 

double getOrderBreakEven(int orderMagicNumber, int orderType, double price) {
   valor doble = 0;
   if(orderMagicNumber == 2456) {
      value = ( 7 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {
            valor = Oferta - valor;
         } else {
            valor = Pregunta + valor;
         }
      }
   }
   if(orderMagicNumber == 3798) {
      value = ( 7 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {
            valor = Oferta - valor;
         } else {
            valor = Pregunta + valor;
         }
      }
   }
   return(NormalizarDoble(valor, Dígitos));
}
 

Estimado Mark, en lugar de tener que esperar a una actualización del Asistente de EA, ¿podrías mostrarme cómo realizar los cambios en el Editor?

 

??? Cambia COMPRA por VENTA y valor = ???

0

Mike H.

Abonado, bbp_participant, comunidad, 76 respuestas.

Visitar el perfil

hace 9 años #126086

Querido Mark, no podía esperar, así que ya he hecho los cambios necesarios...

 

   if(ordenNumeroMagico == 3978) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_SELL || orderType == OP_SELLSTOP | orderType == OP_SELLLIMIT) {
            valor = Pregunta + valor;
         } else {
            valor = Oferta - valor;
 

   if(orderMagicNumber == 3798) {
      value = ( 0 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_SELL || orderType == OP_SELLSTOP | orderType == OP_SELLLIMIT) {
            valor = Pregunta + valor;
         } else {
            valor = Oferta - valor;
 

 

Las funciones TrailingStop y BreakEven funcionan bien ahora...

 

Más tarde, Mike H.

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 9 años #126096

Hola Mike,

 

Lo siento, peroSi no me equivoco son funcionalmente equivalentes.

 

if(orderType == OP_SELL || orderType == OP_SELLSTOP | orderType == OP_SELLLIMIT) {
   valor = Pregunta + valor;
} else {
   valor = Oferta - valor;

}

 

es funcionalmente igual que:

 

if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {

   valor = Oferta - valor;
} else {
   valor = Pregunta + valor;
}

 

La condición If reconoce si la orden es de compra o de venta, y utiliza el valor apropiado. Lo que has hecho es que solo has cambiado el check, pero debería hacer exactamente lo mismo.

 

Así que si de repente funciona tal vez fue causado por algo más que esto.

Mark
Arquitecto de StrategyQuant

0

Mike H.

Abonado, bbp_participant, comunidad, 76 respuestas.

Visitar el perfil

hace 9 años #126108

Hola Mark, El primer mensaje en este tema muestra cómo el Asistente de EA es la salida del código ...

El Asistente EA genera el código de la siguiente manera:

 

double getOrderTrailingStop(int orderMagicNumber, int orderType, double price) {
   valor doble = 0;
   if(orderMagicNumber == 2456) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {        
            valor = Oferta - valor;
         } else {
            valor = Pregunta + valor;
         }
      }

 

Lo mismo ocurre con OrderBreakEven:
   }
   if(orderMagicNumber == 3798) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      if(valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {        
            valor = Oferta - valor;
         } else {
            valor = Pregunta + valor;
         }
      }
   }
   return(NormalizarDoble(valor, Dígitos));
}

 

Lo que veo es que no hay Condición para la VENTA... Los 2 SI son idénticos...

Arriba se muestra cómo el Asistente de EA está escribiendo el código >>> idénticos SI subrayados para diferentes Números Mágicos...

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 9 años #126147

Sí, pero la lógica es correcta. Si la orden es de compra, el precio se calcula de una manera, si no (entonces la orden debe ser de venta) el precio se calcula de otra manera.

 

 

 if(orderType == OP_BUY || orderType == OP_BUYSTOP | orderType == OP_BUYLIMIT) {  

  esto significa que es una orden de compra

  …

} else {

  esto significa que es una orden de venta

  …

}

 

Realmente no parece haber ningún error en el EA, fue probado en ambos lados.

Mark
Arquitecto de StrategyQuant

0

Mike H.

Abonado, bbp_participant, comunidad, 76 respuestas.

Visitar el perfil

hace 9 años #126157

Ahora lo veo y lo entiendo... ¡¡¡Gracias Mark!!!

0

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)