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

 

Começarei dizendo que não sou programador e que poderia estar errado, mas gostaria de ouvir a opinião de um profissional sobre a idéia sugerida abaixo, com base em cálculos.

O uso de indicadores personalizados é uma questão atual quando se desenvolve um Expert Advisor em várias etapas. É especialmente importante quando os programadores se substituem, e então é melhor colar parte da lógica do Expert Advisor no indicador - testar a lógica (para verificar os cálculos e sua relevância) e depois trabalhar em uma nova parte da idéia. Como resultado, obtemos um Expert Advisor não muito complexo que realmente solicita informações do indicador e toma uma decisão comparando os dados esperados e reais.

Mas, esta abordagem tem uma desvantagem significativa - a velocidade de um consultor especializado como este. O fato é que quanto mais freqüentemente os dados são solicitados dos indicadores personalizados, mais lento o cálculo e mais recursos (memória) são necessários para a otimização.

Até agora eu trabalho no MT4, mas o princípio, como eu o entendo, é o mesmo.

E o problema não está na velocidade de cálculo do indicador iCustom em si, mas em sua conexão com o Expert Advisor.

Suponha que o indicador utilize 5 buffers de gráfico e a EA exija informações desses buffers, então ela precisa utilizar 5 funções iCustom em seu código e realmente colocar 5 indicadores no gráfico em vez de um indicador, o que requer 5 vezes mais recursos. Talvez eu esteja errado, e o compilador analisa esta circunstância - ele calcula para um indicador e dá a todas as funções os dados para os amortecedores necessários de uma só vez? Nesse caso, minhas demais especulações são vãs.

Mas, se não é assim, por que não fundir as informações do indicador em um único pacote?

Proponho fazer uma experiência sobre este tópico com a medição do desempenho do Expert Advisor.

Isto exigirá a tomada de um indicador personalizado com mais de 1 tampão e a adição de um tampão adicional.

O algoritmo é lógico (não matemático):

1. Converter os buffers no indicador em inteiros, dependendo dos dígitos por número, um total de 3 buffers, foi: 1.21101; 1.13; 5, tornou-se: 121101;113;5

2. Contamos quantos dígitos a serem colocados após o primeiro número - no nosso caso 4, depois no próximo número o próximo número é 1, estes valores são o grau do multiplicador:

1,21101*10^4=1211010000

1.13*10^1=113

5*10 ^0=5 (verifique para 0)

3. Some os números e obtenha 1211011135.

4. Escreva o valor no buffer 4.

5. Solicitamos o buffer de 4 indicadores no Expert Advisor e decompomos o valor em componentes em ordem inversa e obtemos 3 números que podem ser usados para o trabalho do Expert Advisor.

Alguém pode comparar a velocidade desta abordagem, há alguma razão por trás disso?

 
...Допустим, индикатор использует 5 графических буферов и для работы советника требуется информация с этих буферов, тогда в коде советника необходимо использовать 5 функций iCustom, и фактически вместо одного индикатора наносить на график 5 индикаторов, что требует в 5 раз больше ресурсов. Быть может я не прав и компилятор анализирует это обстоятельство - делая расчет по одному индикатору и дает сразу всем функциям данные по востребованным буферам!? Тогда дальше мои измышления пусты...

O compilador pode fazer muitas coisas, mas não isso :-)

...Mas, esta abordagem tem uma desvantagem significativa - a velocidade de um Consultor Especialista assim. O fato é que quanto mais freqüentemente os dados são solicitados dos indicadores personalizados, mais lento é o cálculo e mais recursos (memória) são necessários para a otimização ...

E este caso pode ser otimizado. Primeiro, o próprio indicador deve ser escrito de forma inteligente (não para recalcular todas as barras em cada tic), segundo, o indicador deve ser super pesado, para de alguma forma retardar a EA... Para resumir uma longa história...

E aqui está um artigo interessante sobre "Redução do consumo de memória de indicadores auxiliares".

Tive um Expert Advisor com várias moedas que recebeu leituras indicadoras para 28 símbolos durante 8 períodos de tempo.

Eram 28*8=224 cópias de indicadores. Eu me esforcei para otimizar o processo. A operação com várias moedas consumiu quase 700 MB de RAM. Eu resolvi facilmente - eu apenas ajustei o campo "Max barras na janela" nas configurações do terminal na aba "Gráficos" para um valor pequeno... Tanto quanto me lembro, o mínimo para este campo é de 5 mil barras.

Уменьшаем расход памяти на вспомогательные индикаторы
Уменьшаем расход памяти на вспомогательные индикаторы
  • 2011.03.18
  • Andrew
  • www.mql5.com
Если индикатор для своих расчетов задействует значения множества других индикаторов, то такая система расходует много памяти. В статье рассмотрены несколько способов снижения расхода памяти при использовании вспомогательных индикаторов. Сэкономленная память позволит вам увеличить число одновременно используемых в терминале валютных пар, индикаторов и стратегий, что повысит надежность вашего торгового портфеля. Вот так простая забота о технических ресурсах вашего компьютера способна превратиться в материальные ресурсы на вашем депозите.
 

Eu medi o aumento do tempo de teste por um fator de 1,2 a 1,3, o que é bastante insignificante em comparação com os benefícios dados pelos indicadores personalizados.

