problema com OnCalculate. alguem ajuda???

 
#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,C'0,0,0',C'0,0,0',C'0,0,0'
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2

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



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

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, "Media40" + DoubleToString(Periodo1, 0));
   handle_media40 = iMA(_Symbol, _Period, Periodo1, 0, MODE_SMA, PRICE_CLOSE);
   
   if(handle_media40 == 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_media40, Periodo1, 0, rates_total, Media40Value) <= 0) {
      printf("Erro no CopyBuffer handle_media!");
      return(-1);
   
   for(int i = start; i < rates_total; i++){
      
    candlesOpenBuffer[i]   = EMPTY_VALUE;
    candlesHighBuffer[i]   = EMPTY_VALUE;
    candlesLowBuffer[i]    = EMPTY_VALUE;
    candlesCloseBuffer[i]  = EMPTY_VALUE;
    CandleColors[i]        = EMPTY_VALUE;
    Media40Color[i]        = 2;
    
 //coloração
 
    if(close[i] > Media40Value[i]){
       Media40Color[i] = 1;
       
      if(close[i] != open[i]){  
      candlesOpenBuffer[i]  = open[i];
      candlesHighBuffer[i]  = high[i];
      candlesLowBuffer[i]   = low[i];
      candlesCloseBuffer[i] = close[i];
      CandleColors[i]       = 1;
    }
   }
      if(close[i] < Media40Value[i]){
         Media40Color[i] = 0;
         
        if(close[i] != open[i])
      candlesOpenBuffer[i]  = open[i];
      candlesHighBuffer[i]  = high[i];
      candlesLowBuffer[i]   = low[i];
      candlesCloseBuffer[i] = close[i];
      CandleColors[i]       = 1;
   
     }  
    }     
//--- 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 candleDeForcaMediaDescendente=close[index]<mediavalue[index] && close[index]<open[index];
   bool candleDeForcaMediaDescendente = close[index] < close[index - 1] && mediavalue[index] < mediavalue[index - 1];

   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];
}
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
MQL5: linguagem de estratégias de negociação inseridas no Terminal do Cliente MetaTrader 5. A linguagem permite escrever seus próprios sistemas automáticos de negócios, indicadores técnicos, scripts e bibliotecas de funções
 
Winy010:

Bom dia!


Alguns comandos do código estão em português. Provavelmente o tradutor automático estava habilitado quando você copiou esse código. Vá à página do código e copie-o novamente sem habilitar o tradutor . . .

 
Vinicius de Oliveira:

Bom dia!


Alguns comandos do código estão em português. Provavelmente o tradutor automático estava habilitado quando você copiou esse código. Vá à página do código e copie-o novamente sem habilitar o tradutor . . .

Olá, bom dia vinicuis. Eu não tinha reparado nessa ferramenta de tradução automática, ja corrigi a postagem do codigo.
 
Winy010:
Olá, bom dia vinicuis. Eu não tinha reparado nessa ferramenta de tradução automática, ja corrigi a postagem do codigo.

Identifiquei o seguinte:


//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#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,C'0,0,0',C'0,0,0',C'0,0,0'
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2

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

input int      Periodo1 = 40;

double         Media40Color[];
double         Media40Value[];
double         CandleColors[];
double         candlesOpenBuffer[], candlesHighBuffer[], candlesLowBuffer[], candlesCloseBuffer[];
int            handle_media40;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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, "Media40" + DoubleToString(Periodo1, 0));
   handle_media40 = iMA(_Symbol, _Period, Periodo1, 0, MODE_SMA, PRICE_CLOSE);

   if(handle_media40 == 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;

//--- Moving Average indicator
   if(CopyBuffer(handle_media40, 0, 0, rates_total, Media40Value) <= 0)
     {
      printf("Erro no CopyBuffer handle_media!");
      return(-1);
     }

   for(int i = start; i < rates_total; i++)
     {
      candlesOpenBuffer[i]   = EMPTY_VALUE;
      candlesHighBuffer[i]   = EMPTY_VALUE;
      candlesLowBuffer[i]    = EMPTY_VALUE;
      candlesCloseBuffer[i]  = EMPTY_VALUE;
      CandleColors[i]        = EMPTY_VALUE;
      Media40Color[i]        = 2;

      //coloração

      if(close[i] > Media40Value[i])
        {
         Media40Color[i] = 1;

         if(close[i] != open[i])
           {
            candlesOpenBuffer[i]  = open[i];
            candlesHighBuffer[i]  = high[i];
            candlesLowBuffer[i]   = low[i];
            candlesCloseBuffer[i] = close[i];
            CandleColors[i]       = 1;
           }
        }
      if(close[i] < Media40Value[i])
        {
         Media40Color[i] = 0;

         if(close[i] != open[i])
           {
            candlesOpenBuffer[i]  = open[i];
            candlesHighBuffer[i]  = high[i];
            candlesLowBuffer[i]   = low[i];
            candlesCloseBuffer[i] = close[i];
            CandleColors[i]       = 1;
           }
        }
     }
//--- 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 candleDeForcaMediaDescendente=close[index]<mediavalue[index] && close[index]<open[index];
   bool candleDeForcaMediaDescendente = close[index] < close[index - 1] && mediavalue[index] < mediavalue[index - 1];

   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];
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+



Boa sorte!!!

 
Vinicius de Oliveira:

Identifiquei o seguinte:



Boa sorte!!!

Muito obrigado, deu certo aqui. Deus te abençoe sempre 
 
Winy010:
Muito obrigado, deu certo aqui. Deus te abençoe sempre 


👍


Identifiquei também ausência de parênteses no trecho abaixo (já corrigido no código acima):