Индикатор FATL

 
Здравствуйте!

Помогите оптимизировать индикатор FATL.
При прогоне его в советнике - очень тормозятся расчтеты или вообще все виснет. Судя по всему что-то в коде индикатора при расчете кол-ва баров.
Вызываю его к примеру так:


int start() {

double _FATL_Current=iCustom(NULL,0,"FATL",300,0,1);
double _FATL_Previes=iCustom(NULL,0,"FATL",300,0,2);

if (_FATL_Current>_FATL_Previes )
{
....
....
}
return(0)
}

Код индикатора :

#property copyright "Copyright 2006, Finware.ru Ltd."
#property link "http://www.finware.ru/"
 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
 
extern int CountBars=300;
//---- buffers
double FATLBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,FATLBuffer);
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| FATL                                                             |
//+------------------------------------------------------------------+
int start()
  {
   SetIndexDrawBegin(0,Bars-CountBars+38);
   int i,counted_bars=IndicatorCounted();
    //CountBars=IndicatorCounted();
 
 
 //----
   if(Bars<=38) return(0);
//---- initial zero
   if(counted_bars<38)
      for(i=1;i<=0;i++) FATLBuffer[CountBars-i]=0.0;
//----
   i=CountBars-38-1;
   if(counted_bars>=38) i=CountBars-counted_bars-1;
   while(i>=0)
     {
      FATLBuffer[i]=
0.4360409450*Close[i+0]
+0.3658689069*Close[i+1]
+0.2460452079*Close[i+2]
+0.1104506886*Close[i+3]
-0.0054034585*Close[i+4]
-0.0760367731*Close[i+5]
-0.0933058722*Close[i+6]
-0.0670110374*Close[i+7]
-0.0190795053*Close[i+8]
+0.0259609206*Close[i+9]
+0.0502044896*Close[i+10]
+0.0477818607*Close[i+11]
+0.0249252327*Close[i+12]
-0.0047706151*Close[i+13]
-0.0272432537*Close[i+14]
-0.0338917071*Close[i+15]
-0.0244141482*Close[i+16]
-0.0055774838*Close[i+17]
+0.0128149838*Close[i+18]
+0.0226522218*Close[i+19]
+0.0208778257*Close[i+20]
+0.0100299086*Close[i+21]
-0.0036771622*Close[i+22]
-0.0136744850*Close[i+23]
-0.0160483392*Close[i+24]
-0.0108597376*Close[i+25]
-0.0016060704*Close[i+26]
+0.0069480557*Close[i+27]
+0.0110573605*Close[i+28]
+0.0095711419*Close[i+29]
+0.0040444064*Close[i+30]
-0.0023824623*Close[i+31]
-0.0067093714*Close[i+32]
-0.0072003400*Close[i+33]
-0.0047717710*Close[i+34]
+0.0005541115*Close[i+35]
+0.0007860160*Close[i+36]
+0.0130129076*Close[i+37]
+0.0040364019*Close[i+38];
 
      
      i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+




 
FATL=
0.4360409450*Close[0]
+0.3658689069*Close[1]
+0.2460452079*Close[2]
+0.1104506886*Close[3]
-0.0054034585*Close[4]
-0.0760367731*Close[5]
-0.0933058722*Close[6]
-0.0670110374*Close[7]
-0.0190795053*Close[8]
+0.0259609206*Close[9]
+0.0502044896*Close[10]
+0.0477818607*Close[11]
+0.0249252327*Close[12]
-0.0047706151*Close[13]
-0.0272432537*Close[14]
-0.0338917071*Close[15]
-0.0244141482*Close[16]
-0.0055774838*Close[17]
+0.0128149838*Close[18]
+0.0226522218*Close[19]
+0.0208778257*Close[20]
+0.0100299086*Close[21]
-0.0036771622*Close[22]
-0.0136744850*Close[23]
-0.0160483392*Close[24]
-0.0108597376*Close[25]
-0.0016060704*Close[26]
+0.0069480557*Close[27]
+0.0110573605*Close[28]
+0.0095711419*Close[29]
+0.0040444064*Close[30]
-0.0023824623*Close[31]
-0.0067093714*Close[32]
-0.0072003400*Close[33]
-0.0047717710*Close[34]
+0.0005541115*Close[35]
+0.0007860160*Close[36]
+0.0130129076*Close[37]
+0.0040364019*Close[38];
Вставь в эксперт, и все дела.
 
Integer писал (а):
FATL=
0.4360409450*Close[0]
+0.3658689069*Close[1]
+0.2460452079*Close[2]
+0.1104506886*Close[3]
-0.0054034585*Close[4]
-0.0760367731*Close[5]
-0.0933058722*Close[6]
-0.0670110374*Close[7]
-0.0190795053*Close[8]
+0.0259609206*Close[9]
+0.0502044896*Close[10]
+0.0477818607*Close[11]
+0.0249252327*Close[12]
-0.0047706151*Close[13]
-0.0272432537*Close[14]
-0.0338917071*Close[15]
-0.0244141482*Close[16]
-0.0055774838*Close[17]
+0.0128149838*Close[18]
+0.0226522218*Close[19]
+0.0208778257*Close[20]
+0.0100299086*Close[21]
-0.0036771622*Close[22]
-0.0136744850*Close[23]
-0.0160483392*Close[24]
-0.0108597376*Close[25]
-0.0016060704*Close[26]
+0.0069480557*Close[27]
+0.0110573605*Close[28]
+0.0095711419*Close[29]
+0.0040444064*Close[30]
-0.0023824623*Close[31]
-0.0067093714*Close[32]
-0.0072003400*Close[33]
-0.0047717710*Close[34]
+0.0005541115*Close[35]
+0.0007860160*Close[36]
+0.0130129076*Close[37]
+0.0040364019*Close[38];
Вставь в эксперт, и все дела.

Спасибо!
 

Я так понял это текущее значение. А как обратиться к предыдущему бару?

 
double FATL( string _Symbol, int period, int i )
{
        return(
        0.4360409450*iClose( _Symbol, period, i )
        +0.3658689069*iClose( _Symbol, period, i+1)
        +0.2460452079*iClose( _Symbol, period, i+2)
        +0.1104506886*iClose( _Symbol, period, i+3)
        -0.0054034585*iClose( _Symbol, period, i+4)
        -0.0760367731*iClose( _Symbol, period, i+5)
        -0.0933058722*iClose( _Symbol, period, i+6)
        -0.0670110374*iClose( _Symbol, period, i+7)
        -0.0190795053*iClose( _Symbol, period, i+8)
        +0.0259609206*iClose( _Symbol, period, i+9)
        +0.0502044896*iClose( _Symbol, period, i+10)
        +0.0477818607*iClose( _Symbol, period, i+11)
        +0.0249252327*iClose( _Symbol, period, i+12)
        -0.0047706151*iClose( _Symbol, period, i+13)
        -0.0272432537*iClose( _Symbol, period, i+14)
        -0.0338917071*iClose( _Symbol, period, i+15)
        -0.0244141482*iClose( _Symbol, period, i+16)
        -0.0055774838*iClose( _Symbol, period, i+17)
        +0.0128149838*iClose( _Symbol, period, i+18)
        +0.0226522218*iClose( _Symbol, period, i+19)
        +0.0208778257*iClose( _Symbol, period, i+20)
        +0.0100299086*iClose( _Symbol, period, i+21)
        -0.0036771622*iClose( _Symbol, period, i+22)
        -0.0136744850*iClose( _Symbol, period, i+23)
        -0.0160483392*iClose( _Symbol, period, i+24)
        -0.0108597376*iClose( _Symbol, period, i+25)
        -0.0016060704*iClose( _Symbol, period, i+26)
        +0.0069480557*iClose( _Symbol, period, i+27)
        +0.0110573605*iClose( _Symbol, period, i+28)
        +0.0095711419*iClose( _Symbol, period, i+29)
        +0.0040444064*iClose( _Symbol, period, i+30)
        -0.0023824623*iClose( _Symbol, period, i+31)
        -0.0067093714*iClose( _Symbol, period, i+32)
        -0.0072003400*iClose( _Symbol, period, i+33)
        -0.0047717710*iClose( _Symbol, period, i+34)
        +0.0005541115*iClose( _Symbol, period, i+35)
        +0.0007860160*iClose( _Symbol, period, i+36)
        +0.0130129076*iClose( _Symbol, period, i+37)
        +0.0040364019*iClose( _Symbol, period, i+38));
}
Попробуй эту функцию ;)
 
komposter писал (а):
double FATL( string _Symbol, int period, int i )
{
        return(
        0.4360409450*iClose( _Symbol, period, i )
        +0.3658689069*iClose( _Symbol, period, i+1)
        +0.2460452079*iClose( _Symbol, period, i+2)
        +0.1104506886*iClose( _Symbol, period, i+3)
        -0.0054034585*iClose( _Symbol, period, i+4)
        -0.0760367731*iClose( _Symbol, period, i+5)
        -0.0933058722*iClose( _Symbol, period, i+6)
        -0.0670110374*iClose( _Symbol, period, i+7)
        -0.0190795053*iClose( _Symbol, period, i+8)
        +0.0259609206*iClose( _Symbol, period, i+9)
        +0.0502044896*iClose( _Symbol, period, i+10)
        +0.0477818607*iClose( _Symbol, period, i+11)
        +0.0249252327*iClose( _Symbol, period, i+12)
        -0.0047706151*iClose( _Symbol, period, i+13)
        -0.0272432537*iClose( _Symbol, period, i+14)
        -0.0338917071*iClose( _Symbol, period, i+15)
        -0.0244141482*iClose( _Symbol, period, i+16)
        -0.0055774838*iClose( _Symbol, period, i+17)
        +0.0128149838*iClose( _Symbol, period, i+18)
        +0.0226522218*iClose( _Symbol, period, i+19)
        +0.0208778257*iClose( _Symbol, period, i+20)
        +0.0100299086*iClose( _Symbol, period, i+21)
        -0.0036771622*iClose( _Symbol, period, i+22)
        -0.0136744850*iClose( _Symbol, period, i+23)
        -0.0160483392*iClose( _Symbol, period, i+24)
        -0.0108597376*iClose( _Symbol, period, i+25)
        -0.0016060704*iClose( _Symbol, period, i+26)
        +0.0069480557*iClose( _Symbol, period, i+27)
        +0.0110573605*iClose( _Symbol, period, i+28)
        +0.0095711419*iClose( _Symbol, period, i+29)
        +0.0040444064*iClose( _Symbol, period, i+30)
        -0.0023824623*iClose( _Symbol, period, i+31)
        -0.0067093714*iClose( _Symbol, period, i+32)
        -0.0072003400*iClose( _Symbol, period, i+33)
        -0.0047717710*iClose( _Symbol, period, i+34)
        +0.0005541115*iClose( _Symbol, period, i+35)
        +0.0007860160*iClose( _Symbol, period, i+36)
        +0.0130129076*iClose( _Symbol, period, i+37)
        +0.0040364019*iClose( _Symbol, period, i+38));
}
Попробуй эту функцию ;)


Спасибо! Будем пробовать...