A conclusão sobre 5 amortecedores está errada. Se os parâmetros forem os mesmos, apenas um indicador será carregado.

 

Integer:

A conclusão sobre os 5 amortecedores é incorreta. Se os parâmetros forem os mesmos, apenas um indicador será carregado.

Sim, eu concordo.

Haverá 5 chamadas da função CopyBuffer() com diferentes argumentos (número buffer). E a cópia indicadora - cabo - será a mesma.

O autor deu um título alto ao tópico "Teoria da Aceleração..." mas ele não tem a menor idéia das coisas básicas.

-Aleks, há muitos artigos sobre este assunto!


 
denkir:

Sim, eu concordo.

Haverá 5 chamadas para a função CopyBuffer() com diferentes argumentos (número buffer). E haverá apenas uma cópia do indicador - cabo.

O autor deu um título alto ao tópico "Teoria da Aceleração..." mas ele não tem a menor idéia das coisas básicas.

-Aleks-, há muitos artigos sobre o tema do indicador!


Uma vez tentei medir a velocidade de chamada de índices incorporados e análogos através do iCustom. Os embutidos são cerca de 20-50% mais rápidos. Muito provavelmente porque são escritas em C++ e não em MQL.
 

Denkir, estou falando do trabalho da EA durante a otimização, o número de candelabros no gráfico afeta a quantidade de cálculos? Eu estudei o artigo, sei que existem variantes de indicadores de otimização. Entretanto, neste caso, quero acreditar que o indicador é perfeito e examinar o método de passar os dados do indicador para a EA. Não sou programador e tenho dificuldade em verificar a otimização do código indicador - no máximo posso prescrever no TOR - 1 barra de atraso e limitação do histórico para cálculos.

Integer:

Eu medi, o aumento do tempo de teste em 1,2 - 1,3 vezes, o que é absolutamente insignificante em comparação com os benefícios proporcionados pelos indicadores personalizados.

Minha conclusão sobre 5 amortecedores não está correta. Se os parâmetros forem os mesmos, apenas um indicador será carregado.

O que você estava medindo? E 30% não é tão pouco para mim.

Sobre os 5-buffers, se eu o entendi corretamente, então com os mesmos parâmetros de entrada do indicador, o cálculo é feito para apenas um indicador quando o Expert Advisor chama o último várias vezes e obtém informações de diferentes buffers?

Se assim for, então a combinação de indicadores personalizados deve acelerar o trabalho do Expert Advisor? Por exemplo, então em um indicador a lógica de diferentes indicadores com configurações independentes pode ser implementada, quando qualquer um deles é chamado, as informações de todos os buffers são recebidas de uma só vez e utilizadas no caso de solicitação de informações de outro buffer com os mesmos parâmetros?

VDev:
Eu tentei medir a velocidade de chamada dos índices embutidos e seus análogos através do iCustom. Os embutidos são cerca de 20-50% mais rápidos. Muito provavelmente porque são escritas em C++ e não em MQL.

É um fato.
 

Artigo extremamente interessante "Séries de preços em média sem amortecedores adicionais para cálculos intermediários " por GODZILLA.

Foi escrito em 2010.

uma seção 3. comparação do indicador obtido usando classes com seus análogos com chamadas de indicadores técnicos e personalizados no código

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
denkir:

Sim, eu concordo.

Haverá 5 chamadas para a função CopyBuffer() com diferentes argumentos (número buffer). E haverá apenas uma cópia do indicador - cabo.

O autor chamou alto o tema "Teoria da Aceleração..." e ele não faz a menor idéia sobre o básico.

-Aleks-, há muitos artigos sobre o tema do indicador!


E você pode simplesmente desmentir minha hipótese (no 4, de preferência), confirmando minhas palavras com números?

O tópico é sobre minha teoria - o título é ok :)

 
-Aleks-:

Denkir, estou falando do desempenho da EA durante a otimização, o número de candelabros no gráfico afeta a quantidade de cálculos?

-Aleks-, sobre o testador Você precisa perguntar ao desenvolvedor ...

Mas acho que há um problema com os termos na discussão. Você quer reduzir a velocidade dos cálculos ou salvar a RAM para trabalhar com o indicador?



 
denkir:

-Aleks-, sobre o testador. Você precisa perguntar aos desenvolvedores...

Mas, a meu ver, há um problema com os termos na discussão. O que você quer, reduzir a velocidade dos cálculos ou salvar a RAM para trabalhar com o indicador?

Parece-me que meu método resolverá estes dois problemas. Eu posso estar errado.

Ao otimizar, a velocidade é importante, mas uma vez que a RAM está entupida, novamente, de acordo com minhas observações, a velocidade de processamento por passe diminui.

 
-Aleks-:

Alguém pode comparar a velocidade desta abordagem, há alguma razão por trás disso?

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 no processador (tanto a "montagem" quanto a "decomposição" devem ser feitas constantemente).

E se o indicador tiver 5 buffers, 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 surgimento de novos dados para cálculo).

Se você tiver um indicador realmente pesado, pense em seu próprio sistema de cache, para que na primeira chamada os dados sejam calculados e escritos no arquivo, e nas próximas chamadas 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!

Razão: