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
OnTradeTransaction() é o RUNNER de um evento comercial. Não importa o que desencadeou o evento, o importante é que o evento ocorreu.
Aqui está um extrato da documentação:
OrderSend() / OrderSendAsync() são FUNÇÕES COMERCIAIS.
Para a OnTradeTransaction() não faz diferença qual função você usou para enviar a ordem OrderSend() ou OrderSendAsync().
Já o li tantas vezes antes de criar o tema ... Eu não direi uma palavra.
Mas, no entanto, minha conclusão é que é mais provável perder uma transação em uma pilha do que perder uma transação em um segundo, e talvez nem mesmo uma (segunda). Isso é exatamente o que estou tentando descobrir. Tentando obter sua opinião sobre isto. Qual é a probabilidade de se perder uma transação se ela for bastante rara e única?
Em termos de probabilidades, eu não sei.
Terei que confiar na única opinião de Michael, com base em sua própria experiência. Se ele não perdeu uma única transação em meio ano de uma pilha de pedidos, então vamos supor que um único pedido não será perdido.
Aos poucos estou pegando o jeito, tentando não quebrar a lógica, mas às vezes uma atrapalha a outra...
Teremos que confiar na opinião única de Michael, com base em sua própria experiência. Se ele não perdeu uma única transação em seis meses de uma pilha de pedidos, então vamos assumir que um único pedido não se perderá.
Estou lentamente dominando-a, tentando não quebrar a lógica, mas às vezes acontece que uma interfere com a outra...
Alexei, faça a si mesmo uma pergunta simples:
O que é melhor, cavar o histórico após cada comando, ou 1 vez, ou talvez nunca, verificar novamente o pedido (a OnTradeTransaction não foi acionada)?
A validação não é fácil de implementar (a propósito, meu exemplo tem erros), mas o princípio principal é que TODAS as ordens têm sua própria magia.
E mais uma coisa. Já disse que cada um é livre de seguir seu próprio caminho....
Alexey, faça a si mesmo uma pergunta simples:
É melhor cavar o histórico após cada comando ou verificar novamente o pedido (OnTradeTransaction não funcionou) uma vez ou nunca?
A validação não é fácil de implementar (a propósito, meu exemplo tem erros), mas o princípio principal é que TODAS as ordens têm sua própria magia.
E mais uma coisa. Já disse que cada um é livre de seguir seu próprio caminho....
Michael, foi a resposta simples a esta simples pergunta que me levou a toda esta discussão. E até agora não vou desistir. Mas ainda não consigo entender se a perda da transação é possível após o comando OrderSend() ou durante a ativação da ordem pendente, ou durante o fechamento da posição usando stop/stop.
De sua primeira resposta eu entendi que mesmo OrderSendAsync() você não perde a transação. Estou tentando entendê-lo para decidir se é necessário ou não se preocupar em verificar tais transações, bastante raras. Além disso, levando em conta o que eu destinei.
Pura e logicamente, se a OrderSend() não for encerrada até obter resposta, a transação não pode ser perdida. Mas a ativação de uma ordem pendente e o fechamento de uma posição não se encaixam em minha lógica. Se uma transação neste caso for acionada dentro do MT5, respectivamente, ela não será perdida, mas se através de um servidor... Eu não sei. (Mas suponho que a intuição diz que o servidor me envia uma resposta e ativa a OnTradeTransaction().
Rapazes, aqui está o problema:
Se eu abrir uma posição, a OnTradeTransaction lida apenas com TRADE_TRANSACTION_DEAL_ADD... Tudo está bem.
Se uma SellStop, por exemplo, for colocada, apenas TRADE_TRANSACTION_ORDER_ADD é acionada... Tudo também é normal.
Mas se eu definir uma posição e uma ordem pendente, TRADE_TRANSACTION_DEAL_ADD funciona e TRADE_TRANSACTION_ORDER_ADD funciona duas vezes
por que é assim?
Rapazes, aqui está o problema:
Se eu abrir uma posição, a OnTradeTransaction lida apenas com TRADE_TRANSACTION_DEAL_ADD... Tudo está bem.
Se uma SellStop, por exemplo, for colocada, apenas TRADE_TRANSACTION_ORDER_ADD é acionada... Tudo também é normal.
Mas se eu definir uma posição e uma ordem pendente, TRADE_TRANSACTION_DEAL_ADD funciona e TRADE_TRANSACTION_ORDER_ADD funciona duas vezes
por que é assim?
Você deve estar enganado em algum lugar. Deve haver pelo menos dois eventos em ambos os casos: TRADE_TRANSACTION_ORDER_ADD e TRADE_TRANSACTION_DEAL_ADD. Porque você não recebe TRADE_TRANSACTION_ORDER_ADD não é claro.
Tente comentar a troca e imprimir o registro completo de todos os eventos recebidos na OnTradeTransaction.
Você entendeu errado em algum lugar. Em ambos os casos, deve haver pelo menos dois eventos: TRADE_TRANSACTION_ORDER_ADD e TRADE_TRANSACTION_DEAL_ADD. Porque você não recebe TRADE_TRANSACTION_ORDER_ADD não é claro.
Tente comentar a troca e imprimir o registro completo de todos os eventos recebidos na OnTradeTransaction.
Sim, eu tentei. A impressão (EnumToString(tipo)) foi impressa antes do switch(tipo); ela foi impressa exatamente como eu descrevi.
Aqui estão as experiências repetidas.
Verifiquei seu código por minha conta. - Tudo funciona corretamente.
Opção sem enviaruma ordem de parada para acompanhamento:
2015.02.10 18:32:03.332 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_ADD
2015.02.10 18:32:03.331 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
Opção de enviar uma ordem de parada:
2015.02.10 18:35:59.633 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_UPDATE
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
Verifiquei seu código por minha conta. - Tudo funciona corretamente.
Variante sem enviar depoisuma ordem de parada:
Opção com o envio de uma ordem de parada:
s.e., o tempo para o ciclo completo foi agradavelmente surpreendido: estável de 60-70 msec. Bom trabalho para os desenvolvedores, eles fizeram um grande trabalho!Aparentemente, isto é a perda das transações... e, antes de mais nada (trecho da documentação)
E a ordem em que essas transações chegam ao terminal não é garantida
Vasily, isto é um testador ou uma demonstração? Eu tenho uma amostra do testador. Será que existe uma diferença entre a operação da OnTradeTransaction no testador e na conta? Vou verificar na ocasião.
ps; Acontece que após perder uma transação, ela aparece repentinamente na próxima ativação da OnTradeTransaction.
Aparentemente, isto é a perda das transações... e, antes de tudo, (trecho da documentação)
Vasily, isto é um testador ou uma demonstração? Eu tenho amostras do testador. Será que existe uma diferença entre a OnTradeTransaction acionando no testador e na conta? Vou verificar na ocasião.
ps; Acontece que após perder uma transação, ela aparece repentinamente quando a OnTradeTransaction é ativada na próxima vez.
Não, as transações não se perdem, elas simplesmente podem não vir em uma determinada seqüência.
Somente TRADE_TRANSACTION_REQUEST vem sempre em primeiro lugar, caso contrário, você não receberia um bilhete para o pedido.
Leia a documentação CARAVEGAMENTE.