Comunidad de expertos - página 2

 
Para las paradas, sería mejor introducir un "enfriamiento" (no sé cómo llamarlo correctamente).

Si trazas un stop con una precisión de un pip, el broker aullará y cortará los Expert Advisors :)

Creo que esto es mejor:
   if (MathAbs(CurrentStopLoss - NewStopLoss) > (Ask - Bid)*Koef) { // Modificar stop loss ................ }


Es decir, modificamos la orden si el nuevo stop difiere del anterior en un número determinado de spreads (1 - 2).
Su problema se resuelve automáticamente aquí.

 
Mak, gracias por el consejo. Lo haré.
Sólo que aquí el problema es diferente - trata de establecer _al_mismo_valor_... Es decir, dicha comprobación no salvará del error, sino que sólo reducirá su probabilidad =)
 
Sólo que aquí el problema es diferente - trata de establecer _al_mismo_valor_... es decir, esta comprobación no salvará del error, sino que sólo reducirá su probabilidad =)

Lo más probable es que sea un fallo en el texto de EA.
Tuve uno similar, no recuerdo cómo se arregló.

Pero el ejemplo anterior asegura que cualquier error en el script
no habrá intentos de establecer el mismo valor.
 
Только тут проблема в другом - оно пытается установить _на_то_же_значение_... т.е. такая проверка не спасёт от ошибки, а просто уменьшит её вероятность =)

Lo más probable es que sea un fallo en el texto del experto. Yo tuve uno similar, cómo se arregló, no lo recuerdo. Pero el ejemplo anterior asegura que cualquier error en el script no intentará establecer el mismo valor.





Mak, hay 1 línea de texto allí =
)_TrailingStop( orderticket, 50 );



Escribí la función precisamente para evitar esos errores, y la comprobación es la misma, con la diferencia de que se trabaja cada pip.
Si el valor es el mismo (la distancia del precio al stop es igual a 50 en este caso) los trailing stops no deberían funcionar.
Además, en la mayoría de los casos no funciona =)))), y a veces se cuela por alguna razón ....

 
¿Tal vez NormalizeDouble funciona de manera diferente a veces?
¿Redondea o descarta?

En general, es mejor no comparar nunca los tipos flotantes para la igualdad.
La única excepción:
double A,B; .......... A = .......; ............. B = A; ........... if (B == A) ........



Y sobre una línea ...
En _TrailingStop hay muchas líneas,
y si hay al menos 2, ya hay un motivo de error :)

 
¿Qué hace, descarta o redondea?
Yo también tengo curiosidad ;)

Ya lo he corregido parcialmente aquí: en lugar de
( orderstoploss == 0.0 ........ )


hecho

si ( ordertoploss <= 0 ......... )

y el resto parecía estar bien:

.... ordertoploss < ( bid - TrailingStop * point ) 





Renat, en general tengo mis esperanzas puestas en ti =) probablemente hay algo tan simple como un ángulo aquí - y yo simplemente no me doy cuenta...

 
Veré si puedo ayudar el fin de semana.
 
Intentaré echarle un vistazo este fin de semana a ver si puedo ayudar.
Tengo que hacerlo bien...
 
Probablemente es algo tan simple como un ángulo - y no me doy cuenta...

komposter, te equivocas :) Como dijo la niña que doblaba la cuchara, "las cosas no son lo que parecen".
Por ejemplo, el siguiente bucle imprime 5 números:
for (double d = 0.1; d <= 0.5; d += 0.1) Print(d);


¿Cuánto imprimirá el próximo ciclo con los límites aumentados en 1,0?

for (double d = 1.1; d <= 1.5; d += 0.1) Print(d);



También se esperaría que imprimiera 5 números, pero sólo imprime 4 (cuatro). ¿No es genial?
Si se añade otra línea después del bucle:

Print("d=" + d + "(d <= 1,5)=" + (d <= 1,5));


nos encontramos con que:

d=1,50000000 (d <= 1,5)=0



Casi como el tuyo con un tope, pero más fundamental :). El problema es tan antiguo como el primer chip de ordenador:
Los ordenadores utilizan la aritmética binaria y los humanos la decimal. Al redondear, aparecen artefactos.

"Redondear", que sugirió Mak, ayuda si tienes un problema fundamental de redondeo, no un error trivial.

Mucha gente piensa que los cálculos financieros DEBEN UTILIZAR bibliotecas aritméticas decimales especiales, pero incluso éstas pueden contener errores, a veces
que a veces puede tener graves consecuencias. Por cierto, Renat, ¿qué implementación de la aritmética utilizas?

 
komposter

He echado un vistazo rápido (aún no he investigado), he encontrado la referencia del punto que estás calculando.
Intenta "descartarlo" y poner Punto. Probablemente ese sea el problema (el punto en MarketInfo no siempre sale como uno quiere...).