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
Forum on trading, automated trading systems and testing trading strategies
Libraries: MT4Orders
fxsaber, 2021.06.02 10:09
At my request, the MetaQutoes has completely localized the latest update of the library into English. The latest build of the library is now available on the English page with comments in the source code translated into English.
Difference from the previous version that was available on the English-language page.
I recommend using the latest version along with the synchronization mechanism. Then all the problems that no other trading library can solve will be imperceptible.
For this mechanism to work, you need to download this library. All complex and effective checks of the correctness of the trading environment will be done automatically, without distracting the user when writing trading logic.
O MT4Orders (+ByPass) só funciona com HistorySelect(0, INT_MAX), de modo que não cria os problemas atuais com a adição de ordens apenas excluídas ao final da tabela de histórico (+sync).
Quebrado! Não recomendo a atualização do MT5. Quem entende, ajuda a explicar que o comportamento anterior do MT5 estava correto. Agora não está mais.
Quebrado! Não recomendo a atualização do MT5. Quem entende, ajuda a explicar que o comportamento anterior do MT5 estava correto. Agora não está mais.
É triste.
Eu esbocei um código para rastrear a inserção de ordens no histórico e atualizá-lo na classe TradesID somente no período "deslocado" + não mais do que 100 posições do histórico, ou seja, com pouco sangue.
Eu NÃO testei o código e, além disso, é claro que ele não é o ideal - apenas uma demonstração da ideia. (amarelo - o que foi alterado em relação ao original)
O rastreamento de exclusões/alterações de ordens é muito mais difícil, mas isso também não é resolvido por sua bíblia.
É claro que o ByPASS e o MT4HISTORY precisam de um algoritmo mais sofisticado para essa correção, mas nada complicado, ao que parece (ainda não os estudei).
Você também pode rastrear as transações TRADE_TRANSACTION_HISTORY_UPDATE e TRADE_TRANSACTION_HISTORY_DELETE como você escreveu:
https://www.mql5.com/ru/forum/366029/page2#comment_22442705
Se eles fornecerem o número do tíquete e os pedidos no histórico forem classificados por tíquete, a posição do pedido no histórico poderá ser facilmente rastreada por meio da matriz OrderTickets.
P.S. Como último recurso, você também pode adicionar o HashMap...
É triste.
Se eles não devolverem como estava, podemos criar uma muleta. Esbocei um código que permite rastrear a inserção da ordem no histórico e atualizá-la na classe TradesID somente no período "deslocado" + não mais que 100 posições do histórico, ou seja, com pouco sangue.
Eu NÃO testei o código, além disso, é claro que ele não é o ideal - apenas uma demonstração da ideia. (amarelo - o que foi alterado em relação ao seu original)
Se entendi corretamente a ideia, você está procurando a centena em que a mudança ocorreu. Mas eu não entendi como o novo tíquete está nessa centena depois. Especialmente se houver vários deles e eles estiverem em centenas diferentes.
O rastreamento de exclusões/alterações de pedidos é muito mais difícil, mas sua bíblia também não resolveu isso.
Não estou entendendo. O que exatamente não é rastreado? Sugiro parar no b2958 por enquanto.
Se for para editar o histórico retroativamente, não vale a pena. As soluções são criadas não para fins de nerdice, mas para negociação.
É claro que o ByPASS e o MT4HISTORY exigem um algoritmo mais sofisticado para essa correção, mas parece não ser nada complicado (ainda não os estudei).
O problema é que quanto mais funções regulares forem chamadas em cada passagem, maior será a probabilidade de defasagens. O EA começa a travar. Vários Expert Advisors - ainda pior. Quando há vários terminais, a situação é bastante ruim. Até mesmo a chegada do OnTradeTransaction fica mais lenta - por exemplo, o OrderSend começa a demorar várias vezes mais do que o ping. Além do fato de que a muleta implica uma depuração selvagem, ela também criará atrasos. Imagine que, durante a enumeração, o histórico é atualizado, etc. Haverá um grande número de bugs.
Afinal de contas, o principal é que tudo funcionou perfeitamente. Eles simplesmente o quebraram em um local uniforme e não fazem nenhum comentário.
ZЫ Para mim, é um mistério o fato de quase ninguém entender do que se trata.
ZЫ É um mistério para mim o fato de quase ninguém entender do que se trata.
Porque ninguém tentou implementar o trabalho com ordens no MT5 de forma a) fácil, b) correta e c) rápida. Isso inclui a mim.
Se eu entendi a ideia corretamente, você está procurando a centena em que a mudança ocorreu. Mas não entendo como o novo tíquete em si está localizado nessa centena. Especialmente se houver vários deles e eles estiverem em centenas diferentes.
Se houve apenas inserções sem exclusões, então o loop
procura o início da primeira centena em que as inserções ocorreram. Não é necessário pesquisar o tíquete em si, basta percorrer todas as ordens a partir dessa centena e das próximas (mais recentes) e adicioná-las ao hashmap. Isso é feito como de costume em um loop while(this.LastTotalOrders < Total). Quase sempre serão 1-2 últimas centenas.
Talvez seja melhor reduzir a etapa - não 100, mas 40 ou 20.
Caso o histórico mude durante o for - algo é inserido ANTES da centena encontrada, você pode colocá-lo no loop:
Mas isso será muito raro.
Se houver apenas inserções sem exclusões, então o ciclo
procura o início da primeira centena em que as inserções ocorreram. Você não precisa pesquisar o tíquete em si, basta percorrer todos os pedidos a partir dessa centena e das próximas (mais recentes) e adicioná-las ao hashmap. Isso é feito como de costume no loop while(this.LastTotalOrders < Total). Quase sempre serão 1-2 últimas centenas.
Ou seja, o fato de adicionar repetidamente o mesmo tíquete ao hashmap não altera o hashmap?
Já tive ordens que atingiram a oitava centena. Na negociação ativa, esse é um fenômeno comum com novas construções. Nesse caso, é necessário fazer o hashmap de várias centenas de ordens.
Ou seja, usar o fato de que adicionar o mesmo tíquete ao hashmap repetidamente não alterará o hashmap?
Sim, agora mesmo notei que, se você adicionar um tíquete OrdersID.Add(PositionID, Ticket) repetidamente, em OrdersID.ValuesID[] esse tíquete será revertido. Ou seja, o hashmap ficará inchado.
Precisamos fazer uma verificação de alguma forma. Ou usar HashSet em vez de uma estrutura de matriz para VALUESID. Ou algo semelhante.