MT5 e velocidade em ação - página 28

 
fxsaber:
Adicionar uma ordem/comércio ao histórico comercial faz com que o cache HistorySelect seja reconstruído completamente, não parcialmente. Daí os atrasos no acionamento dos pedidos.

b2595 - corrigido, Ótimo!

Verifiquei a história errada, ainda não a consertei.

 

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

MT5 e Velocidade em Ação

fxsaber, 2020.09.08 19:46

2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.

b2596 se tornou mais rápido, ao que parece.

2020.09.11 05:06:17.854 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:18.853 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:19.875 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:20.871 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
 
b2605 - sem mais alertas. Um grande trabalho feito, obrigado!
MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2020.09.07
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 

Você pode me dizer o que fazer para evitar este tipo de coisa ao negociar?

2020.09.15 22:17:04.633 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 13 ms.
2020.09.15 22:17:04.638 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 18 ms.
2020.09.15 22:17:04.640 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 20 ms.
 
Resultado da execução deste roteiro em terminal ao vivo.
2020.09.15 22:26:41.788 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 484: OrderSelect(0)] = 1 ms.
2020.09.15 22:26:48.322 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 489: PositionsTotal()] = 2 ms.
2020.09.15 22:27:07.661 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:27:47.228 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 483: OrdersTotal()] = 2 ms.
2020.09.15 22:27:53.039 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 483: OrdersTotal()] = 9 ms.
2020.09.15 22:28:13.858 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:28:21.058 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 484: OrderSelect(0)] = 8 ms.
2020.09.15 22:28:47.813 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 489: PositionsTotal()] = 4 ms.
2020.09.15 22:28:51.482 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 505: AccountInfoInteger(ACCOUNT_TRADE_EXPERT)] = 4 ms.
2020.09.15 22:29:09.053 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:29:09.353 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 506: AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)] = 1 ms.
2020.09.15 22:29:28.814 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 457: HistorySelect(Tick.time,INT_MAX)] = 2 ms.

A última linha é normal.


Os atrasos podem ser afetados por EAs que funcionam em paralelo? Sem indicadores.


SZY Profiling em terminal vazio.

SymbolInfoTick é uma função cara.

 
fxsaber:

Os atrasos podem ser afetados por EAs que funcionam em paralelo? Não há indicadores.

Eu lancei um terminal vazio em paralelo e o experimentei. Eu não vi a mesma coisa.

Configuração.
2020.09.15 20:35:42.481 Terminal        Windows 10 build 19042, Intel Core i7-2700 K  @ 3.50 GHz, 6 / 15 Gb memory, 20 / 29 Gb disk, IE 11, Admin, GMT+3

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

MT5 e Velocidade em Ação

fxsaber, 2020.09.01 21:59

Win10 instalado, LatencyMon mostra que tudo está bem.

 
Em geral, devido ao fato de que quase todas as funções regulares podem causar frenagem, o Expert Advisor de batalha executa cada OnTick por várias dezenas de milissegundos. Esta quantidade é consumida pela soma das chamadas para Order*+SymbolInfoTick+Position*, etc. Não há cálculos matemáticos. Você precisa de instantâneos gratuitos. Sem eles, o HDI no MT5 não funciona.
 
fxsaber:
De qualquer forma, devido ao fato de que quase todas as funções regulares podem causar um abrandamento, o Expert Advisor de batalha executa cada OnTick por várias dezenas de milissegundos. A soma das chamadas Order*+SymbolInfoTick+Position*, etc. come tanto assim. Não há cálculos matemáticos. Você precisa de instantâneos gratuitos. Sem eles, o HDI no MT5 não funciona.

Algo está errado com a abordagem... Aparentemente, as funções OnTrade são necessárias em vez de escanear o estado a partir do zero em cada tick.

 
Andrey Khatimlianskii:

Algo está errado com a abordagem... Aparentemente, as funções OnTrade são necessárias, em vez de digitalizar o estado a partir do zero em cada tick.

O paradigma OOP assume que cada sub-TC escaneia o ambiente comercial. No entanto, se você realmente quiser, pode quebrar um pouco a independência dos objetos do OOP.

Por exemplo, faça um instantâneo completo logo no início da OnTick. E deve ser repetido somente após a chamada das funções sincrônicas - OrderSend e CopyTicks.

Quanto à OnTrade*, a conexão quebra o esquema quando os instantâneos são feitos somente nas funções OnTrade-funções. Caso contrário, é claro, haveria uma grande economia.

 
fxsaber:

O paradigma OOP assume que cada sub-OS escaneia o ambiente comercial. Entretanto, se realmente se quiser, pode-se quebrar um pouco a independência dos objetos do OOP.

Por exemplo, faça um instantâneo completo logo no início da OnTick. E seria repetido somente após a chamada das funções sincrônicas - OrderSend e CopyTicks.

É claro que o objeto de instantâneo deve ser um só.


fxsaber:

Quanto à OnTrade*, o link quebra o esquema quando os instantâneos são feitos somente em funções OnTrade. Caso contrário, é claro, haveria uma grande economia.

Detectar uma quebra de conexão e forçar a atualização do instantâneo no próximo tick, e depois voltar ao modo econômico?

Razão: