Download MetaTrader 5
To add comments, please log in or register
Sign up for MQL5.community to post your Forum topic
Ming Luo
293
Ming Luo 2015.06.29 12:46 

Hi 

 

I met a problem when writing indicators. The indicator works fine in normal conditions but if there are some new data loading, the indicator markers and zigzags becomes messy like show in the following image. 

https://charts.mql5.com/8/221/usdchf-m15-forex-capital-markets.png

 

Any help please?

 

The code of the lower indicator shows in the image is here

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

{

//--- indicator buffers mapping

   IndicatorBuffers(6);

   SetIndexBuffer(0, BufSto1);

   SetIndexBuffer(1, BufSto2);

   

   SetIndexLabel(0, "FastTermSto");   

   SetIndexLabel(1, "SlowTermSto");

   

   SetIndexBuffer(2, BufStoMark1);

   SetIndexBuffer(3, BufStoMark2);   

   

   SetIndexLabel(2, "FastStoMark");   

   SetIndexLabel(3, "SlowStoMark");

   

   SetIndexStyle(2, DRAW_ARROW,SYMBOL_CHECKSIGN);   

   SetIndexStyle(3, DRAW_ARROW,SYMBOL_CHECKSIGN);   

   

   SetIndexBuffer(4, BufWPRUp);

   SetIndexLabel(4, "WPRUp");

   SetIndexStyle(4, DRAW_LINE, STYLE_DASH);

   

   SetIndexBuffer(5, BufWPRDn);

   SetIndexLabel(5, "WPRDn");

   SetIndexStyle(5, DRAW_LINE, STYLE_DASH);

   

   Print("Bars=", Bars);

   SetIndexDrawBegin(0, ex_nK2+ex_nK1+1);

   SetIndexDrawBegin(1, ex_nK2+ex_nK1+1);

   SetIndexDrawBegin(2, ex_nK2+ex_nK1+1);

   SetIndexDrawBegin(3, ex_nK2+ex_nK1+1);

   SetIndexDrawBegin(4, ex_nK2+ex_nK1+1);

   SetIndexDrawBegin(5, ex_nK2+ex_nK1+1);

//---

   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 nBeginInx = Bars-1-ex_nK2-ex_nK1;

   if (prev_calculated > 0 )

   {

      //nBeginInx = 50;

   }

   for (int i=nBeginInx; i>=0; i--)

   {

      int nIx1 = iBarShift(NULL, ex_nTimeFrame1, Time[i]);

      int nIx2 = iBarShift(NULL, ex_nTimeFrame2, Time[i]);

      BufSto1[i] = iStochastic(NULL, ex_nTimeFrame1, ex_nK1, ex_nDPeriod, ex_nSlow, MODE_SMA, 0, 0, nIx1);

      BufSto2[i] = iStochastic(NULL, ex_nTimeFrame2, ex_nK2, ex_nDPeriod, ex_nSlow, MODE_SMA, 0, 0, nIx2);      

      

      if (BufSto1[i] > ex_nOverbought || BufSto1[i] < ex_nOversold)

      {

         BufStoMark1[i] = BufSto1[i];

      }      

      

      if (BufSto2[i] > ex_nOverbought || BufSto2[i] < ex_nOversold)

      {

         BufStoMark2[i] = BufSto2[i];

      }

      

      int nWPRIx = iBarShift(NULL, ex_nWPRTimeFrame, Time[i]);

      double dWPR = iWPR(NULL, ex_nWPRTimeFrame, ex_nWPR, nWPRIx)+100;

      if (dWPR >= 50)

      {

         BufWPRUp[i] = dWPR;

      } else {

         BufWPRDn[i] = dWPR;

      }
                            
   }

//--- return value of prev_calculated for next call

   return(rates_total);

}

//+------------------------------------------------------------------+

 
whroeder1
13641
whroeder1 2015.06.29 14:51  
      if (BufSto1[i] > ex_nOverbought || BufSto1[i] < ex_nOversold)
      {
         BufStoMark1[i] = BufSto1[i];
      }
else BufStoMark1[i] = EMPTY_VALUE;
Likewise all others
Ming Luo
293
Ming Luo 2015.06.30 01:42  
WHRoeder:
Likewise all others
Thanks, problem solved.
/
To add comments, please log in or register