"OnCalculate not found in custom indicator" error. Trying to use Custom Indicator in EA via iCustom - page 3

 
estou com esse problema de OnCalculate também. se alguém puder dar uma ajuda para eu conseguir arrumar isso , eu ficaria grato. estou modificando algumas coisas para o tabajara trabalhar em um robô na coloração das velas, por isso modifiquei a coloração das velas para ficar apenas em uma cor até o próximo cruzamento da média. 
#property copyright "Winycius"
#property link "https://mql5.com"
#property version "2.0"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   2

#property indicator_label1 "Media40"
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrRed, clrGreen, clrOrange
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2

#property indicator_label2 "Candles"
#property indicator_type2 DRAW_COLOR_CANDLES
#property indicator_color2 clrCrimson, clrDodgerBlue
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1



input int      Periodo1 = 40;
double         Media40Color[];
double         Media40Value[];
double         CandleColors[];
double         candlesOpenBuffer[];
double         candlesHighBuffer[];
double         candlesLowBuffer[];
double         candlesCloseBuffer[];
int            handle_media;

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, Media40Value, INDICATOR_DATA);
   SetIndexBuffer(1, Media40Color, INDICATOR_COLOR_INDEX);
   
   SetIndexBuffer(2, candlesOpenBuffer, INDICATOR_DATA);
   SetIndexBuffer(3, candlesHighBuffer, INDICATOR_DATA);
   SetIndexBuffer(4, candlesLowBuffer, INDICATOR_DATA);
   SetIndexBuffer(5, candlesCloseBuffer, INDICATOR_DATA);
   SetIndexBuffer(6, CandleColors, INDICATOR_COLOR_INDEX);
   
   PlotIndexSetString(0, PLOT_LABEL, "Media" + DoubleToString(Periodo1, 0));
   handle_media = iMA(_Symbol, _Period, 0, 0, MODE_SMA, PRICE_CLOSE);
   
   if(handle_media == INVALID_HANDLE) {
      Print("Erro nos handles!");
      return INIT_FAILED;
   } 
//----
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){

   int start = prev_calculated == 0 ? 1 : prev_calculated - 1;

   if(CopyBuffer(handle_media, 0, 0, rates_total, Media40Value) <= 0) {
      printf("Erro no CopyBuffer handle_media!");
      return(-1);
   
   for(int i = start; i < rates_total; i++){

       DefineColorMedia(Media40Value,  Media40Color, i, close);
       DefineColorCandle(Media40Value, i, close, open, high, low);
    }     
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
void DefineColorMedia(double &bufferValue[], double &bufferColor[], int index, const double &close[]) {
   bool fechamentoMaiorQueMediaeMediaAscendente = (close[index] > bufferValue[index] && bufferValue[index] > bufferValue[index - 1]);
   bool fechamentoMenorQueMediaeMediaDescendente = (close[index] < bufferValue[index] && bufferValue[index] < bufferValue[index - 1]);
   if(fechamentoMaiorQueMediaeMediaAscendente) {
      bufferColor[index] = 1; // verde
   } else {
      if(fechamentoMenorQueMediaeMediaDescendente) {
         bufferColor[index] = 0; // vermelho
      } else {
         bufferColor[index] = 2; // amarelo
      }
   }
}
//--------------
void DefineColorCandle(double &mediavalue[], int index, const double &close[], const double &open[], const double &high[], const double &low[]) {
   DefineBuffersCandle(index, close, open, high, low);
//bool candleDeForcaMediaAscendente=close[index]>mediavalue[index] && close[index]>open[index];
   bool candleDeForcaMediaAscendente = close[index] > close[index - 1] && mediavalue[index] > mediavalue[index - 1];
   bool candleDeCorrecaoMediaAscendente = close[index] > mediavalue[index] && close[index] < open[index];

//bool candleDeForcaMediaDescendente=close[index]<mediavalue[index] && close[index]<open[index];
   bool candleDeForcaMediaDescendente = close[index] < close[index - 1] && mediavalue[index] < mediavalue[index - 1];
   bool candleDeCorrecaoMediaDescendente = close[index] < mediavalue[index] && close[index] > open[index];


   if(candleDeForcaMediaAscendente) {
      CandleColors[index] = 1; // Verde
   } else {
         if(candleDeForcaMediaDescendente) {
            CandleColors[index] = 0; // Vermelho
      }
   }
}
//--------------
void DefineBuffersCandle(int index, const double &close[], const double &open[], const double &high[], const double &low[]){
   candlesOpenBuffer[index] = open[index];
   candlesHighBuffer[index] = high[index];
   candlesLowBuffer[index] = low[index];
   candlesCloseBuffer[index] = close[index];
}
 

Winy010: I have this OnCalculate problem too. if anyone can help me get this straightened out, I would be grateful. I'm modifying some things for tabajara to work on a robot on the candle coloring, so I've modified the candle coloring so it's just one color until the next crossing of the mean.

Winy010: estou com esse problema de OnCalculate também. se alguém puder dar uma ajuda para eu conseguir arrumar isso , eu ficaria grato. estou modificando algumas coisas para o tabajara trabalhar em um robô na coloração das velas, por isso modifiquei a coloração das velas para ficar apenas em uma cor até o próximo cruzamento da média. 

If you are going to post in Portuguese, expecting a Portuguese answer then post in the Portuguese forum.

This is the English forum, so please respect the language and only post in English.