Discusión sobre el artículo "Recetas MQL5 - procesamiento del evento TradeTransaction" - página 2
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Aquí están las entradas de registro de una posición cerrada por un Take Profit disparado. ¿Cómo se puede detectar esto en OnTradeTransaction( const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)?
No se establece el código de retorno de const MqlTradeResult& result (result.retcode) (0 no es una opción, TRADE_RETCODE_DONE = 10009) ni uno de los ids (Deal ticket, Order ticket, Request ID ) para encontrarlos sin hacer un bucle cada vez a través de todos los deal.
Esta es la impresión en la línea #376 que imprime las banderas relevantes:
Y esto es lo que puedo leer en el diario:
10:04:40 take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40 deal #3 buy 0.01 EURUSD at 1.00171 done (based on order #3)
10:04:40 deal performed [#3 buy 0.01 EURUSD at 1.00171]
10:04:40 order performed buy 0.01 at 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40 373 New trade operation dTime1970.01.01 09:03:41
10:04:40 376 0 prc:trans.price=1.00171 tckt: 2 Tr.Type: TRADE_TRANSACTION_DEAL_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_STARTED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40 489 MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #3 DEAL_TYPE_BUY EURUSD 0.01 lot
10:04:40 376 1 prc:trans.price=1.00171 tckt: 2 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40 383 1 prc:trans.price=1.00171 tckt: 2 res.Ord:0 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdFill: ORDER_STATE_FILLED Tr.OrdType: ORDER_TYPE_BUY Tr.tckt:3 2 0 Res::0 0 0 0 0
10:04:40 408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
10:04:40 376 2 prc:trans.price=1.00171 tckt: 2 Tr.Type: TRADE_TRANSACTION_HISTORY_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40 408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
2022.09.26 14:08:33.755 disconnected
El terminal escribe tan bonito "take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]"
Entonces, ¿por qué diablos no hay una bandera como TRADE_TRANSACTION_TRIGGERED_PT y TRADE_TRANSACTION_TRIGGERED_SL?
¿Y es que el código de retorno de la solicitud siempre no se establece?
Denis, ¡gracias por el artículo! Lo he leído con interés, pero todavía no me he dado cuenta del todo de lo que he leído. También he descargado su Asesor Experto TradeProcessor y lo corrió en mi terminal, donde actualmente tengo una posición abierta. Miré las impresiones e inmediatamente aparecieron algunas preguntas, a las que quiero encontrar respuesta por mi cuenta. Bueno, si no puedo hacerlo, tendré que molestarte. ))
Saludos, Vladimir.
Saludos, Vladimir.
Gracias por su opinión. De nada, Sr. Brooklin. ))
Gracias por su opinión. ¡De nada, MrBrooklin! ))
Denis, lo siento, pero sin tu ayuda mi mente "explota". Aquí tienes el resultado de una de las pasadas de tu EA (por cierto, ¡¡¡un EA muy chulo!!!):
Lo que no entiendo:
ENUM_DEAL_TYPE
Identificador
Descripción
DEAL_TYPE_BUY
Compra
Pregunta - cómo al modificar una orden pendiente SELL_STOP el tipo de transacción se determina a BUY?????))
Saludos, Vladimir.
Y no hay ninguna transacción. La colocación de una orden pendiente y su procesamiento no implican ninguna transacción. Transacción = 0, tipo = 0, donde 0 equivale a DEAL_TYPE_BUY para la enumeración ENUM_DEAL_TYPE. Es decir, en la estructura transMqlTradeTransaction , algunos campos están rellenados y otros no. Los campos no rellenados se suelen anular.
Más detalles: en la Documentación sobre órdenes pendientes.
El campo deal se rellenará para una transacción de este tipo:
TRADE_TRANSACTION_DEAL_*
Los siguientes campos se rellenarán en la estructura MqlTradeTransaction para las transacciones comerciales relacionadas con el procesamiento de transacciones (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE y TRADE_TRANSACTION_DEAL_DELETE):
Sólo 3 tipos de transacciones pertenecen a los tipos "deal": TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE, TRADE_TRANSACTION_DEAL_DELETE.
Y no hay ninguna transacción. La colocación de una orden pendiente no implica ninguna transacción. Transacción = 0, tipo = 0, donde 0 equivale a DEAL_TYPE_BUY para la enumeración ENUM_DEAL_TYPE . Es decir, en la estructura transMqlTradeTransaction , algunos campos están rellenados y otros no. Los campos no rellenados se suelen poner a cero.
Más detalles: en la Documentación sobre órdenes pendientes.
¡¡¡Ahhhh, ya está!!! Tío, ¡me ha roto la cabeza! ))
¡¡¡Gracias!!!
Saludos, Vladimir.