Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Миллионы трейдеров ждут хороших идей!
alex
52
alex 2011.05.26 05:00 

Доброго дня есть индюк найденный на здешних просторах, который определяет уровень агрессивности и волатильности рынка. Очень нужны не старые данные а текущие значения Buff_line1[0] и Buff_line2[0], для использования ограничений в советнике, помогите изменить код, очень нужно, заранее спасибо.

#property indicator_chart_window
double Buff_line1[];
double Buff_line2[];
double Aggress[], Volatility[];

int init()
  {
   SetIndexBuffer(0,Buff_line1);
   SetIndexBuffer(1,Buff_line2);
   ArrayResize(Aggress,96);
   ArrayResize(Volatility,96);
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start() {
   static datetime LastTime;
   int limit;
   double MAX,MIN,B;
   double upPrice,downPrice;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   limit=Bars-counted_bars;
   for(int t=limit-1; t>-1; t--) {
      B=0;
      for(int x=t+11; x>=t; x--) { 
         if(Close[x]>Open[x]) {
            B=B+(Close[x]-Close[x+1]);
         }else{
            B=B+(Close[x+1]-Close[x]);
         }
      }    
      upPrice=High[iHighest(Symbol(),0,MODE_HIGH,12,t)];
      downPrice=Low[iLowest(Symbol(),0,MODE_LOW,12,t)];
      if(LastTime!=Time[t+1]){
         for(x=95; x>0; x--) {
            Aggress[x]=Aggress[x-1];
            Volatility[x]=Volatility[x-1];
         }
         LastTime=Time[t+1];
      }
      Aggress[0]=B/Point/12;
      MAX=Aggress[ArrayMaximum(Aggress)];
      MIN=Aggress[ArrayMinimum(Aggress)];
      Buff_line1[t]=Interpol(MAX,MIN,100,0,Aggress[0]);
      Volatility[0]=(upPrice-downPrice)/Point/12;
      MAX=Volatility[ArrayMaximum(Volatility)];
      MIN=Volatility[ArrayMinimum(Volatility)];
      Buff_line2[t]=Interpol(MAX,MIN,100,0,Volatility[0]);  
   }
   Print("Агрессивность= " + DoubleToStr(Buff_line1[0],2) + " Волатильность= " + DoubleToStr(Buff_line2[0],2));
   return(0);
}
double Interpol(double a,double b,double c,double d,double X) {
    if(b - a == 0)
        return(10000000);
    else
        return(d - (b - X) * (d - c) / (b - a));
}
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий