Necesito ayuda para detectar un pequeño error. - página 3

 

La larga condición && y ||, la he dividido en varias sentencias if encadenadas. También intenté usar MarketInfo(OrderSymbol() , MODE_ASK/BID) en lugar de OrderClosePrice() .

Esta parte todavía funciona a veces y no todo el tiempo, también probé las sugerencias que todos me dieron, pero todavía terminó igual.

No estoy seguro si es esto lo que causa el problema o es otra cosa. Pero de esas pruebas y errores esto es lo que noto.

Parece que siempre la parte más baja de la orden abierta no quiere mover la pérdida de la parada, incluso si la condición se cumple (El largo && y || condición y los muchos encadenados si declaración, he intentado ambos).

La configuración del EA:

Cuenta 1 antes :


Cuenta 1 después :

Para esta cuenta 1 , la primera y segunda orden no cumplieron la condición if/if + && y || , por lo que el stop loss no se movió ( lo cual es correcto ) .

La tercera orden, sin embargo, ya cumplía la condición y debería seguir hasta la décima, pero el stop loss sólo se movió una vez. (mal, mal, mal).

Deberia haberse movido mas de una vez ( deberia ser 50.0 pips por mi cuenta , no 5.0 pips ) .

Cuenta 2 antes :

Cuenta 2 después :

Para esta cuenta 2 , solo la 1ª orden no cumplió la condición , por lo que de nuevo no se mueve el stop loss ( lo cual es correcto ) . La 2ª y 3ª orden cumplieron la condición y AQUÍ ESTÁ LA PARTE EXTRAÑA .

La segunda orden se ha movido exactamente hasta la décima, el stop loss se ha movido exactamente 10 veces. El stop loss se movió a 50.0 pips del precio de apertura de esa orden individual (lo cual es correcto).

La 3ª orden, sin embargo, también cumplía la condición y debía llegar hasta la 3ª, pero de nuevo el stop loss sólo se movió una vez (de nuevo erróneo).

¿Os habéis dado cuenta de que las dos cuentas en las que el trailing no funciona correctamente es en la última orden?

Si el USDJPY puede funcionar, debería poder aplicarse a todos los demás pares. No estoy seguro de qué hacer con él.

Utilizo un bucle de conteo hacia atrás que leí donde RaptorUK enseñó que debería ser bueno. Contar hacia atrás no debería ser el problema tampoco .

La pestaña de expertos no muestra ningún error tampoco ....

@.@ T_T

 
¿Estás seguro de que el precio no retrocedió y lo paró después del primer rastro?
 
Disculpe, no entiendo bien lo que quiere decir... ¿A qué precio se refiere? ¿Detenerlo después de la primera pista?
 
Ahora entiendo lo que quieres decir, la primera vez no leí bien los resultados de la operación
 
SDC:
Ahora entiendo lo que quieres decir, la primera vez no leí bien los resultados de la operación
Todavía no tengo idea de lo que está mal con él .... ¿Tienes alguna idea de dónde me he equivocado?
 
      if ( ( OrderStopLoss() == 0 ) || (OrderStopLoss() != 0 && OrderStopLoss() <= OrderOpenPrice() ) || ( OrderStopLoss() < ( OrderOpenPrice() + ( TrailingStop * Figure ) ) ) )
                              {
 

Lo he intentado, pero sigue siendo lo mismo en ....

Lo he intentado muchas veces, siempre es la última orden la que no se modifica correctamente .... ¿el bucle de cuenta atrás causa este problema? no lo creo, pero no sé por qué no funciona correctamente ...

 

juniorlcq:

¿La cuenta atrás del bucle causa este problema?


no importa si cuenta hacia arriba o hacia abajo (trailing stoploss)

al borrar o cerrar una operación hay que contar hacia abajo

 

También he probado a contar hacia arriba, pero el problema sigue siendo el mismo.

¿Es que el segundo bucle for ya ha modificado la orden y he tenido que volver a seleccionarla?

Al principio seleccioné el pedido, y en el segundo bucle for la condición cumplida modificó ese pedido. ¿Tengo que volver a seleccionar de nuevo?

 

OrderSelect

La función OrderSelect() copia los datos de la orden en el entorno del programa y todas las llamadas posteriores de OrderClosePrice(), OrderCloseTime(), OrderComment(), OrderCommission(), OrderExpiration(), OrderLots(), OrderMagicNumber(), OrderOpenPrice(), OrderOpenTime(), OrderPrint(), OrderProfit(), OrderStopLoss(), OrderSwap(), OrderSymbol(), OrderTakeProfit(), OrderTicket(), OrderType() devuelven los datos, copiados anteriormente. Esto significa que en algunos casos los detalles de la orden (precio de apertura, niveles SL/TP o fecha de vencimiento) pueden cambiar y los datos se vuelven no reales. Se recomienda encarecidamente llamar a la función OrderSelect() antes de solicitar los datos de la orden.