Помогите доработать советник

 

Нужно получать адекватное значение на последнем баре.

// М.М. Дубовиков и др. - Размерность минимального покрытия и
// локальный анализ фрактальных временных рядов.

//---- авторство индикатора
#property copyright "Copyright © 2008, Ilnur"
double Trand()
  {

   int n=5; // интервал
   int nBars=100;  
int rates_total;    // количество истории в барах на текущем тике
int prev_calculated;// количество истории в барах на предыдущем тике
datetime time[];
double open[];
double high[100];     // ценовой массив максимумов цены для расчёта индикатора
double low[100];      // ценовой массив минимумов цены  для расчёта индикатора
double close[];
long tick_volume[];
long volume[];
int spread[];

//---- буфер индикатора
   double ibuffer[];
//----
    SetIndexBuffer(0,ibuffer);
//----
//=========== ЭМУЛЯЦИЯ ИНДИКАТОРНЫХ БУФЕРОВ ============|

int  ArSize=ArraySize(ibuffer);
   if(ArSize<iBars(_Symbol,tfTrand))
     {
      ArraySetAsSeries(ibuffer,false);
      ArrayResize(ibuffer,iBars(Symbol(),tfTrand));
      ArraySetAsSeries(ibuffer,true);
     }

   int bars=iBars(Symbol(),tfTrand);

   int i,j,k,nTotal;
   int ihigh,ilow,nInterval;
   double Delta,Xс,Yс,Sx,Sy,Sxx,Sxy;
//---- последний посчитанный бар будет пересчитан
   static int nCountedBars;
   nCountedBars=bars-1;
   if(nCountedBars>0) nCountedBars--;

   if(nBars>0)
      nTotal = MathMin(nBars,MathMin(bars-nCountedBars,bars-1));
   else  nTotal = MathMin(bars-nCountedBars,bars-1);

//---- основной цикл индикатора
   for(j=nTotal; j>=0; j--)
     {
      Sx=0; Sy=0; Sxx=0; Sxy=0;
      for(i=0; i<=n; i++)
        {
         nInterval=MathPow(2,n-i);
         //---- суммируем разницы максимальной и минимальной цен на интервале
         for(Delta=0,k=0; k<MathPow(2,i); k++)
           {
            ihigh= iHighest(Symbol(),tfTrand,MODE_HIGH,nInterval,nInterval*k+j);
            ilow =  iLowest(Symbol(),tfTrand,MODE_LOW, nInterval,nInterval*k+j);
            Print("high[ihigh]="+high[ihigh]+" low[ilow]="+low[ilow]);
            Delta+=high[ihigh]-low[ilow];
           }
         //---- вычисляем координаты вариации в двойном логарифмическом масштабе
         Xс = (n-i)*MathLog(2.0);
         Yс = MathLog(Delta);
         //---- накапливаем данные для нахождения коэффициентов линии регрессии с помощью МНК
         Sx += Xс;
         Sy += Yс;
         Sxx += Xс*Xс;
         Sxy += Xс*Yс;
        }
      //---- вычисляем индекс вариации (коэффициент наклона линии регрессии)
      ibuffer[j]=-(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
     }
return(ibuffer[0]);}

а пока полный бред. Спс.

 
 
Dmitiry Ananiev:
Вызовите индикатор через iCustom.
Спасибо за идею. Просто не хотелось бы таскать кучу запчастей. Да и оптимизация удобнее.
 
В оптимизации не сильно проиграете. Была бы идея хорошей. Или советник сразу планируется как очередной шлак для Маркета ? 
 
Dmitiry Ananiev:
В оптимизации не сильно проиграете. Была бы идея хорошей. Или советник сразу планируется как очередной шлак для Маркета ? 

Если советник профитный - не продавал бы, чтоб не палить ТС.

Если шлак - тем более не продавал бы, чтоб не позориться.

Вроде ж ерунда с массивами осталась - и заработает.
Причина обращения: