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

 
Alexander Laur:
Você pode descrever a tarefa. O que o roteiro deve fazer com todas as barras? Acho que você está tentando resolver o problema de frente. É difícil dar conselhos sem ver o problema a ser resolvido.

Eu tenho o roteiro, aqui está o ToRhttps://www.mql5.com/p/21/234411 , mas há dificuldades de operação devido à falta de memória.... ou melhor, acaba depois de uma curta etapa do roteiro.

 
Alexander Laur:
A página é banida. Que você tem um roteiro é bom, mas não resolve o problema. O que o roteiro faz?
O roteiro analisa a localização do indicador em relação ao preço. Há muitos critérios - o objetivo é encontrar os ajustes ideais para o indicador, no qual o indicador é uma zona de suporte ou resistência. O script permite conectar quaisquer indicadores similares à média móvel e realizar a enumeração de parâmetros.
 
Alexander Laur:

Renat já respondeu que só há uma maneira - transferir um cálculo indicador para um roteiro.

Entendo isso, mas isso torna o trabalho mais complicado e aumenta consideravelmente meus custos. Torna a ferramenta (roteiro) não versátil.

Alexander Laur:

Você também pode realizar masoquismo e quebrar a gama calculada de parâmetros em subgrupos. E execute os parâmetros de mudança de roteiro em cada subgrupo. É um processo demorado, eu sei, mas o que podemos fazer?

Agora eu acho que a solução pode ser automatizar o processo de abrir um gráfico pelo script, calcular alguns indicadores nele, fechar o gráfico pelo script e abrir um novo - isso permitirá limpar a memória?

Alexander Laur:

A segunda opção é mudar para 5. Ou seja, devemos procurar os parâmetros ótimos no 5º indicador e depois substituir os parâmetros ótimos no 4º indicador. Nos 5, é possível gerenciar a carga e descarga de indicadores. Mas as operações de carga/descarga são bastante intensivas em recursos.

Acho que é melhor ter operações caras do que não, e entendo que mais memória pode ser usada em 5, mas preciso de indicadores que foram escritos para 4, porque eu negocio em 4...

Meus cálculos são baseados no primeiro e não sei como converter indicador em 5, mas é possível tornar os indicadores compatíveis entre si, pelo menos após a compilação ...

 
Alexander Laur:

O comando para adicionar um indicador ao gráfico não foi encontrado. Ao apagar a tabela, você irá, é claro, liberar a memória. Mas quando você fechar o gráfico, todos os indicadores no gráfico serão fechados.

Há um comando para abrir novos gráficos, mas não há nenhum comando para anexar o indicador ao gráfico recém aberto. É por isso que a automação real também não funcionará neste caso.

E quanto ao iCustom, devemos chamar o indicador através dele - é o mesmo que adicionar um gráfico - na verdade, eu não coloco o gráfico no gráfico.
 
Alexander Laur:

Chamar um indicador via iCustom() não é adicionar um gráfico ao gráfico.

Se você não colocar a carta na carta, então que carta você vai matar para liberar a memória?

Não perca seu tempo, confie na Renate.

Talvez eu esteja enganado. Vamos rever isso novamente:

1. Há um script que chama a função de indicador iCustom e salva os buffers de gráficos na memória.

2. A chamada de função iCustom é múltipla - como resultado, a RAM é preenchida e o indicador retorna zeros.

O terminal deve ser capaz de trabalhar com memória, certo? Para limpar o cache, como eu entendo, é possível se os dados não forem necessários, e eles não são necessários se o gráfico com os dados for removido.

4. Apagar a tabela e liberar a RAM para cálculos adicionais no ponto 1.

Onde eu estou errado?


P.S. Pelo que entendi, os dados estão todos vinculados ao gráfico no qual o cálculo é feito - não importa quais citações são usadas para ele.

 
-Aleks-:

Talvez eu esteja enganado. Vamos rever isso novamente:

1. Há um roteiro que chama a função de indicador iCustom e armazena os buffers gráficos na memória.

2. A função iCustom é chamada várias vezes - como resultado, a RAM é preenchida e o indicador retorna zeros.

O terminal deve ser capaz de trabalhar com memória, certo? Para limpar o cache, como eu entendo, é possível se os dados não forem necessários, e eles não são necessários se o gráfico com os dados for removido.

4. Apagar a tabela e liberar a RAM para cálculos adicionais no ponto 1.

Onde eu estou errado?


P.S. Pelo que entendi, os dados estão vinculados ao gráfico no qual o cálculo é realizado - não importa quais citações são usadas para isso.

No ponto 3.

O terminal armazena o cache das séries de tempos e indicadores construídos sobre eles por algum tempo após o fechamento, a fim de não recalcular tudo de uma vez na próxima chamada.

 
Andrey Khatimlianskii:

No ponto 3.

O terminal armazena o cache de timeseries e indicadores com base neles por algum tempo após o fechamento, para que não tenha que recalcular tudo de uma só vez quando você voltar a acessá-lo.

Mas o que é "algum" tempo? Talvez existam outros critérios/métodos de liberação de recursos (apagar o cache da memória)?
 
-Aleks-:
Mas o que é "algum" tempo? Talvez existam outros critérios/métodos para liberação de recursos (remoção do cache da memória)?

Não, Renat já respondeu.

No MT5 o cache é liberado se o Expert Advisor que usa indicadores como recursos for descarregado. Ou seja, você pode carregar um gráfico com um consultor especializado, ler uma parte dele e fechar o gráfico. Mas ainda não é muito rápido.

Eu não sei sobre isso no MT4.

 
Andrey Khatimlianskii:

Não, Renat já respondeu.

No MT5 o cache é liberado se o Expert Advisor que usa indicadores como recursos for descarregado. Ou seja, você pode carregar um gráfico com um consultor especializado, ler uma parte dele e fechar o gráfico. Mas não é muito rápido de qualquer forma.

Eu não sei sobre isso no MT4.

A memória é liberada após a operação do roteiro. Então, a memória para o cálculo dos dados obtidos do indicador é liberada, mas não diz respeito aos buffers de gráficos, certo?

E se traduzirmos os dados não através do buffer gráfico, mas sim - através de variáveis globais, por exemplo (não sei se um buffer pode ser criado lá), então o efeito da falta de memória pode ser superado?

 
Aqui está uma experiência.
1. gráfico aberto e "gerenciador de tarefas" - memória usada 215692 kb
2. Eu aplico indicador - memória ocupada 219612 kb (aumento 3920 kb)
3. Indicador de remoção - memória usada 217984 kb (lançado 1628 kb)
E os 2292kb restantes de memória não liberada, como eu entendo, foram para o cache?
O buffer não está ocupando muitos dados - histórico de fevereiro de 2013 sobre a Sentinela.
Razão: