coding problem with repaint

 

Hi,

I'm just begin to learn mt4 coding. I try to understand now why this indicator repaint.. In the code I can not find  code which recalculat the past or stange future function..

can somebody help me to find the code which make this indicator repaint? maybe the two loops, one calculation from right and one calculation from left ?

thanks


//+------------------------------------------------------------------+
// #Chaos Oscillator        
//+------------------------------------------------------------------+
#property  indicator_separate_window
#property  indicator_minimum 0.0
#property  indicator_maximum 1.0
#property  indicator_buffers 3
#property  indicator_color2  Blue
#property  indicator_color3  Red
#property indicator_style2 STYLE_SOLID
#property indicator_style3 STYLE_SOLID
#property indicator_width2 2
#property indicator_width3 2

extern int period=34;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];
int init()
  {
  
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName(" ");
   SetIndexLabel(0,NULL);
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }

int start()
  {

   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0; 
  

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<Bars; i++)
    {
      MaxH = High[Highest(NULL,0,MODE_HIGH,period,i)];
      MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
     
      if(MaxH-MinL == 0) Value = 0.33*2*(0-0.5) + 0.67*Value1;
      else Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;    
     
      Value=MathMin(MathMax(Value,-0.999),0.999);
     
      if(1-Value == 0) ExtBuffer0[i]=0.5+0.5*Fish1;
      else ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
     
      Value1=Value;
      Fish1=ExtBuffer0[i];
    }


   bool up=true;
   for(i=Bars; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
          
      if (((current<0)&&(prev>0))||(current<0))   up= false;   
      if (((current>0)&&(prev<0))||(current>0))   up= true;
     
      if(!up)
        {
         ExtBuffer2[i]=1.0;
         ExtBuffer1[i]=0.0;
        }
       
       else
         {
          ExtBuffer1[i]=1.0;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }


chaos indicator

Files:
 
jing555: can somebody help me to find the code which make this indicator repaint?
  1. You are counting up. Computing value1 for current bar, then using it in the next bar's computation. Using future values in past values.

  2. You are computing all bars per tick.
              How to do your lookbacks correctly.

  3. Start using the new Event Handling Functions.
              Event Handling Functions - Functions - Language Basics- MQL4 Reference

    You should stop using the old IndicatorCounted and start using the new Event Handling Functions - Functions - Language Basics - MQL4 Reference
              How to do your lookbacks correctly.

 
jing555:

Hi,

I'm just begin to learn mt4 coding. I try to understand now why this indicator repaint.. In the code I can not find  code which recalculat the past or stange future function..

can somebody help me to find the code which make this indicator repaint? maybe the two loops, one calculation from right and one calculation from left ?

thanks

Try in line  for ( int i= 0 ; i< Bars ; i++)  and the line  for (i= Bars ; i>= 0 ; i--)  "Bars" replace with "limit".

Reason: