Download MetaTrader 5
To add comments, please log in or register
Trade with MetaTarder 5. Download it right now!
Leandro Tuchtenhagen
200
Leandro Tuchtenhagen 2015.05.15 21:15 
I have an indicator that doesn't work at the MT5 startup. It doesn't show nothing in the chart.
But, it works perfectly when I just add it to a chart, or when I switch timeframes.

What should be happening?
Drazen Penic
2404
Drazen Penic 2015.05.16 00:35  
Check log files for errors.
Vladimir Karputov
Moderator
32790
Vladimir Karputov 2015.05.16 05:40  
The indicator uses the indicator buffers or drawing panel?
Leandro Tuchtenhagen
200
Leandro Tuchtenhagen 2015.05.16 06:22  

Thank you for the answers.

 There is no errors in log files.

The indicator uses indcator buffers. Is a simple Pivot Point. If necessary I can share here the source code. 

Vladimir Karputov
Moderator
32790
Vladimir Karputov 2015.05.16 06:35  
Leandro Tuchtenhagen :

Thank you for the answers.

 There is no errors in log files.

The indicator uses indcator buffers. Is a simple Pivot Point. If necessary I can share here the source code. 

Let's look at the code.
Leandro Tuchtenhagen
200
Leandro Tuchtenhagen 2015.05.16 18:48  
//+------------------------------------------------------------------+
//|                                                   PivotPoint.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers 7
#property indicator_plots   7
#property indicator_color1  Red
#property indicator_color2  Red
#property indicator_color3  Red
#property indicator_color4  Orange
#property indicator_color5  DodgerBlue
#property indicator_color6  DodgerBlue
#property indicator_color7  DodgerBlue
//---
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_LINE
#property indicator_type4   DRAW_LINE
#property indicator_type5   DRAW_LINE
#property indicator_type6   DRAW_LINE
#property indicator_type7   DRAW_LINE
//---
#property indicator_label1  "R3"
#property indicator_label2  "R2"
#property indicator_label3  "R1"
#property indicator_label4  "Pivot Point"
#property indicator_label5  "S1"
#property indicator_label6  "S2"
#property indicator_label7  "S3"

enum ENUM_PIVOT_TYPE
{
   CLASSIC3,   // Classic Pivot HLC
   CLASSIC4,   // Classic Pivot OHLC 
   FIBONACCI,  // Fibonacci Pivot
   CAMARILLA,  // Camarilla Pivot
   WOODIES     // Woodie's Pivot
};

//--- external parameters
input ENUM_PIVOT_TYPE   PivotType = CLASSIC4;   // Tipo de Pivot

//---- buffers
double PPBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];

MqlDateTime dateStr1;
MqlDateTime dateStr2;
double PP,S1,R1,S2,R2,S3,R3;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   //--- indicator buffers mapping
   SetIndexBuffer(0,R3Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,R2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,R1Buffer,INDICATOR_DATA);
   SetIndexBuffer(3,PPBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,S1Buffer,INDICATOR_DATA);
   SetIndexBuffer(5,S2Buffer,INDICATOR_DATA);
   SetIndexBuffer(6,S3Buffer,INDICATOR_DATA);
//--- sets first bar from what index will be drawn
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0.0);

//---
   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 limit;
   if(prev_calculated == 0)
      limit = 0;
   else
      limit = prev_calculated - 1;
      
   double O, H, L, C, TO;

//---

   for(int i = limit; i < rates_total-1 && !IsStopped(); i++)
   {
      TimeToStruct(time[i],dateStr1);
      TimeToStruct(time[i+1],dateStr2);
      
      if (dateStr1.day != dateStr2.day)
      {
      
         MqlRates r[];
         ArraySetAsSeries(r,true);
         CopyRates(_Symbol, PERIOD_D1, time[i+1], 2, r);
         O = r[1].open;
         H = r[1].high;
         L = r[1].low;
         C = r[1].close;
         TO = r[0].open;
         //Print ("O: ", O, " | H: ", H, " | L: ", L, " | C: ", C);
         
         CalculatePivotPoints(O, H, L, C, TO);
      }
   
      PPBuffer[i+1]=PP;
      S1Buffer[i+1]=S1;
      R1Buffer[i+1]=R1;
      S2Buffer[i+1]=S2;
      R2Buffer[i+1]=R2;
      S3Buffer[i+1]=S3;
      R3Buffer[i+1]=R3;
   }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


void CalculatePivotPoints(double O, double H, double L, double C, double TO)
{
   double R = H - L;
   
   switch(PivotType)
     {
      case CLASSIC3:
         PP = (C + H + L) / 3;
         R1 = (2*PP) - L;
         S1 = (2*PP) - H;
         R2 = PP + (R1 - S1);
         R3 = H + (2 * (PP - L));
         S2 = PP - (R1 - S1);
         S3 = L - (2 * (H - PP));        
        break;
      case CLASSIC4:
         PP = (O + C + H + L) / 4;
         R1 = (2*PP) - L;
         S1 = (2*PP) - H;
         R2 = PP + (R1 - S1);
         R3 = H + (2 * (PP - L));
         S2 = PP - (R1 - S1);
         S3 = L - (2 * (H - PP));
         break;
      case FIBONACCI:
         PP = (C + H + L) / 3;
         R1 = PP + (0.382 * (H - L));
         R2 = PP + (0.618 * (H - L));
         R3 = PP + (1.000 * (H - L));
         S1 = PP - (0.382 * (H - L));
         S2 = PP - (0.618 * (H - L));
         S3 = PP - (1.000 * (H - L));
         break;
      case CAMARILLA:
         PP = (C + H + L) / 3;
         R1 = C + R * 1.1/12;
         R2 = C + R * 1.1/6;
         R3 = C + R * 1.1/4;
         S1 = C - R * 1.1/12;
         S2 = C - R * 1.1/6;
         S3 = C - R * 1.1/4;      
         break;
      case WOODIES:
         PP = (H + L + (2*TO)) / 4;
         R1 = (2*PP) - L;
         R2 = PP + R;
         R3 = H + (2* (PP-L));
         S1 = (2*PP) - H;
         S2 = PP - R;
         S3 = L - (2* (H-PP));
         break;
      default:
        break;
     }
}
Vladimir Karputov
Moderator
32790
Vladimir Karputov 2015.05.16 20:02  

I made some small changes: the order of Declaration of indicator buffers and output CopyRates:

//+------------------------------------------------------------------+
//|                                                   PivotPoint.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers 7
#property indicator_plots   7
#property indicator_color1  Red
#property indicator_color2  Red
#property indicator_color3  Red
#property indicator_color4  Orange
#property indicator_color5  DodgerBlue
#property indicator_color6  DodgerBlue
#property indicator_color7  DodgerBlue
//---
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_LINE
#property indicator_type4   DRAW_LINE
#property indicator_type5   DRAW_LINE
#property indicator_type6   DRAW_LINE
#property indicator_type7   DRAW_LINE
//---
#property indicator_label1  "R3"
#property indicator_label2  "R2"
#property indicator_label3  "R1"
#property indicator_label4  "Pivot Point"
#property indicator_label5  "S1"
#property indicator_label6  "S2"
#property indicator_label7  "S3"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum ENUM_PIVOT_TYPE
  {
   CLASSIC3,   // Classic Pivot HLC
   CLASSIC4,   // Classic Pivot OHLC 
   FIBONACCI,  // Fibonacci Pivot
   CAMARILLA,  // Camarilla Pivot
   WOODIES     // Woodie's Pivot
  };

//--- external parameters
input ENUM_PIVOT_TYPE   PivotType=CLASSIC4;   // Tipo de Pivot

//---- buffers
double R3Buffer[];
double R2Buffer[];
double R1Buffer[];
double PPBuffer[];
double S1Buffer[];
double S2Buffer[];
double S3Buffer[];

MqlDateTime dateStr1;
MqlDateTime dateStr2;
double PP,S1,R1,S2,R2,S3,R3;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//--- indicator buffers mapping
   SetIndexBuffer(0,R3Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,R2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,R1Buffer,INDICATOR_DATA);
   SetIndexBuffer(3,PPBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,S1Buffer,INDICATOR_DATA);
   SetIndexBuffer(5,S2Buffer,INDICATOR_DATA);
   SetIndexBuffer(6,S3Buffer,INDICATOR_DATA);
//--- sets first bar from what index will be drawn
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0.0);

//---
   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 limit;
   if(prev_calculated==0)
      limit=0;
   else
      limit=prev_calculated-1;

   double O,H,L,C,TO;
//---

   for(int i=limit; i<rates_total-1 && !IsStopped(); i++)
     {
      TimeToStruct(time[i],dateStr1);
      TimeToStruct(time[i+1],dateStr2);

      if(dateStr1.day!=dateStr2.day)
        {
         MqlRates r[];
         ArraySetAsSeries(r,true);
         int copied=CopyRates(_Symbol,PERIOD_D1,time[i+1],2,r);
         if(copied>0)
           {
            O = r[1].open;
            H = r[1].high;
            L = r[1].low;
            C = r[1].close;
            TO= r[0].open;
            //Print ("O: ", O, " | H: ", H, " | L: ", L, " | C: ", C);

            CalculatePivotPoints(O,H,L,C,TO);
           }
         else Print("Failed to get history data for the symbol ",Symbol());
        }

      PPBuffer[i+1]=PP;
      S1Buffer[i+1]=S1;
      R1Buffer[i+1]=R1;
      S2Buffer[i+1]=S2;
      R2Buffer[i+1]=R2;
      S3Buffer[i+1]=S3;
      R3Buffer[i+1]=R3;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculatePivotPoints(double O,double H,double L,double C,double TO)
  {
   double R=H-L;

   switch(PivotType)
     {
      case CLASSIC3:
         PP = (C + H + L) / 3;
         R1 = (2*PP) - L;
         S1 = (2*PP) - H;
         R2 = PP + (R1 - S1);
         R3 = H + (2 * (PP - L));
         S2 = PP - (R1 - S1);
         S3 = L - (2 * (H - PP));
         break;
      case CLASSIC4:
         PP = (O + C + H + L) / 4;
         R1 = (2*PP) - L;
         S1 = (2*PP) - H;
         R2 = PP + (R1 - S1);
         R3 = H + (2 * (PP - L));
         S2 = PP - (R1 - S1);
         S3 = L - (2 * (H - PP));
         break;
      case FIBONACCI:
         PP = (C + H + L) / 3;
         R1 = PP + (0.382 * (H - L));
         R2 = PP + (0.618 * (H - L));
         R3 = PP + (1.000 * (H - L));
         S1 = PP - (0.382 * (H - L));
         S2 = PP - (0.618 * (H - L));
         S3 = PP - (1.000 * (H - L));
         break;
      case CAMARILLA:
         PP = (C + H + L) / 3;
         R1 = C + R * 1.1/12;
         R2 = C + R * 1.1/6;
         R3 = C + R * 1.1/4;
         S1 = C - R * 1.1/12;
         S2 = C - R * 1.1/6;
         S3 = C - R * 1.1/4;
         break;
      case WOODIES:
         PP = (H + L + (2*TO)) / 4;
         R1 = (2*PP) - L;
         R2 = PP + R;
         R3 = H + (2* (PP-L));
         S1 = (2*PP) - H;
         S2 = PP - R;
         S3 = L - (2* (H-PP));
         break;
      default:
         break;
     }
  }
//+------------------------------------------------------------------+


Now you can see where the error occurs.

Leandro Tuchtenhagen
200
Leandro Tuchtenhagen 2015.05.16 21:03  
Thank you for your help.

Still not working, and show no errors. 

I'll leave anyway. I had given up, anyway.
/
To add comments, please log in or register