Bibliotecas: Biblioteca de alto desempenho iTimeSeries

 

Biblioteca de alto desempenho iTimeSeries:

Esta biblioteca fornece veloz acesso ao TimeSeries, para implementar os métodos usuais MQL4 (por exemplo, iBarShift) em aplicativos sensíveis à latência em MQL5.

Autor: nicholishen

 

Bom trabalho.

No entanto, sua comparação do desempenho da iBarshift é um pouco complicada, pois o objetivo de um loop de 100.000 iterações é obter um valor de tempo médio e utilizável (em ms). Sua iBarShift() precisa da inicialização de um objeto e essa inicialização não é contada no loop, mas fora dele. De qualquer forma, com certeza manter todos os valores na memória é mais rápido do que calculá-los a cada vez.

 

A propósito, o iBarShiftFast mencionado nos benchmarks de referência pode ser aprimorado para ser tão simples quanto:

(Bars(symbol, timeframe, time, D'2100.01.01') - 1)

O aprimoramento consiste em eliminar completamente o SeriesInfoInteger e usar uma data constante em um futuro distante.

 
Alain Verleyen:

Bom trabalho.

No entanto, sua comparação do desempenho da iBarshift é um pouco complicada, pois o objetivo de um loop de 100.000 iterações é obter um valor de tempo médio e utilizável (em ms). Seu iBarShift() precisa da inicialização de um objeto e essa inicialização não é contada em seu loop, mas fora dele. De qualquer forma, com certeza manter todos os valores na memória é mais rápido do que calculá-los a cada vez.


Obrigado! :)


Essa é uma ótima observação e, sim, a demonstração do "modo de desempenho" inicializa fora do loop; no entanto, a chamada direta para o iBarShift no segundo benchmark está instanciando um objeto, e é por isso que está demorando mais para completar os 100.000 ciclos... porque ele precisa instanciar e inicializar um objeto global estático antes de chamá-lo de volta para obter dados - portanto, o segundo teste é uma comparação justa. O "modo de desempenho" também é uma comparação justa se você o considerar como acesso a dados somente em uma operação de hot-path.

Aliás, acabei de fazer alguns testes e quero especificar novamente para quem estiver lendo isto: Esse método é mais rápido se você planeja separar a atualização de dados e a chamada de dados em caminhos separados OU se você chamar qualquer combinação de chamadas de função de série temporal mais do que um total agregado de 300 vezes por barra. Em outras palavras, a marca de ~300 iterações é o ponto de equilíbrio. Se você não chamar mais de 300 vezes por barra e não estiver usando um "hot-path", provavelmente será melhor usar outros métodos.

 
iBarShift benchmark based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds.
-------------------------------------------------------------
Arquivos anexados:
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Высокопроизводительная библиотека iTimeSeries

fxsaber, 2017.05.25 13:23

iBarShift benchmark based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds.
-------------------------------------------------------------
 
fxsaber:
Sério? É apenas um truque.
 
Alain Verleyen:
Sério? É apenas um truque.

Esse teste de desempenho foi escrito pelo próprio autor da biblioteca.

O exemplo com um pouco de humor mostra que o teste deve ser um pouco diferente. + outra implementação da função de teste.

 
fxsaber :

Esse teste de desempenho foi escrito pelo autor da biblioteca.

O exemplo com um pouco de humor mostra que o teste deve ser um pouco diferente. + Outras funções de verificação de implementação.


Você está certo. O teste foi projetado para refletir o benchmark Alain. Aqui está um exemplo com uma mudança de tempo para simular com mais precisão o uso desse algoritmo no mundo real.

https://i.imgtc.com/rhYzQFj.png

Arquivos anexados:
 
nicholishen:


Você está certo. O teste foi projetado para refletir o benchmark Alain. Aqui está um exemplo com uma mudança de tempo para simular com mais precisão o uso desse algoritmo no mundo real.

O alto desempenho é necessário para um testador/otimizador (apenas).

Mostre o resultado comparativo de sua biblioteca no testador/otimizador.

 
fxsaber:

É necessário alto desempenho para o testador/otimizador (somente).

Mostre o resultado comparativo de sua biblioteca no testador/otimizador.


...também é necessário para construções complexas - de muitos objetos