Teoria da aceleração da EA ao usar um indicador personalizado (função - iCustom) - página 2

 
komposter:

E se o indicador for 5-buffer, então a primeira chamada do iCustom calculará todos os buffers, as chamadas e solicitações subseqüentes de outros buffers só lerão as informações prontas (até o aparecimento de novos dados para cálculo).

Isto é, se o indicador foi chamado pelo menos uma vez, ele recebeu as informações não só sobre o buffer solicitado, mas sobre todos os buffers incluídos no indicador? Ou, significa que o cálculo de outros buffers será encontrado na memória e não haverá recálculo devido a ele - os dados serão retirados da RAM, caso não tenham sido chamados explicitamente antes (o programa (EA) não alocou a memória explicitamente para o armazenamento dos dados indicadores). Li antes que toda vez que o indicador é chamado, ele é recalculado - não é assim?

komposter:

Se você tiver um indicador realmente pesado, pense em seu próprio sistema de cache, de modo que na primeira chamada os dados sejam calculados e escritos no arquivo, e na próxima chamada eles sejam apenas lidos. Eu fiz desta maneira, é muito mais rápido.

Mas em 95% dos casos não há necessidade de tudo isso, o testador é rápido o suficiente, e em 5 você também pode conectar a nuvem.

Boa sorte!

A leitura de um disco rígido seria mais rápida, ou você fez um disco virtual na memória com os dados indicadores calculados?

Bem, eu só estou sonhando com os cinco, por enquanto eu só implemento idéias personalizadas nos quatro.

Obrigado por me desejar boa sorte!

 
komposter:

Se você tiver um indicador realmente pesado, crie seu próprio sistema de cache, de modo que na primeira execução os dados sejam calculados e escritos no arquivo, e nas execuções subseqüentes eles sejam apenas lidos. Eu fiz desta maneira, é muito mais rápido.

Mas em 95% dos casos não há necessidade de tudo isso, o testador é rápido o suficiente, e em 5 você também pode conectar a nuvem.

Boa sorte!

Não estou falando de um indicador, mas de um Expert Advisor, mas o assunto está próximo. Meu escalper conta bastante, todos os tipos de filtros, conversões. Coloquei meu modelo em cache no Matlab e primeiro calculei toda a matemática e alimentei-a em um arquivo .mat, e depois usei esses dados para executar uma estratégia. Agora estou louco para fazer o mesmo para o MQL4 Strategy Tester, porque a otimização é simplesmente irreal.
 
-Aleks-:

Ou seja, se o indicador for chamado pelo programa pelo menos uma vez, ele recebeu informações não só sobre o buffer solicitado, mas também sobre todos aqueles incluídos no indicador? Ou, significa que o cálculo de outros buffers será encontrado na memória e não haverá recálculo devido a ele - os dados serão retirados da RAM, caso não tenham sido chamados explicitamente antes (o programa (Expert Advisor) não alocou memória explicitamente para o armazenamento de dados indicadores). Li antes que toda vez que o indicador é chamado, ele é recalculado - não é assim?

O indicador não pode calcular apenas um buffer, ele considera tudo o que tem dentro de si em qualquer chamada. A menos que você possa limitar o cálculo usando parâmetros, mas isso é outra questão.

O recálculo ocorre a cada chamada, mas geralmente apenas a 0ª barra é recalculada. E se um EA é escrito de forma inteligente, estas chamadas não ocorrem em cada tique.

-Aleks-:

A leitura a partir de um disco rígido seria mais rápida ou você teria criado um disco virtual na memória com dados indicadores calculados?

Eu leio de um disco normal, mas não os valores indicadores em cada barra, mas a seqüência "tempo; sinal"; tais dados são muito menos necessários.

É improvável que haja uma solução universal para qualquer indicador, você deve confiar no problema global.

-Aleks-:

Eu só sonhei com o indicador cinco, eu só realizei minhas idéias sobre o indicador quatro.

A única diferença está na parte comercial e no trabalho com séries temporais (incluindo indicadores).

E a nuvem é uma coisa realmente poderosa.

 
VDev:
Não estou falando do indicador, mas do Conselheiro Especialista, mas o assunto está próximo. Tenho um escalpador que calcula bastante, todos os tipos de filtros e transformações. Coloquei o modelo em cache no Matlab e primeiro calculei todas as matemáticas e alimentei-o em um arquivo .mat e depois usei esses dados para executar uma estratégia. Agora estou louco para fazer o mesmo para o MQL4 Strategy Tester, porque a otimização é simplesmente irreal.

Quase não faz sentido ter um cache para um indicador separado, eu também comecei a partir dos dados necessários na EA.

Grosso modo, os sinais prontos foram gravados e, em seguida, eles foram apenas lidos e realizados entradas e suporte de posição.

 
komposter:

O indicador não pode calcular apenas um buffer, ele calcula tudo dentro dele em qualquer chamada. A menos que o cálculo possa ser limitado pelos parâmetros, mas isso é outro tópico.

O recálculo ocorre a cada chamada, mas geralmente apenas a 0ª barra é recalculada. E se um EA é escrito de forma inteligente, então estas chamadas não ocorrem em cada tique.

Então acontece que se abordarmos um indicador com muitos buffers e recebermos informações sobre todos eles de um deles, então será mais rápido e mais econômico em termos de memória do que calcular tantas vezes quantas as informações de seus diferentes buffers forem necessárias para este indicador?


Ainda assim, talvez alguém possa fazer uma experiência, porque a idéia está me mantendo ocupado! Ou a pesquisa de inovação é interessante apenas por uma taxa?

 
O indicador OnCalculate() é chamado apenas na primeira vez que o iCustom() é chamado a um novo preço. As próximas chamadas iCustom() só recuperarão dados sem iniciar o onCalculate(). Digamos que o preço muda, a próxima chamada iCustom()começa emCalculate(), as próximas chamadas só recebem dados e assim por diante, até que o preço muda, etc. (testado experimentalmente agora mesmo).
 
-Aleks-:

Então, no final, acontece que se você abordar um indicador com muitos buffers e obter informações de um deles sobre todos eles, será mais rápido e mais econômico na memória do que calcular quantas vezes este indicador precisar de informações de seus diferentes buffers?

1 indicador para 5 amortecedores ou 5 indicadores para 1 amortecedor é aproximadamente o mesmo.
Se você precisar apenas de informações de 2 buffers, será mais rentável chamar 2 indicadores com 1 buffer do que um indicador com 5 buffers. Mas não mais rentável do que um indicador com 2 amortecedores.


-Aleks-:

Ainda assim, talvez alguém possa fazer uma experiência, porque a idéia está me mantendo ocupado! Ou a pesquisa de inovação é interessante apenas por uma taxa?

komposter:

Esta abordagem reduzirá o consumo de memória do indicador (aproximadamente um múltiplo da diferença no número de buffers antes e depois), mas aumentará a carga sobre o processador (e "construir" e "decompor" têm que ser feitos constantemente).

Se você não encontrar o limite de memória (o que é improvável com os volumes atuais), ele só irá diminuir a velocidade.

 

Sinto que estou sendo mal compreendido! :)

Mas entendo que o mais provável é que seja eu quem não entende.

Suponha que chamemos o indicador personalizado no código - precisamos especificar o buffer deste indicador e então, seguindo o código, chamamos o indicador personalizado novamente com o mesmo nome da primeira vez, mas com um buffer diferente.

Pergunta: o indicador será calculado duas vezes ou apenas uma vez?

 
-Aleks-:

...

A pergunta será calculada duas vezes ou apenas uma vez?

Uma vez.
 
Integer:
Uma vez.
Então um hodgepodge dos indicadores certos funcionará mais rápido do que usar os indicadores individualmente - então haverá menos pedidos de informação de cotação?