Función TrailingStop - cuestionable
5 respuestas
Mike H.
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 = ???
Mike H.
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.
Mark Fric
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
Mike H.
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...
Mark Fric
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
Mike H.
hace 9 años #126157
Ahora lo veo y lo entiendo... ¡¡¡Gracias Mark!!!
Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)