Olá,
Criei um indicador que colore os candles dependendo de médias móveis e preços. O indicador está funcionando corretamente para os dados históricos. Porém quando inicia o pregão os novos candles não atualizam as cores, ficam com as cores padrão.
Para o indicador, aplico as cores aos candles no OnCalculate. Para atualizar as cores em tempo de execução devo utilizar a mesma regra também no OnTick? Ou deveria funcionar no OnCalculate?
Quando executo o provador de estratégia também não colore de acordo com minha regra, só fica colorida a parte histórica.
Obrigado.
Olá rubensrudio,
Em indicadores você deve utilizar APENAS a função OnCalculate. OnTick é adequada APENAS para Expert Advisors.
Com relação ao não funcionamento do indicador, acredito que possa ser algum pequeno erro de programação. Acredito que seja interessante debugar o seu código para poder entender, exatamente, o que está acontecendo.
Abraços,
Malacarne
Malacarne,
Obrigado pelo retorno. Tentei debuggar mas ainda não consigo ver onde possa estar o problema. Segue abaixo os códigos caso alguém possa identificar onde está o erro (A média móvel está pintando corretamente em execução):
OnInit: //buffers para candles SetIndexBuffer(0,buffer_open,INDICATOR_DATA); SetIndexBuffer(1,buffer_high,INDICATOR_DATA); SetIndexBuffer(2,buffer_low,INDICATOR_DATA); SetIndexBuffer(3,buffer_close,INDICATOR_DATA); SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX); //buffers para média móvel SetIndexBuffer(5,buffer_ma1,INDICATOR_DATA); SetIndexBuffer(6,buffer_color_ma1,INDICATOR_COLOR_INDEX); IndicatorSetString(INDICATOR_SHORTNAME,0,"EMA"); ma1 = iMA(_Symbol,_Period,17,0,MODE_EMA,PRICE_CLOSE); //função para atribuição de cores MA_Color(0); MA_Color(1); OnCalculate: for(int i=prev_calculated;i<=rates_total-1;i++) { //condição para cores média móvel if(close[i]>buffer_ma1[i]){ buffer_color_ma1[i]=1; //verde } else buffer_color_ma2[i]=0; //Vermelho } //condição para cores candles if(close[i]>open[i]){ buffer_color_line[i]=1; //verde escuro } else{ buffer_color_line[i]=2; //verde claro } } MA_Color(): PlotIndexSetInteger(plot,PLOT_COLOR_INDEXES,3); //Specify the number of colors PlotIndexSetInteger(plot,PLOT_LINE_COLOR,0,clrDarkRed); //Vermelho Escuro PlotIndexSetInteger(plot,PLOT_LINE_COLOR,1,clrDarkGreen); //Verde Escuro PlotIndexSetInteger(plot,PLOT_LINE_COLOR,2,clrLime); //Verde Claro
Resolvido!
O problema estava no meu return do OnCalculate().
Antes:
return(rates_total);
Corrigido:
return(rates_total - 1);
- 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
Olá,
Criei um indicador que colore os candles dependendo de médias móveis e preços. O indicador está funcionando corretamente para os dados históricos. Porém quando inicia o pregão os novos candles não atualizam as cores, ficam com as cores padrão.
Para o indicador, aplico as cores aos candles no OnCalculate. Para atualizar as cores em tempo de execução devo utilizar a mesma regra também no OnTick? Ou deveria funcionar no OnCalculate?
Quando executo o provador de estratégia também não colore de acordo com minha regra, só fica colorida a parte histórica.
Obrigado.