Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Aqui estão as entradas de registro de uma posição fechada por um Take Profit acionado. Como isso pode ser detectado em OnTradeTransaction( const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)?
Nem o código de retorno do const MqlTradeResult& result (result.retcode) é definido (0 não é uma opção, TRADE_RETCODE_DONE = 10009) nem um dos IDs (ticket da transação, ticket do pedido, ID da solicitação) para encontrá-los sem fazer um looping a cada vez em todas as transações.
Este é o Print na linha #376 que imprime os sinalizadores relevantes(?):
E isso é o que posso ler no diário:
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
O terminal escreve lindamente "take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]"
Então, por que diabos não há um sinalizador como TRADE_TRANSACTION_TRIGGERED_PT e TRADE_TRANSACTION_TRIGGERED_SL?
E o código de retorno da solicitação não é sempre definido?
Denis, obrigado pelo artigo! Eu o li com interesse, mas ainda não me dei conta do que li. Também baixei seu Expert Advisor TradeProcessor e o executei em meu terminal, onde atualmente tenho uma posição aberta. Dei uma olhada nas impressões e imediatamente surgiram algumas perguntas, para as quais quero encontrar respostas por conta própria. Bem, se eu não conseguir fazer isso, terei que incomodá-lo. ))
Saudações, Vladimir.
Saudações, Vladimir.
Obrigado por sua opinião. De nada, Sr. Brooklin! ))
Obrigado por sua opinião. De nada, Sr. Brooklin! ))
Denis, desculpe, mas sem sua ajuda minha mente "explode". Aqui está o resultado de uma das passagens de seu EA (a propósito, um EA muito legal!!!):
O que não estou entendendo:
ENUM_DEAL_TYPE
Identificador
Descrição
DEAL_TYPE_BUY
Comprar
Pergunta - como, ao modificar uma ordem pendente SELL_STOP, o tipo de transação é determinado como BUY?????))
Atenciosamente, Vladimir.
E não há nenhuma transação. A colocação de uma ordem pendente e seu processamento não implicam em nenhuma transação. Tíquete de negociação = 0, tipo = 0, em que 0 é equivalente a DEAL_TYPE_BUY para a enumeração ENUM_DEAL_TYPE. Ou seja, na estrutura transMqlTradeTransaction , alguns campos são preenchidos e outros não. Os campos não preenchidos geralmente são anulados.
Mais detalhes: na Documentação sobre ordens pendentes.
O campo deal será preenchido para uma transação desse tipo:
TRADE_TRANSACTION_DEAL_*
Os campos a seguir são preenchidos na estrutura MqlTradeTransaction para transações comerciais relacionadas ao processamento de transações (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE e TRADE_TRANSACTION_DEAL_DELETE):
Apenas 3 tipos de transações pertencem aos tipos de "transação": TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE, TRADE_TRANSACTION_DEAL_DELETE.
E não há nenhuma transação. A colocação de uma ordem pendente não implica em nenhuma transação. Tíquete de negociação = 0, tipo = 0, em que 0 é equivalente a DEAL_TYPE_BUY para a enumeração ENUM_DEAL_TYPE. Ou seja, na estrutura transMqlTradeTransaction , alguns campos são preenchidos e outros não. Os campos não preenchidos geralmente são zerados.
Mais detalhes: na Documentação sobre ordens pendentes.
Ahhhh, é isso!!! Cara, isso quebrou minha cabeça! ))
Obrigado!!!
Abraços, Vladimir.