CopyBuffer

 

Boa tarde Pessoal,

no EA que estou trabalhando utiliza um indicador que modifica o calculo dependendo do horário por exemplo:

começa o pregão as 9h o indicador começa a calcular, chega as 14h o indicador "reseta" o calculo e começa do zero a partir das 14h.

Minha duvida está nesta mudança do indicador em relação ao CopyBuffer  no EA, como ele se comportaria e como seria mais seguro trabalhar com essa mudança?

utilizo a copia de 4 dados do indicador, quando ocorrer está troca, no loop do Ontick()  ele copia 4 valores novos cada execução? ou será necessário usar um Arrayfree ou alguma função para zerar esse array para receber os novos valores?

não sei se ficou claro, mas se não entenderem posso tentar explicar de outra forma.

 
Gustavo Barbeiro Alonso:

Boa tarde Pessoal,

no EA que estou trabalhando utiliza um indicador que modifica o calculo dependendo do horário por exemplo:

começa o pregão as 9h o indicador começa a calcular, chega as 14h o indicador "reseta" o calculo e começa do zero a partir das 14h.

Minha duvida está nesta mudança do indicador em relação ao CopyBuffer  no EA, como ele se comportaria e como seria mais seguro trabalhar com essa mudança?

utilizo a copia de 4 dados do indicador, quando ocorrer está troca, no loop do Ontick()  ele copia 4 valores novos cada execução? ou será necessário usar um Arrayfree ou alguma função para zerar esse array para receber os novos valores?

não sei se ficou claro, mas se não entenderem posso tentar explicar de outra forma.


Bom dia a todos!


Eu também preciso alterar parâmetros de indicadores usando MT5 - no meu caso, a cada novo candle D1, então estou chamando iMA() e iSAR() em OnTick(), ao invés de em OnInit(), PORÉM, essa mudança no local de chamada dos indicadores (mesmo chamando apenas uma vez por dia), deixou o meu EA cerca de (inacreditáveis) 20 vezes mais lento. Se alguém tiver alguma sugestão de como alterar os parâmetros de indicadores durante a execução do EA sem comprometer TANTO a velocidade do mesmo, agradeço muito. Já quebrei muito a cabeça durante alguns dias, mas até agora nada ...

 
Gustavo Barbeiro Alonso:

Boa tarde Pessoal,

no EA que estou trabalhando utiliza um indicador que modifica o calculo dependendo do horário por exemplo:

começa o pregão as 9h o indicador começa a calcular, chega as 14h o indicador "reseta" o calculo e começa do zero a partir das 14h.

Minha duvida está nesta mudança do indicador em relação ao CopyBuffer  no EA, como ele se comportaria e como seria mais seguro trabalhar com essa mudança?

utilizo a copia de 4 dados do indicador, quando ocorrer está troca, no loop do Ontick()  ele copia 4 valores novos cada execução? ou será necessário usar um Arrayfree ou alguma função para zerar esse array para receber os novos valores?

não sei se ficou claro, mas se não entenderem posso tentar explicar de outra forma

Bom dia Gustavo,

 o COPYBUFFER  faz a cópia do array INDICATOR DATA, então se o array foi "resetado" no indicador ele vai copiar "resetado" para o EA.

 
Vinicius de Oliveira:


Bom dia a todos!


Eu também preciso alterar parâmetros de indicadores usando MT5 - no meu caso, a cada novo candle D1, então estou chamando iMA() e iSAR() em OnTick(), ao invés de em OnInit(), PORÉM, essa mudança no local de chamada dos indicadores (mesmo chamando apenas uma vez por dia), deixou o meu EA cerca de (inacreditáveis) 20 vezes mais lento. Se alguém tiver alguma sugestão de como alterar os parâmetros de indicadores durante a execução do EA sem comprometer TANTO a velocidade do mesmo, agradeço muito. Já quebrei muito a cabeça durante alguns dias, mas até agora nada ...

Bom dia, Vinicius

 a construção do handle dever ser feita uma vez só e de preferência no  OnInit(), no OnTick() você faz somente o CopyBuffer().

 
Rogerio Giannetti Torres:

Bom dia, Vinicius

 a construção do handle dever ser feita uma vez só e de preferência no  OnInit(), no OnTick() você faz somente o CopyBuffer().

Bom dia Rogério!


Pois é, foi o que eu pensei. Interessante que no MQ4 os indicadores são chamados em OnTick() sem grande perda de velocidade. Pelo menos nesse quesito, ponto pro MQ4   :) 


Muito obrigado por seu tempo e um abraço!

 
Gustavo Barbeiro Alonso:

Boa tarde Pessoal,

no EA que estou trabalhando utiliza um indicador que modifica o calculo dependendo do horário por exemplo:

começa o pregão as 9h o indicador começa a calcular, chega as 14h o indicador "reseta" o calculo e começa do zero a partir das 14h.

Minha duvida está nesta mudança do indicador em relação ao CopyBuffer  no EA, como ele se comportaria e como seria mais seguro trabalhar com essa mudança?

utilizo a copia de 4 dados do indicador, quando ocorrer está troca, no loop do Ontick()  ele copia 4 valores novos cada execução? ou será necessário usar um Arrayfree ou alguma função para zerar esse array para receber os novos valores?

não sei se ficou claro, mas se não entenderem posso tentar explicar de outra forma.

Bom dia Gustavo!


Conseguiu uma solução viável pra esse problema?

 
Vinicius de Oliveira:

Bom dia Gustavo!


Conseguiu uma solução viável pra esse problema?

Bom dia Vinicius,


não era bem um problema, era uma duvida sobre a forma que o CopyBuffer trabalhava, meu medo era gerar erros na execução do EA, Mas pelo visto a cada execução do Ontick() é renovado todos os elementos solicitados no CopyBuffer era essa minha duvida.


Muito Obrigado pela ajuda!

 
Gustavo Barbeiro Alonso:

Bom dia Vinicius,


não era bem um problema, era uma duvida sobre a forma que o CopyBuffer trabalhava, meu medo era gerar erros na execução do EA, Mas pelo visto a cada execução do Ontick() é renovado todos os elementos solicitados no CopyBuffer era essa minha duvida.


Muito Obrigado pela ajuda!

Ok, um abraço!

 
Vinicius de Oliveira:


Bom dia a todos!


Eu também preciso alterar parâmetros de indicadores usando MT5 - no meu caso, a cada novo candle D1, então estou chamando iMA() e iSAR() em OnTick(), ao invés de em OnInit(), PORÉM, essa mudança no local de chamada dos indicadores (mesmo chamando apenas uma vez por dia), deixou o meu EA cerca de (inacreditáveis) 20 vezes mais lento. Se alguém tiver alguma sugestão de como alterar os parâmetros de indicadores durante a execução do EA sem comprometer TANTO a velocidade do mesmo, agradeço muito. Já quebrei muito a cabeça durante alguns dias, mas até agora nada ...

faça o chamado dos indicadores em Oninit() se colocar no Ontick() a cada execução ele vai carregar o indicador acredito que seja esse o motivo da lentidão.

 
Gustavo Barbeiro Alonso:

faça o chamado dos indicadores em Oninit() se colocar no Ontick() a cada execução ele vai carregar o indicador acredito que seja esse o motivo da lentidão.

Sim, é por isso mesmo. Eu já retornei pra OnInit(). Eu queria alterar o valor dos parâmetros dos indicadores (período, step, ...) com base em algumas condições atuais do mercado, mas adiei por enquanto essa mudança. Acho que, depois, vou ter que colocar o código dos indicadores no EA para tentar não perder tanta velocidade nessas alterações de parâmetros.

 
Vinicius de Oliveira:

Sim, é por isso mesmo. Eu já retornei pra OnInit(). Eu queria alterar o valor dos parâmetros dos indicadores (período, step, ...) com base em algumas condições atuais do mercado, mas adiei por enquanto essa mudança. Acho que, depois, vou ter que colocar o código dos indicadores no EA para tentar não perder tanta velocidade nessas alterações de parâmetros.

e se carregar no ontime() sera que daria?