Espero não ser o único que está reproduzindo. É claro, o atraso não é tão grande quanto mostrado anteriormente. Mas será possível chegar ao fundo das causas muito mais rapidamente aqui.
A ZZY TimeCurrentMsc não é inserida na MQL5 por alguma razão, apesar de repetidas solicitações.
Desistiu de uma função tão cara em lugares críticos.
Este é um inconveniente significativo. Porque o modelo de evento MQL é incompleto - não há evento zero, ou seja, o evento que é chamado quando não há outros eventos na fila. Ele pode ser emulado através de um evento personalizado. Mas com este inconveniente em mente, o modelo baseado em eventos não tem sentido para aqueles que estão interessados em velocidade.
Esta é uma falha significativa. Porque o modelo de evento MQL é incompleto - não há evento nulo, ou seja, um evento que é chamado quando não há outros eventos na fila. Ele pode ser emulado através de um evento personalizado. Mas com este inconveniente em mente, o modelo baseado em eventos não faz sentido para aqueles que estão interessados em velocidade
OnTimer permite que você faça chamadas de fundo a até 16 ms.
Renat Fatkhullin: O OnTimer permite fazer chamadas de fundo com freqüência de até 16 ms.
Correto, ou seja, perdemos pelo menos16ms para nada (podemos voltar no mínimo).E não poderíamos perdê-los se houvesse um evento zero grátis ou eventos personalizados grátis. E agora o modelo do evento no caso abaixo funciona de forma limitada:
Você está completamente fora do circuito. Digamos que você precisa abrir duas posições na OnTick. O primeiro OrderSend é de alguns milissegundos. Depois disso, você tem que fazer um instantâneo. E então o segundo OrderSend deve ser chamado.
Somente o OnTick pode ser executado por centenas de milissegundos. E você sugere fotografar um pouco do OnTimer.
E além disso, o OnTimer não nos permite ter certeza de que recebemos um evento nulo porque parece ter uma prioridade maior do que outros manipuladores, que é provavelmente o principal contra-argumento.
Renat Fatkhullin: Eu não estava sugerindo um instantâneo, estava respondendo uma pergunta direta sobre o temporizador de milissegundos.
Ela está lá, embora no testador atual ela ainda seja acionada com uma freqüência de 1 segundo. No novo testador que estamos escrevendo, vamos tentar mudar isso.
Muitas vezes uso o fato de que o Testador tem exatamente um timer de um milissegundo, não um segundo timer. Comprovação.
// Демонстрация корректной работы миллисекундного таймера в Тестере.#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
voidOnTick()
{
staticbool FirstRun = true;
if (FirstRun)
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick) && Tick.bid && Tick.ask)
FirstRun = !EventSetMillisecondTimer(29); // 29 мс таймер.
}
}
voidOnTimer()
{
staticint Count = 0;
if (Count < 10)
{
if ((bool)((++Count) & 1)) // ПопеременноOrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0); // Открываем позициюelseif (OrderSelect(0, SELECT_BY_POS))
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); // Закрываем позицию
}
}
voidOnDeinit( constint )
{
// Распечатали историю в конце бэктеста.for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
OrderPrint();
}
A impressão e o alerta não são assíncronos?
Eu queria tornar estas funções assíncronas. Tentei uma implementação através do ChartEvent - funciona. Mas é muito lento. Eu tinha desenterrado isto.
Desistiu de uma função tão cara em lugares críticos.
Sobre o tema Alerta.
Até agora, podemos dizer com certeza que o Alerta em lugares críticos não é possível. A assíncronia é necessária.
Reproduziu os freios SymbolInfoTick. E sem teste de estresse. A necessidade prática o faz escrever dessa maneira.
Siga estas instruções para uma rápida repetição.
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Ordem SíncronaEnviar relatórios de execução bem sucedida mais rapidamente do que ping para o servidor comercial
fxsaber, 2020.09.30 20:36
Em uma máquina rápida, o resultado com 30 caracteres em Market Watch.
Espero não ser o único que está reproduzindo. É claro, o atraso não é tão grande quanto mostrado anteriormente. Mas será possível chegar ao fundo das causas muito mais rapidamente aqui.
A ZZY TimeCurrentMsc não é inserida na MQL5 por alguma razão, apesar de repetidas solicitações.
Desistiu de uma função tão cara em lugares críticos.
Este é um inconveniente significativo. Porque o modelo de evento MQL é incompleto - não há evento zero, ou seja, o evento que é chamado quando não há outros eventos na fila. Ele pode ser emulado através de um evento personalizado. Mas com este inconveniente em mente, o modelo baseado em eventos não tem sentido para aqueles que estão interessados em velocidade.
EventoChartCustom é caro.
Que tal semChartFirst()?
Que tal sem ChartFirst()?
É mais caro enviar para a ficha de outra pessoa do que para a sua própria ficha.
Esta é uma falha significativa. Porque o modelo de evento MQL é incompleto - não há evento nulo, ou seja, um evento que é chamado quando não há outros eventos na fila. Ele pode ser emulado através de um evento personalizado. Mas com este inconveniente em mente, o modelo baseado em eventos não faz sentido para aqueles que estão interessados em velocidade
O OnTimer permite fazer chamadas de fundo com freqüência de até 16 ms.
Correto, ou seja, perdemos pelo menos16ms para nada (podemos voltar no mínimo).E não poderíamos perdê-los se houvesse um evento zero grátis ou eventos personalizados grátis. E agora o modelo do evento no caso abaixo funciona de forma limitada:
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
MT5 e velocidade em ação
fxsaber, 2020.10.06 01:27
Você está completamente fora do circuito. Digamos que você precisa abrir duas posições na OnTick. O primeiro OrderSend é de alguns milissegundos. Depois disso, você tem que fazer um instantâneo. E então o segundo OrderSend deve ser chamado.
Somente o OnTick pode ser executado por centenas de milissegundos. E você sugere fotografar um pouco do OnTimer.
Sobre o tema Alerta.
Por enquanto, é seguro dizer que o Alerta não pode ser usado em lugares críticos. A assíncronia é necessária.
Alerta com uma impressão, você pode tentar substituí-la por uma escrita rápida em algum lugar.
Vem-me à memória um quadrado nativo
Eu não estava sugerindo um instantâneo, estava respondendo uma pergunta direta sobre o temporizador de milissegundos.
Muitas vezes uso o fato de que o Testador tem exatamente um timer de um milissegundo, não um segundo timer. Comprovação.
Resultado.
Há exatamente 29 ms entre o tempo de abertura e fechamento da posição.