Hi , Help me :)The arrow in the last bar is constantly changing new bar arrive. How can I solve?

 
//+------------------------------------------------------------------+
//|                                                    emadeneme.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_color1 DodgerBlue
#property indicator_color2 Magenta

#property indicator_width1 1
#property indicator_width2 1
double val1[];
double val2[];
bool al=true;
bool sat=true;
int scala=700;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
 SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,234);
  SetIndexBuffer(0,val1);
  SetIndexBuffer(1,val2);
//---
   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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
/*a:=if(Cross(Mov(C,1,S),Mov(C,15,S)),1,0);

if(a=1 , Cross(Mov(C,7,S),Mov(C,17,S)),0)*/

void OnStart()
       {
        int i,t=0,j,ma=0;
       
      
      // Alert(Bars);
        double dizi[4000],dizi2[4000],dizi3[4000],dizi4[4000],dizi5[4000],dizi6[4000],dizi7[4000],dizi8[4000],yuzdeoran,basitortalama=0,sonuc,ghesaplama,x,say;
       
         
       //  Alert(Bars);
      
       for(i=0;i<4000;i++){
         dizi[i]=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
        
    
    
         dizi2[i]=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
         dizi3[i]=iMA(NULL,0,7,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
         dizi4[i]=iMA(NULL,0,17,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
       dizi5[i]=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
        dizi6[i]=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
        dizi7[i]=iMA(NULL,0,7,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
         dizi8[i]=iMA(NULL,0,17,0,MODE_SMA,PRICE_CLOSE,i);//3.bölüm kaç bar alınacağı,4.bölümişlemin kaçıncı bardan başlanacağını,5.bölüm hangi matematiksel işlemin olacağını.6.bölüm uygulanması istenen fiyatın türünü ifade etmektedir.son bölümü 0 almakta fayda var...
        
    
         if(dizi2[i]>dizi[i] && dizi3[i]>dizi4[i] && al==true )
      {
       
        val2[i]=Close[i];
       t++;
       al=false;
       sat=true;
    }
    
    if(dizi5[i]>dizi6[i]&&dizi8[i]>dizi7[i]&& sat==true)
    {
    val1[i]=Close[i];
    ma++;
    al=true;
    sat=false;
    }
    
    
           
        }
       
        
        
        
        
   }     
Files:
ssssssson.mq4  5 kb
 
  1. Don't paste code
    Play video
    Please edit your post.
    For large amounts of code, attach it.

  2. There's no difference between dizi2[] and dizi6[], dizi3[] and dizi7[], or dizi4[] vs. dizi8[]. So why have them? You never look at any other index but [i], so you don't need arrays at all.
  3. You are counting up (to the past,) therefor the indicator repaints. Future values must not determine past values. Count down.
  4. You assume that there are at least 4000 bars on the chart. Indicator crashes when not.
  5. If you ever change your loop from all bars to IndicatorCounted(), then your al=false; sat=true; will be bogus. You also don't need two variables since when one is true, the other must be false. That must be saved in a buffer so you have the value from the previous bar.
 
thank you so much :)
Reason: