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

 
Talvez apenas fazer alguns testes e as perguntas vão embora?
 
traveller00:
Talvez apenas fazer alguns testes e as perguntas desapareçam?

Talvez. Eu gostaria de ter mais tempo para fazer os testes eu mesmo :(

 
traveller00:
Talvez apenas fazer alguns testes e as perguntas desapareçam?

Os testes só mostram uma diferença na primeira vez que você começa.

 
Slava:

Símbolo(), _Entradas de símbolo são equivalentes a NULL (onde NULL é permitido ao invés do nome do símbolo).

Neste caso, não há verificação extra da existência do símbolo atual, da presença do símbolo atual no Market Watch e das propriedades de chamada desnecessárias do símbolo atual, uma vez que as propriedades do personagem atual estão em cache.

Ou seja, se um parâmetro de string normal for especificado em vez de Symbol(), _Symbol ou NULL, então verifica o programa completo e mais chamadas de propriedade

Pergunta:

   string symbol=_Symbol;
   SymbolInfoInteger(symbol,...)
   SymbolInfoInteger(NULL,...)

- comportamento das chamadas SymbolInfoXXX nestes dois casos, será que elas serão diferentes por mais do que um cheque?

symbol==_Symbol

?

 
traveller00:

A propósito, a partir dos novos registros de hoje da última versão de lançamento do MT5:

Eram 3 EAs pairando em 1 símbolo, cada um em seu próprio gráfico. E o pedido continua a cada tique. Tais picos são naturalmente pouco freqüentes, mas na verdade 1 pedido de novos carrapatos vindos do último carrapato foi executado 700 ms.

Estou monitorando há cerca de 12 horas, mas já posso ver os atrasos ultrapassando todos os limites.

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 8589203 mcs.

3 EAs, cada um em seu próprio gráfico, todos em 1 símbolo, estão solicitando carrapatos antigos do tick anterior via CopyTicksRange. E a defasagem é de quase 9 segundos. E parece que este não é o limite. O mais provável é que o tick store seja um recurso compartilhado ao qual o acesso é sincronizado, mas mesmo com uma sincronização muito horrível não deveria haver tais momentos.

Alguns diriam que se trata de uma falha única. Nessas 12 horas de monitoramento, infelizmente, houve mais de cem saídas de 1 segundo. E estas não mais parecem explosões pontuais. Parece que muitas vezes havia vários carrapatos entrando ao mesmo tempo, que é o que está causando estes picos.

Mesmo que fechemos os olhos para o fato de que 3 EAs lutaram por um recurso comum, vamos olhar para o outro monitoramento:

ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 1401285 mcs.

Havia apenas 1 Expert Advisor sobre o símbolo. E ainda um segundo e meio. Não foi o único, havia outros EAs em outros símbolos, mas não é multi-tarefa? Ou carrapatos para símbolos diferentes ainda podem se retardar um ao outro?

Esta é uma funcionalidade básica para EAs básicos. A plataforma é posicionada como uma plataforma de negociação algorítmica. Dito isto, a funcionalidade básica levanta fortes questões. Um grande pedido para voltar a olhar para ele. Tenho quase certeza de que há espaço para melhorias em algum lugar. Ou seria muito grato por poder receber os últimos carrapatos desde que a função foi chamada, como sugerido aqui

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

MT5 e Velocidade em Ação

fxsaber, 2021.03.01 07:28

Por favor, pense em tal característica.

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


O problema de obter NOVOS carrapatos sem saltos agora só é resolvido através de CopyTicks*. É um mecanismo muito pesado para esta tarefa generalizada. É como atirar em pássaros com um canhão.

Daí os freios, retenção de enormes caches, etc.

 

Minimizou o número de chamadas para SymbolInfoTick e CopyTicksRange:

  • SymbolInfoTick snapshot - não chamado mais de uma vez a cada 100µs.
  • CopyTicksRange para carrapatos frescos só é chamado se, de fato, um novo carrapato tiver chegado no Market Watch.


O terminal e a máquina (arquivo swap desativado) com esta carga.


Como resultado, foi possível reduzir significativamente o número de mensagens de atraso (menos chamadas foram feitas) das funções regulares.


Registrar por 50 minutos:

2021.03.05 19:31:45.429 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 154 mcs.
2021.03.05 19:32:58.939 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 161 mcs.
2021.03.05 19:33:01.583 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 19:36:01.682 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 143 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 234 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 913 mcs.
2021.03.05 19:39:08.716 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 139 mcs.
2021.03.05 19:39:30.994 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 315 mcs.
2021.03.05 19:39:32.858 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 114 mcs.
2021.03.05 19:40:41.437 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 19:42:26.104 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 116 mcs.
2021.03.05 19:42:28.849 ::SymbolInfoTick(_Symbol,Tick)] = 109 mcs.
2021.03.05 19:43:10.977 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 481 mcs.
2021.03.05 19:43:53.945 ::SymbolInfoTick(_Symbol,Tick)] = 130 mcs.
2021.03.05 19:49:20.352 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 19:51:31.242 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 19:51:44.986 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 107 mcs.
2021.03.05 19:52:05.590 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 219 mcs.
2021.03.05 19:53:56.013 ::SymbolInfoTick(_Symbol,Tick)] = 236 mcs.
2021.03.05 19:55:41.453 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 105 mcs.
2021.03.05 19:55:47.109 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 148 mcs.
2021.03.05 19:55:47.110 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 265 mcs.
2021.03.05 19:59:26.011 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 186 mcs.
2021.03.05 20:00:01.569 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 117 mcs.
2021.03.05 20:01:19.704 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 109 mcs.
2021.03.05 20:02:07.285 ::SymbolInfoTick(_Symbol,Tick)] = 177 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 198 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 202 mcs.
2021.03.05 20:04:40.170 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 364 mcs.
2021.03.05 20:04:45.905 ::SymbolInfoTick(_Symbol,Tick)] = 143 mcs.
2021.03.05 20:04:45.906 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 20:04:45.907 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 504 mcs.
2021.03.05 20:04:48.259 ::SymbolInfoTick(_Symbol,Tick)] = 104 mcs.
2021.03.05 20:04:54.727 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 104 mcs.
2021.03.05 20:05:39.642 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 20:07:40.189 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 20:09:21.844 ::SymbolInfoTick(_Symbol,Tick)] = 115 mcs.
2021.03.05 20:09:32.422 ::SymbolInfoTick(_Symbol,Tick)] = 107 mcs.
2021.03.05 20:10:02.423 ::SymbolInfoTick(_Symbol,Tick)] = 128 mcs.
2021.03.05 20:15:48.838 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 149 mcs.
2021.03.05 20:16:36.001 ::SymbolInfoTick(_Symbol,Tick)] = 105 mcs.
2021.03.05 20:17:51.499 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 480 mcs.
2021.03.05 20:17:51.638 ::SymbolInfoTick(_Symbol,Tick)] = 342 mcs.
2021.03.05 20:17:52.802 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 429 mcs.
2021.03.05 20:17:53.340 ::SymbolInfoTick(_Symbol,Tick)] = 142 mcs.
2021.03.05 20:19:21.512 ::SymbolInfoTick(_Symbol,Tick)] = 122 mcs.
2021.03.05 20:20:35.836 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 116 mcs.


Não parece muito ruim. Não houve transações comerciais. Que tal eles, vou ver.


ENTANTO, o fragmento destacado mostra que três EAs (caracteres diferentes) ficaram desfasados quase simultaneamente. Isto é, o atraso é universal para o Terminal.

 
Slava:

Símbolo(), _Entradas de símbolo são equivalentes a NULL (onde NULL é permitido ao invés do nome do símbolo).

Neste caso, não há verificação extra da existência do símbolo atual, da presença do símbolo atual no Market Watch e das propriedades de chamada desnecessárias do símbolo atual, pois as propriedades do nó atual estão em cache.

Ou seja, se você especificar um parâmetro de string simples em vez de Symbol(), _Symbol ou NULL, então há verificações para o programa completo e mais propriedades de solicitação

Por favor, explique novamente, porque as interpretações de suas palavras são diferentes das dos usuários do fórum.

 

Em Terminal com uma EA/chart/símbolo.


2021.03.05 23:02:02.860 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 189 mcs.
2021.03.05 23:02:24.152 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 339 mcs.
2021.03.05 23:02:53.540 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 915 mcs.
2021.03.05 23:05:35.325 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 223 mcs.
2021.03.05 23:05:41.398 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 245 mcs.
2021.03.05 23:05:44.585 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 376 mcs.
2021.03.05 23:06:35.210 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 173 mcs.
2021.03.05 23:07:38.298 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 290 mcs.
2021.03.05 23:08:50.342 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 23:14:58.216 ::SymbolInfoTick(_Symbol,Tick)] = 447 mcs.

Tal registro em 15 minutos. Afinal de contas, parece ser uma questão de janelas lentas. Neste caso, é.

2021.03.05 23:49:20.792 Terminal        MetaTrader 5 x64 build 2815 started for MetaQuotes Software Corp.
2021.03.05 23:49:20.792 Terminal        Windows Server 2019 build 17763, Intel Core i7-7700 K  @ 4.20 GHz, 17 / 31 Gb memory, 3698 / 3725 Gb disk, IE 11, RDP, UAC, GMT+2
 

Um exemplo claro dos freios que a Market Watch causa.

Veja os valores na coluna Processador (segundo da direita).

 
Ao atraso do Servidor é adicionado o atraso do Terminal.

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Indicadores: Ping

fxsaber, 2021.03.12 10:56

Acabei de me lembrar deste grande indicador.

É uma foto da máquina com zero ping. Acontece que a média de atraso interno do terminal é de ~2ms. Ele salta entre 0-9 ms.


Por exemplo, o servidor recebeu dois tiquetaques: primeiro um, depois o segundo após 10 ms. Assim, no Terminal o segundo tique pode ser recebido não em 10 ms após o primeiro, mas em 10-19 ms. Em média, são 12 ms depois.

Se você negocia a partir do mercado (marts de mercado ou ordens pendentes ao preço atual), será especialmente difícil de administrar. É difícil dizer se os Desenvolvedores serão capazes de melhorar alguma coisa aqui.

Olhando para a bolsa de Moscou, a situação lá é semelhante. De fato, negociando através do MT5 algo, você está quase garantido de estar no final da fila de execução, não tendo tempo para pegar o material bom, infelizmente.

Акцептирование SL/TP-ордеров
Акцептирование SL/TP-ордеров
  • 2020.11.24
  • www.mql5.com
В этой ветке пойдет речь об ордерах, которые создаются в результате срабатывания SL/TP-уровней открытых позиций...