Отображение индикатора старшего таймфрейма на текущем графике

 
Здравствуйте! Помогите, пожалуйста, разобраться с задачей. Сам я никак не въеду.

Имеется код параболика. Требуется на текущий график вывести индикатор старшего таймфрейма (например на графике М5 мы должны видеть расположение индикатора на М15, период меняется). Причем сделать это получается только с через iSAR с помощью iBarShift(NULL, TF,Time[b], false)

А вот как написать это в данном коде никак не пойму. В том виде, что привел ниже, попытался сделать просто через деление
max и step на таймфрейм. В итоге обработка идет по барам текущего таймфрейма, и результаты расчета не совпадают со старшим. А как рассчитать по барам старшего?


int TF= 15 ; // таймфрейм
   
   for(int b=Bars-2; b>=0; b--)  
      {
       if(b == Bars-2)
         {
          Bufer_ST[b] = Low[b] - 10.0 * Point;
          n_ST = 1;
          S_ST = step/TF;
          barA_ST = High[b];
          barB_ST = Low[b];
         }
       else
        {
         if(Close[b] > barA_ST)
           {
             barA_ST = Close[b];
               if (n_ST==1 && S_ST <= max/TF - step/TF)
                  { S_ST = S_ST + step/TF; }
             k_ST=1;
           }          
         if(Close[b] < barB_ST)
           {
            barB_ST = Close[b];
              if (n_ST == -1 && S_ST <= max/TF - step/TF)
                 { S_ST = S_ST + step/TF;}
            k_ST=2;
           }
        if (n_ST == 1)
           { Bufer_ST[b] = Bufer_ST[b + 1] + S_ST * (barA_ST - (Bufer_ST[b + 1]));}
       else
           { Bufer_ST[b] = Bufer_ST[b + 1] + S_ST * (barB_ST - (Bufer_ST[b + 1]));}
      
       if ((Bufer_ST[b+1] < Close[b + 1] && Bufer_ST[b] > Close[b]) || (Bufer_ST[b + 1] > Close[b + 1] && Bufer_ST[b] < Close[b]))
          {
           S_ST = step/TF;
             if (n_ST == 1)
                {Bufer_ST[b] = barA_ST;}
             else
                {Bufer_ST[b] = barB_ST;}
           barB_ST = Close[b];
           barA_ST = Close[b];
           n_ST = -1 * n_ST;
          }
        }
     }
 
Вот так я сделал для стохастика.
Файлы:
 
valenok2003:
Вот так я сделал для стохастика.
Это тоже новое для меня. Я попробую разобрать Ваш код и сделать все на основе вашего кода. Думаю получится сделать то же самое с этим самодельным параболиком. Но будем надеяться все же, что это не единственный вариант.
Спасибо!
 
Все же результат тот же. Положение индикатора не соответствует положению на старшем таймфрейме. С встроенной функцией все ок, а с таким кодом думаю нет. Думаю, что без iBarShift здесь не обойтись, но как это сделать ума не приложу.
 

Двигаюсь в правильном направлении. В простом индикаторе такое получается, а в этом нет. Чего-то опять не учел... Не прорисовывает на старшем, не пойму, в чем проблема:

for (int i=Bars-2; i >= 0; i--)
   {   
       int st=iBarShift(NULL, TF,Time[i], true); 
       int ml = iBarShift(NULL, 0,  iTime(0,TF,st+1),  true); 
       
       int bars= iBars(NULL,TF); 
       double high= iHigh(NULL,TF,st);
       double low= iLow(NULL,TF,st);
       double close= iClose(NULL,TF,st); 
        
       if(i == Bars-2) 
         {     
          n_ST = 1;
          S_ST = step;
          barA_ST =  iClose(NULL,TF,st); 
          barB_ST =  iClose(NULL,TF,st);  
          Bufer_ST[i] = iLow(NULL,TF,st) - 10 * Point; 
         }
       else
        {     
         if(iClose(NULL,TF,st) > barA_ST) 
           {
             barA_ST = iClose(NULL,TF,st);
               if (n_ST==1 && S_ST <= max - step)
                  { S_ST = S_ST + step; }
           }          
         if(iClose(NULL,TF,st) < barB_ST) 
           {
            barB_ST = iClose(NULL,TF,st);  
              if (n_ST == -1 && S_ST <= max - step)
                 { S_ST = S_ST + step;}
           }
      //-------------  Формула:   
        if (n_ST == 1) // если бай
           { Bufer_ST[i] = Bufer_ST[ml] + S_ST * (barA_ST - (Bufer_ST[ml]));
           } 
       else
           { Bufer_ST[i] = Bufer_ST[ml] + S_ST * (barB_ST - (Bufer_ST[ml]));
           } 
       // если сигналит либо вниз либо вверх:
       if ((Bufer_ST[ml] < iClose(NULL,TF,st+1) && Bufer_ST[i] > iClose(NULL,TF,st)) || (Bufer_ST[ml] > iClose(NULL,TF,st+1) && Bufer_ST[i] < iClose(NULL,TF,st)))
          {
           S_ST = step;
           if (n_ST == 1)
              {Bufer_ST[i] = barA_ST;}
           else
              {Bufer_ST[i] = barB_ST;}
           barB_ST = iClose(NULL,TF,st);
           barA_ST = iClose(NULL,TF,st);
           n_ST = -1 * n_ST;
          }
        }
   }

Прошу спецов снизойти наконец к простым смертным )) А то чувствую, буду так колдыбаситься еще целый месяц над, наверное, простыми вещами (для кого-то).

Причина обращения: