Boa noite a todos,
Estou desenvolvendo um indicador e já consegui fazer todos os cálculos e traçar o gráfico, porém notei que quando eu troco de ativo com o indicador já aberto as vezes ele é traçado de forma errônea no novo ativo, eu estou usando o valor de rates_total para traçar o indicador e notei que esse valor é carregado de forma progressiva nos primeiros segundo e é exatamente isso que está fazendo o indicador ser traçado de forma errônea, gostaria de saber se há algum evento para detectar quando o valor de rates_total(Eu sei que o rates_total vai mudando a medida que novos candles vão surgindo, eu gostaria de garantir a quantidade total disponível no momento da abertura do gráfico) já foi completamente carregado.
sei que poderia usar algo como um OnTimer() para retardar o tempo de carregamento do indicador, mas não me parece a forma mais eficaz de solucionar isso.
Oi Gilson.
Quando eu preciso trabalhar com o valor antigo do rates eu crio uma variável que guarda o valor, por exemplo:
int rates_anterior = 0 (escopo global) ou como variável estática.
depois compara
if(rates_anterior!=rates_total)
{
//Seu código aqui
rates_anterior=rates_total; //atualiza o valor do rates_anterior
}
Deve resolver.
Sucesso e bons trades!
Oi Gilson.
Quando eu preciso trabalhar com o valor antigo do rates eu crio uma variável que guarda o valor, por exemplo:
int rates_anterior = 0 (escopo global) ou como variável estática.
depois compara
if(rates_anterior!=rates_total)
{
//Seu código aqui
rates_anterior=rates_total; //atualiza o valor do rates_anterior
}
Deve resolver.
Sucesso e bons trades!
Obrigado pela resposta, no meu caso o problema ocorre só no momento da inicialização do gráfico e nesse caso criar uma cópia do rate não resolveria porque eu continuaria copiando o rate errôneo, o problema ocorre basicamente em máquinas menos potentes e/ou quando se tem uma latência alta com respeito a conexão, pois com recurso limitado o rates_total é iniciado de forma gradual o que faz com que o indicador seja plotado nos tempos mais antigos.
EX:
0 segundo: rates_total = 0 - (Momento da troca do ativo no gráfico já com o indicador inserido)
1 segundo: rates_total = 100 - (Nesse momento a função DesenharGrafico() já foi chamada, o que faz o indicador não ser plotado no período atual)
2 segundos: rates_total = 150 - (Nesse momento o indicador já foi totalmente plotado mas o rates_total ainda não carregou a quantidade total de dados)
10 segundos: rates_total = 532 - (Nesse momento o rates_total assume seu valor total, o que faz com que somente o ultimo dado seja plotado corretamente, visto que há uma função que fica recalculando e plotando o indicador no seu ultimo período.)
No final eu estou inclinado a plotar o indicador todo a cada disparo do OnChange(), creio não ter um problema muito grande de performance porque eu traço o indicador com base nos últimos X períodos e não no rates_total.
De qualquer forma, agradeço pela sua ajuda,
Bons negócios!
Obrigado pela resposta, no meu caso o problema ocorre só no momento da inicialização do gráfico e nesse caso criar uma cópia do rate não resolveria porque eu continuaria copiando o rate errôneo, o problema ocorre basicamente em máquinas menos potentes e/ou quando se tem uma latência alta com respeito a conexão, pois com recurso limitado o rates_total é iniciado de forma gradual o que faz com que o indicador seja plotado nos tempos mais antigos.
EX:
0 segundo: rates_total = 0 - (Momento da troca do ativo no gráfico já com o indicador inserido)
1 segundo: rates_total = 100 - (Nesse momento a função DesenharGrafico() já foi chamada, o que faz o indicador não ser plotado no período atual)
2 segundos: rates_total = 150 - (Nesse momento o indicador já foi totalmente plotado mas o rates_total ainda não carregou a quantidade total de dados)
10 segundos: rates_total = 532 - (Nesse momento o rates_total assume seu valor total, o que faz com que somente o ultimo dado seja plotado corretamente, visto que há uma função que fica recalculando e plotando o indicador no seu ultimo período.)
No final eu estou inclinado a plotar o indicador todo a cada disparo do OnChange(), creio não ter um problema muito grande de performance porque eu traço o indicador com base nos últimos X períodos e não no rates_total.
De qualquer forma, agradeço pela sua ajuda,
Bons negócios!
Olá Gilson.
Conte o número de barras com:
nBarras = iBars(_Symbol, PERIOD_CURRENT);
Assim você terá o rates_total antes que ele termine seu loop e poderá fazer o que deseja.
Sucesso por aí.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa noite a todos,
Estou desenvolvendo um indicador e já consegui fazer todos os cálculos e traçar o gráfico, porém notei que quando eu troco de ativo com o indicador já aberto as vezes ele é traçado de forma errônea no novo ativo, eu estou usando o valor de rates_total para traçar o indicador e notei que esse valor é carregado de forma progressiva nos primeiros segundo e é exatamente isso que está fazendo o indicador ser traçado de forma errônea, gostaria de saber se há algum evento para detectar quando o valor de rates_total(Eu sei que o rates_total vai mudando a medida que novos candles vão surgindo, eu gostaria de garantir a quantidade total disponível no momento da abertura do gráfico) já foi completamente carregado.
sei que poderia usar algo como um OnTimer() para retardar o tempo de carregamento do indicador, mas não me parece a forma mais eficaz de solucionar isso.