Como trabalhar corretamente em MT5 com OrderSend - página 6

 
Alexey Viktorov:

A primeira EA percebe que, após seu OrderSend, a história ainda não está sincronizada. Ele está apenas aguardando o evento de sincronização.

Mas como o segundo Expert Advisor entende que a história está sincronizada ou ainda não está sincronizada?

 
fxsaber:

A primeira EA percebe que, após seu OrderSend, a história ainda não está sincronizada. Ele está apenas aguardando o evento de sincronização.

Mas como o segundo Expert Advisor entende que a história está sincronizada ou ainda não está sincronizada?

Esqueça a história. Tente estudar o comportamento da função OnTradeTransaction().

O primeiro Expert Advisor colocou uma posição e este evento é tratado na OnTradeTransaction onde a ordem errada é ativada... Este evento também é tratado na OnTradeTransaction.

O segundo Consultor Especialista também peneira ordens, posições e negócios que não são seus próprios.

Eu tenho 2 EAs trabalhando em contas reais. Em um deles, o mágico de posição atribui um bilhete para a posição à qual ele deve ser afixado. E você mesmo entende que eles não são dois mágicos diferentes...

Eu acho que seu nome é Victor? Comece a definir duas posições com feitios diferentes no debug e trace suas estruturas na OnTradeTransaction.

 
Alexey Viktorov:

Esqueça a história. Tente estudar o comportamento da função OnTradeTransaction().

O primeiro Expert Advisor colocou uma posição, a OnTradeTransaction trata deste evento, "não é deles" são peneirados lá fora, o pedido é ativado... A OnTradeTransaction também lida com este evento.

O segundo Consultor Especialista também peneira ordens, posições e negócios que não são seus próprios.

Eu tenho 2 EAs trabalhando em contas reais. Em um deles, o mágico de posição atribui um bilhete para a posição à qual ele deve ser afixado. E você mesmo entende que eles não são dois mágicos diferentes...

Eu acho que seu nome é Victor? Comece a definir duas posições com feitios diferentes no debug e trace suas estruturas na OnTradeTransaction.

Se você olhar cuidadosamente para meus registros, você pode ver

que o bilhete é recebido mais rapidamente do que a OnTradeTransaction é acionada, portanto

o bilhete de pedido será suficiente.

Embora, naturalmente, (neste caso) seja melhor usar magik.

E (melhor ainda) usar OrderSendAsync - não há erros, nem no FOREX, nem no FORTS.

 
prostotrader:

Se você olhar com atenção meus registros, você pode ver,

que o bilhete é recebido mais rapidamente do que a OnTradeTransaction, portanto

o bilhete de pedido será suficiente.

Embora, é claro (neste caso) seria melhor usar o Mágico.

E (por enquanto) é melhor usar OrderSendAsync - não há erros, nem no FOREX, nem no FORTS.

Talvez, talvez seja assim. Mas e se a ordem pendente for ativada? Devemos analisar a história? Outro problema com a velocidade de sincronização do ambiente?

Em resumo, é um jogo de amador. O principal é fazer com que funcione, não demorar muito e evitar...

 
Alexey Viktorov:

Esqueça a história. Tente estudar o comportamento da OnTradeTransaction()

Como funciona o segundo durante uma história não sincronizada?

Este problema não afeta apenas o MT5, mas também quadruplica.

 
fxsaber:

Como funciona o segundo durante uma história não sincronizada?

Este problema não só afeta o MT5, mas também quadruplica.

Estou ficando ainda mais certo de que seu nome é Victor. Não vou dizer a ninguém seu apelido passado.

Você dominou a programação a um nível acima da média em pouco tempo, na minha opinião, mesmo acima da média. Mas é muito difícil tirá-lo de sua posição equivocada. E agora que seu nível de conhecimento de programação é superior ao meu, eu nem vou tentar.

Esqueça a história, veja as estruturas da função OnTradeTransaction.

Tente explicar em palavras, como você determina em mql5 que uma ordem pendente é ativada?

 
Alexey Viktorov:

Estou ficando ainda mais certo de que seu nome é Victor. Eu não direi a ninguém seu antigo apelido.

Você dominou a programação em pouco tempo...

Na verdade, é outra reencarnação da hrenfx. Decidiu vir de uma nova maneira.
 
prostotrader:

Se você olhar com atenção meus registros, você pode ver,

que o bilhete é recebido mais rapidamente do que a OnTradeTransaction, portanto

o bilhete de pedido será suficiente.

Embora, é claro (neste caso) seria melhor usar o Mágico.

E (por enquanto) é melhor usar OrderSendAsync - não há erros, nem no FOREX, nem no FORTS.

E qual é a vantagem da OrderSendAsync()? Não espera por uma resposta em Resultados. Isso significa que tem que ser pego mais tarde. Não está claro qual é a vantagem.
 
prostotrader:

OrderSend() é uma função absolutamente sincronizada - se um bilhete é recebido, tudo é executado.

Abaixo está um exemplo

Adicionados, e aqui estão os logs

https://www.mql5.com/ru/forum/38456/page85#comment_2888263

Obrigado!
 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Como posso conhecer minha comissão sem abrir uma posição sobre um símbolo?

fxsaber, 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

Acho que este exemplo é ilustrativo.

Se você não dorme, muitas vezes você tem uma situação em que a história não teve tempo de se atualizar após OrderClose e OrderCommission retorna um valor como se OrderClose não tivesse sido feito.

Note que este é um roteiro e não pode haver eventos. A única saída é um sono idiota.

Se você reescrever este roteiro com SB, nada vai mudar.