Cómo comprobar si una orden ha sido cerrada por stop loss

 

Estoy escribiendo un EA, modificando mi EA escrito para MT4. Abro una orden usando OrderSend.

Simplemente si necesito entender (perhasps del Historial), si la orden enviada (por cierto.... tengo que comprobar Orden, Operaciones o Posición?), se ha cerrado porque ha alcanzado el StopLoss.
He mirado en foros, pero no he encontrado lo que necesito....

Usando HistoryOrderGetDouble con el parámetroENUM_ORDER_PROPERTY_DOUBLE,

ORDER_PRICE_CURRENT

da sólo el precio actual del símbolo de la orden

que no se puede comparar conORDER_SL. Supongo que ORDER_PRICE_CURRENT es sólo el precio actual del símbolo y no el precio de cierre de la orden .

Gracias a todos por su apoyo.

EDITAR :

Este tema es ahora en su mayoría obsoletos debido a las nuevas posibilidades ofrecidas por MT5 desde build 1640.

Ver los últimos mensajes del tema para algunos ejemplos.

 

Ver este tema, probablemente un poco confuso, pero usted puede encontrar la idea.

El sistema de comercio MT5 es muy diferente de MT4, por lo que tiene que cambiar su forma de pensar.

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
 
frankge973:

Estoy escribiendo un EA, modificando mi EA escrito para MT4. Abro una orden usando OrderSend.

Simplemente si necesito entender (perhasps del Historial), si la orden enviada (por cierto.... tengo que comprobar Orden, Operaciones o Posición?), se ha cerrado porque ha llegado al StopLoss.
He comprobado en los foros, pero no he encontrado lo que necesito....

Usando HistoryOrderGetDouble con el parámetroENUM_ORDER_PROPERTY_DOUBLE,

ORDER_PRICE_CURRENT

da sólo el precio actual del símbolo de la orden

que no se puede comparar conORDER_SL. Supongo que ORDER_PRICE_CURRENT es sólo el precio actual del símbolo y no el precio de cierre de la orden .

Gracias a todos por su apoyo.

¿Es esto?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
 
Jose Miguel Soriano:

¿Es esto?

La pregunta es sobre mql5, tu código es mql4.

Elcomentario de la orden no es una forma fiable de codificar.

 
Alain Verleyen:

La pregunta es sobre mql5, tu código es mql4.

Elcomentario de la orden no es una forma fiable de codificar.

Lo siento por necro, pero esto es bastante interesante en mi opinión.

Estoy haciendo la transición de mql4 a mql5, y me parece que los cambios en los sistemas de comercio y la historia bastante difícil.

Para saber si una operación en el libro de historia se cerró por stop-loss, take-profit, o de otra manera:

  • en MT4 se podía comparar OrderStopLoss(), OrderTakeProfit() y OrderClosePrice(), o simplemente comprobar OrderComment().
  • en MT5 la única forma posible me parece comprobar el comentario de una operación: HistoryDealGetString(tk, DEAL_COMMENT)
Tanto MT4 como MT5 cuando una orden se cierra por stop-loss o take-profit escriben [SL price] o [TP price] en el comentario (de diferentes maneras.. pero aun así).

He leído el artículo: https://www.mql5.com/en/forum/11996

Es interesante, pero si lo he entendido bien, se trata de identificar los cambios en las operaciones basándose en el manejo de eventos, sobre la marcha.

Así que debe haber un programa escuchando (como un asesor experto que se ejecuta en un gráfico) o de lo contrario no se detecta nada.

En mi opinión, la detección de la razón del cierre de la operación debe hacerse en el libro de operaciones del historial porque es (o debería ser) la forma más segura de saber lo que ha pasado, ya que está escrito en algún sitio y no se coge del aire.

¿Es mi análisis erróneo? ¿Qué opinas?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
 
Marco: Tanto MT4 como MT5 cuando una orden se cierra por stop-loss o take-profit escriben [precio SL] o [precio TP] en el comentario (de diferentes maneras.. pero aun así).
No, no lo hacen. Eso lo hace tu broker.
No es una buena idea, los corredores pueden cambiar los comentarios, incluso la sustitución completa.
 
whroeder1:
No, no lo hacen. Ese es su corredor.

Ok, tanto los brokers de MT4 como los de MT5 ponen esa cadena en el comentario.. al menos los pocos que he probado.

Y estoy de acuerdo, esto no es una buena idea, ya que el comentario puede estar sujeto a cambios por la mano del broker.

Pero no veo como se podría hacer de otra manera, ya que no encuentro otros rastros en el libro de historial de operaciones.

¿Hay una mejor manera de lograr este objetivo?

 

Me puse en contacto con el servicio de atención al cliente hace 2 años (en relación con MT4).

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

y me respondieron

Se hace automáticamente con cada broker. Y también el broker puede cambiar este valor por sí mismo.

Así que lo hace el sistema, no el broker. Sin embargo, no es útil que el corredor pueda cambiarlo.

Eso sí, no he notado ninguna ocasión en la que el broker haya cambiado el comentario de la orden.

Normalmente, en mi código, es más importante saber si una operación se ha cerrado con beneficios o con pérdidas. Cuando se utiliza un trailing stop una operación puede golpear el SL, pero todavía estar en beneficio.

 
Keith Watford:

Me puse en contacto con el servicio de atención al cliente hace 2 años (en relación con MT4).

y me respondieron

así que lo hace el sistema, no el broker. Sin embargo, no es útil si el corredor puede entonces cambiarlo.

Eso sí, no he notado ninguna ocasión en la que el broker haya cambiado el comentario de la orden.

Normalmente, en mi código, es más importante saber si una operación se ha cerrado con beneficios o con pérdidas. Cuando se utiliza un trailing stop una operación puede golpear el SL, pero todavía estar en beneficio.

Gracias Keith, eso es lo que he esperado, ya que no puedo encontrar una mejor solución.

 
honest_knave:
Creo que ambos carteles están convirtiendo MQL4 en MQL5

De todos modos, sólo compare el precio de cierre con el precio de stoploss.

Nota: En una cuenta real (especialmente ECN), probablemente el precio de activación tiene una brecha entre el precio de stoploss preestablecido, así que use "<=" o ">=".

 
Xiangdong Guo:

De todos modos, sólo compare el precio de cierre con el precio de stoploss.

Nota: En una cuenta real (especialmente ECN), probablemente el precio de activación tiene una brecha entre el precio de stoploss preestablecido, así que use "<=" o ">=".

No puede comparar el precio de cierre con el precio de stop loss. El deslizamiento significa que podría cerrar más alto o más bajo que el stop loss.

Así que "<=" o ">=" no es útil.

Razón de la queja: