O grande e terrível MT4 para sempre (ou como fazer uma transição estratégica) - página 12
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Seria ótimo contornar este ponto a nível de MT4Orders.
Hoje em dia, infelizmente, as reviravoltas de pedidos acontecem. Muito provavelmente devido a isso.
https://www.mql5.com/ru/forum/93352/page40#comment_13943845 it?
https://www.mql5.com/ru/forum/93352/page40#comment_13943845 it?
Infelizmente, o recuo também acontece com esta muleta.
Já não sei mais para que lado depurar.
Infelizmente, o recuo também acontece com esta muleta.
Já não sei mais para que lado depurar.
Aqui está a razão (não que não haja outras).
P.6 é o mais desagradável. Como contornar este bug MT5 - ainda não descobrimos.
Aqui está a razão (não que não haja outras).
P.6. é o mais desagradável. Como contornar este bug MT5 - ainda não descobrimos.
A verificação de pedidos "faltantes" funcionaria aqui. Mas isso não funcionaria.
Devo ter estragado alguma coisa.
Uma verificação de pedidos em falta funcionaria aqui. Não funciona.
Eu mesmo devo ter feito algo errado.
No ponto 7. "A ordem em falta aparece, mas ainda não há posição.
No ponto 7. O "desaparecido" é encontrado, mas a posição ainda está faltando.
Isso significa que o loop no MT4Orders::OrdersTotal() não verá nem a ordem nem a posição?
Pensei que este ponto estava resolvido: ou a ordem/posição está na lista, ou a ordem está "faltando". Como pode acontecer uma terceira coisa?
Isto significa que o loop MT4Orders::OrdersTotal() não verá nem ordem nem posição?
Em todos os pontos, exceto nos pontos 6 e 7, ele mostra que uma posição é visível.
Pensei que este ponto tinha acabado de ser resolvido: ou a ordem/posição está na lista, ou a ordem está "faltando". Como pode haver um terceiro?
Imagine que sua EA chega à posição 6 sem saber nada sobre o fato de que havia uma ordem. Nesse caso, não há maneira de ele saber que a situação corresponde à ordem em falta.
Imagine que sua EA chega ao ponto 6 sem saber nada sobre a existência de uma ordem. Nesse caso, não há maneira de ele saber que a situação corresponde à ordem em falta.
Não posso imaginar tal situação se forem usados limites a alguma distância do preço (não no spread).
Ele sempre terá tempo para ver a ordem definida na lista. E, posteriormente, a ordem ou se tornará "desaparecida", ou se tornará uma posição.
Admito que tal situação é possível se outra EA tiver feito um pedido pelo preço atual e começar a preencher imediatamente (ponto 6).
Mas isso ainda não explica porque a primeira EA deixou de ver sua ordem (com seu mágico) na lista de MT4Orders::OrdersTotal().
Foi surpreendentemente fácil reproduzir a situação em uma EA ao vivo - no momento em que uma das ordens foi executada, a EA perdeu de vista a outra também.
Mas quando se tenta construir um exemplo simples para a reprodução, tudo funciona bem. Parece que eu realmente fiz um bug em algum lugar no meio do meu código.
Aqui está a partir da documentação:
"a ordem em que estas transações chegam ao terminal não é garantida, portanto não se pode basear seu algoritmo de negociação em esperar que algumas transações comerciais cheguem depois que outras tenham chegado. " https://www.mql5.com/ru/docs/event_handlers/ontradetransaction
E, por experiência, TRADE_TRANSACTION_ORDER_DELETE, TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_HISTORY_ADD transactions can arrive in any order.
Portanto, temos situações em que ainda não há acordo e ordem na história, mas a ordem já existe. Ou vice versa, a ordem ainda está lá, mas o negócio já foi executado. Mas a situação em que a ordem está simultaneamente no ativo e na história dificilmente é possível.
Na verdade, esta é a razão pela qual nos recusamos a usar a classe CTrade- ela tem todas estas armadilhas.
A maneira de combater este problema é que cada EA mantenha uma lista de suas ordens e monitore seu estado. Incluindo os estados "não-standard" - "ordem enviada mas ainda não em condições de funcionamento" (aqui eles podem dobrar) ou "ordem apagada mas ainda não na história". Também ajuda a trabalhar no mesmo símbolo ao mesmo tempo em que se faz a rede.