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

 

Não sei se estava aqui ou não.

Realmente precisam de árvores de caixa e hashmaps. Para multivolume, o hashmap do software é muito lento para testes adicionais.

E C++17 :)

 

Experimente o beta build 2577, por favor.

Melhoramos com a amostragem da história e continuaremos a revisá-la drasticamente.

 
Renat Fatkhullin:

Experimente o beta build 2577, por favor.

Melhorado com a amostragem de histórias e continuará a ser redesenhado dramaticamente.

Parece ter piorado:

2020.08.19 03:41:43.173         Time[MT4Orders.mqh 434: ::HistorySelect(this.LastTime,D'31.12.3000 23:59:59')] = 11 ms.
2020.08.19 03:41:43.174         Time[MT4Orders.mqh 622: this.RefreshHistory()] = 12 ms.

Não existiam tais números no dia 2573 do dia anterior.

 
Andrey Pogoreltsev:

Não sei se estava aqui ou não.

Realmente precisam de árvores de caixa e hashmaps. Para multivolume, o hashmap do software é muito lento para testes adicionais.

E C++17 :)

O hashmap fornecido é o mais rápido de todas as implementações, eu verifiquei. Há duas outras variantes no CB e há um artigo sobre uma delas, elas são uma ordem de magnitude mais lenta. E de que tipo de hashmap você precisa,não de software? Você não quer um hashmap de hardware na FPGA? )) Que tal, Elon Musk!

O que há de errado com as vantagens? A MQL5 não suporta mais o carregamento de DLL de 64 bits? Escreva imediatamente para Renate sobre este ultraje! Eu tenho até C++ 20 apoiado! Eu só tenho que aprender ))

------------------

Vista prévia do Microsoft Visual Studio Enterprise 2019

Versão 16.7.0 Pré-visualização 4.0

Versão instalada: Enterprise

Microsoft Visual C++ 2019

 
Andrey Khatimlianskii:

Parece ter piorado:

Não existiam tais números no dia 2573 do dia anterior.

Parece ter sido o primeiro pedido frio. Não houve uma única impressão desde então.

 
Renat Fatkhullin:

Experimente o beta build 2577, por favor.

Melhoramos com a amostragem da história e continuaremos a revisá-la drasticamente.

2020.08.19 09:30:06.512 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 17: CopyTicks(Symb,Ticks,COPY_TICKS_ALL,0,1)] = 1 ms.
2020.08.19 09:30:08.035 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 4 ms.
2020.08.19 09:30:08.038 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 13: SymbolInfoTick(Symb,Tick)] = 7 ms.
2020.08.19 09:30:08.042 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 13: SymbolInfoTick(Symb,Tick)] = 10 ms.
2020.08.19 09:30:08.044 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 74: SymbolsTotal(true)] = 13 ms.
2020.08.19 09:30:08.046 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 39: SymbolInfoDouble(Symb,SYMBOL_ASK)] = 4 ms.
2020.08.19 09:30:08.046 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 7 ms.
2020.08.19 09:30:08.047 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 75: SymbolName(0,true)] = 3 ms.
2020.08.19 09:30:08.048 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 2 ms.
2020.08.19 09:30:08.052 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 13: SymbolInfoTick(Symb,Tick)] = 2 ms.
2020.08.19 09:30:08.053 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 41: SymbolInfoDouble(Symb,SYMBOL_POINT)] = 5 ms.
2020.08.19 09:30:08.055 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 3 ms.
2020.08.19 09:30:08.060 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 42: SymbolInfoInteger(Symb,SYMBOL_DIGITS)] = 5 ms.
2020.08.19 09:30:08.071 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 25 ms.
2020.08.19 09:30:24.489 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 74: SymbolsTotal(true)] = 1 ms.
2020.08.19 09:30:25.857 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:30:26.092 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:30:26.119 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:30:29.279 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 17: CopyTicks(Symb,Ticks,COPY_TICKS_ALL,0,1)] = 1 ms.
2020.08.19 09:30:31.931 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 42: SymbolInfoInteger(Symb,SYMBOL_DIGITS)] = 2 ms.
2020.08.19 09:30:31.931 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 1 ms.
2020.08.19 09:30:33.402 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 34: HistoryOrderSelect(0)] = 7 ms.
2020.08.19 09:30:35.686 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 74: SymbolsTotal(true)] = 2 ms.
2020.08.19 09:30:37.810 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 39: SymbolInfoDouble(Symb,SYMBOL_ASK)] = 1 ms.
2020.08.19 09:30:52.415 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 3 ms.
2020.08.19 09:31:10.903 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:31:11.414 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 5 ms.
2020.08.19 09:31:11.414 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 39: SymbolInfoDouble(Symb,SYMBOL_ASK)] = 9 ms.
2020.08.19 09:31:32.694 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 42: SymbolInfoInteger(Symb,SYMBOL_DIGITS)] = 2 ms.
2020.08.19 09:31:51.245 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:31:53.989 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 17: CopyTicks(Symb,Ticks,COPY_TICKS_ALL,0,1)] = 2 ms.
2020.08.19 09:32:11.871 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:32:20.310 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 42: SymbolInfoInteger(Symb,SYMBOL_DIGITS)] = 3 ms.
2020.08.19 09:32:47.513 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 3 ms.
2020.08.19 09:32:49.367 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:32:56.358 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:33:05.424 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 75: SymbolName(0,true)] = 2 ms.
2020.08.19 09:33:16.537 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 5 ms.
2020.08.19 09:33:16.551 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 13 ms.
2020.08.19 09:33:47.303 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 7 ms.
2020.08.19 09:33:50.587 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 2 ms.
2020.08.19 09:33:56.181 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 41: SymbolInfoDouble(Symb,SYMBOL_POINT)] = 1 ms.
2020.08.19 09:33:59.244 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 74: SymbolsTotal(true)] = 1 ms.
2020.08.19 09:34:03.255 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 41: SymbolInfoDouble(Symb,SYMBOL_POINT)] = 2 ms.
2020.08.19 09:34:47.388 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 28: HistoryDealSelect(0)] = 1 ms.
2020.08.19 09:34:47.498 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:35:06.001 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 74: SymbolsTotal(true)] = 3 ms.
2020.08.19 09:35:06.005 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 75: SymbolName(0,true)] = 1 ms.
2020.08.19 09:35:06.017 Test6 (EURGBP,M1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:35:06.022 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 42: SymbolInfoInteger(Symb,SYMBOL_DIGITS)] = 3 ms.
2020.08.19 09:35:06.046 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 28: HistoryDealSelect(0)] = 12 ms.
2020.08.19 09:35:29.014 Test6 (GBPNZD,H1)       Alert: Time[Test6.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 1 ms.
2020.08.19 09:36:30.289 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 1 ms.
2020.08.19 09:36:55.946 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 74: SymbolsTotal(true)] = 2 ms.
2020.08.19 09:36:55.950 Test6 (EURNZD,H1)       Alert: Time[Test6.mq5 39: SymbolInfoDouble(Symb,SYMBOL_ASK)] = 3 ms.

Tornou-se muito melhor. Em combate, ainda não foram testados.


Os registros da versão ZZY Combat mostram que ainda há muito a corrigir...

 
Alexey Volchanskiy:

O hashmap fornecido é o mais rápido de todas as implementações, eu verifiquei. Há duas outras variantes no CB e há um artigo sobre uma delas, elas são uma ordem de magnitude mais lenta. De que tipo de hashmap você precisa,não de software? Você não quer um hashmap de hardware na FPGA? )) Que tal, Ilon Musk!

Quero dizer std:: sem implementação em linguagem executável mql5, porque é significativamente mais lento do que a implementação nativa em pluses.


O que há de errado com as vantagens? A MQL5 não suporta mais o carregamento de DLL de 64 bits? Escreva imediatamente para Renate sobre este ultraje! Eu tenho até C++ 20 apoiado! Só é preciso pegar o jeito )!

A opção DLL nativa é legal, mas tem muitas desvantagens:

  1. Não apoiado pelo testador de estratégia
  2. Não pode ficar na mesma loja.
  3. Nem todos os usuários gostam de executar a EA com suas DLL
  4. Até onde eu entendo (me corrija se eu estiver errado) - a DLL é carregada/descarregada a cada chamada
E a própria MQL5 é um análogo C++, apenas C99, portanto, é disto que estamos falando.


PS. Vou tentar traduzir meu robô para DLL - pode ser mais rápido passar nos testes e trabalhar em geral

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 
b2579.
Arquivos anexados:
2579_lags.txt  653 kb
 
fxsaber:
No OnTick eu solicito o histórico do tick anterior.

Não realmente sobre a questão dos atrasos, mas vou perguntar de qualquer forma. Para que serve a história? Não podem faltar carrapatos? MT4 praticou isso, mas MT5 não deveria fazer isso, deveria?

 
traveller00:

Não realmente sobre a questão dos atrasos, mas vou perguntar de qualquer forma. Para que serve a história? Não podem faltar carrapatos? MT4 o praticou, e MT5 não deveria fazer isso, não?

O eventoNewTick é gerado quando novas cotações chegam e é tratado pelaOnTick() em EAs anexos. Se na chegada de uma nova cotação for executada a função OnTick que está sendo executada na cotação anterior, a cotação recebida será ignorada pelo Expert Advisor, porque o evento correspondente não é colocado na fila de eventos da EA.

https://www.mql5.com/ru/docs/runtime/event_fire#newtick