Cómo comprobar si una orden ha sido cerrada por stop loss - página 2

 

¿Podría responder sólo si sabe de lo que está hablando?

Este es un tema sobre MT5/mql5, eliminaré todos los mensajes irrelevantes.

No hay precio de stoploss en el historial de MT5.

 

El principal problema en mql5 (cuenta de cobertura) es conocer el precio del Stop Loss, cuando se cierra una posición, debido a la falta de historial de posiciones. Puedes utilizar HistorySelectByPosition() para encontrar tu Stop Loss inicial (Stop Loss de la orden inicial), pero si has modificado ese Stop Loss posteriormente, genera nuevas órdenes para hacerlo, sin el mismo POSITION_ID, y por tanto, no serán seleccionadas por la función HistorySelectByPosition(), por lo que se hace muy difícil saber el último Stop Loss que colocaste.

No sé si se puede considerar como un bug, pero si no, debería serlo.

Saludos.

Documentation on MQL5: Trade Functions / HistorySelectByPosition
Documentation on MQL5: Trade Functions / HistorySelectByPosition
  • www.mql5.com
Trade Functions / HistorySelectByPosition - Reference on algorithmic/automated trading language for MetaTrader 5
 
Jose Francisco Casado Fernandez:

El principal problema en mql5 (cuenta de cobertura) es conocer el precio del Stop Loss, cuando se cierra una posición, debido a la falta de historial de posiciones. Puedes usar HistorySelectByPosition() para encontrar tu Stop Loss inicial (Stop Loss de la orden inicial)...

No se puede o te he entendido mal.

El Stoploss actual no está en ninguna parte del historial.

 
Alain Verleyen:

No puedes o te he entendido mal.

El Stoploss no está en ninguna parte de la historia.

Puedes usar HistorySelectByPosition(), con tu POSITION_ID, y luego puedes encontrar la primera orden con ese POSITION_ID, y comprobar el Stop Loss de esta orden (HistoryOrderGetDouble(ticket, ORDER_SL). A mí me ha funcionado, pero
.el problema es cuando modificas ese Stop Loss después.
 
Jose Francisco Casado Fernandez:
Puedes usar HistorySelectByPosition(), con tu POSITION_ID, y luego puedes encontrar la primera orden con ese POSITION_ID, y comprobar el Stop Loss de esta orden (HistoryOrderGetDouble(ticket, ORDER_SL). A mí me ha funcionado, pero
.el problema es cuando modificas ese Stop Loss después.

Ok entendido ahora, tienes razón.

 
Jose Francisco Casado Fernandez:
Puede utilizar HistorySelectByPosition(), con su POSITION_ID, y luego puede encontrar la primera orden con ese POSITION_ID, y comprobar el Stop Loss de esta orden (HistoryOrderGetDouble(ticket, ORDER_SL). A mí me ha funcionado, pero
.el problema es cuando modificas ese Stop Loss después.
Y entonces, comprobar ORDER_POSITION_ID igual a DEAL_POSITION_ID,
entonces comprobar DEAL_ENTRY, si OUT, obtener HystoryDealGetDouble(t
icket,DEAL_PRICE).

Si DEAL_PRICE es igual a HistoryOrderGetDouble(ticket,ORDER_SL), entonces significa que la orden ha sido cerrada debido al stop loss.

Esta es mi opinión.

 
Alain Verleyen:

Ok entendido ahora, tienes razón.

Ok, y sabes por qué si modificas el Stop Loss después, la nueva orden generada para hacerlo, no muestra el mismo POSITION_ID???. Sería la solución perfecta para este asunto. ¿Es un bug? Gracias.
 
Roberto Jacobs:

Si DEAL_PRICE es igual a HistoryOrderGetDouble(ticket,ORDER_SL) , significa que la orden ha sido cerrada debido al stop loss.

¿Qué pasa con el deslizamiento?
 
Roberto Jacobs:
Y entonces, comprueba que ORDER_POSITION_ID es igual a DEAL_POSITION_ID,
entonces comprueba DEAL_ENTRY, si OUT, obtiene HystoryDealGetDouble
( ticket ,DEAL_PRICE).

Si DEAL_PRICE es igual a HistoryOrderGetDouble(ticket,ORDER_SL), entonces significa que la orden ha sido cerrada debido al stop loss.

Esta es mi opinión.

Sí, es lo que decía. Lo hice así, y funcionó, pero si modificas el Stop Loss inicial, genera una nueva orden SIN el mismo POSITION_ID. No sé por qué. Creo que es un error. Saludos,.
 
honest_knave:
¿Qué pasa con el deslizamiento?

No es necesario mirar el deslizamiento, porque la orden ha sido cerrada, y el precio de cierre está en HystoryDealGetDouble(ticket, DEAL_PRICE).
Si la orden no ha estado en el cierre, y usted hace una orden de cierre, entonces usted debe considerar la cantidad de deslizamiento, de modo que no requotes error .