Индикатор 30-60 минут

 

Добрый День!

Мне необходимо, чтобы в индикатор на 30 минутах брались значения из периода 60 минут. Вроде, ничего эксклюзивного, но вот происходит что-то, что моему пониманию недоступно.
Крестики рисуются СОВЕРШЕННО НЕ ТАМ, ГДЕ НАДО!

Обратил я внимание на это конкретно 08 марта 15:00 (на картинках)
(вот, все проблемы в мире от баб...)

А это значит, что и все остальные рисуются как Бог на душу положит.

Код прилагается. Что тут не так - совершенно не понимаю!

//+------------------------------------------------------------------+
//|                                     ind       |
//|                                     Copyright © 2018, Martingeil |
//|                                                  a1413040@f-m.fm | 
//+------------------------------------------------------------------+
#property copyright " © 2018"
#property link      "a1413040@f-m.fm"
//=====================================================
//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Aqua
#property  indicator_color2  Coral
#property  indicator_color3  Aqua
#property  indicator_color4  Coral

//---- indicator parameters

int i = 0; 
//int j = 0;

int nA,clb1,cls1,clb2,cls2,clb3,cls3;

//---- indicator buffers
double BufferUp[],BufferDn[],BufferClBuy[],BufferClSell[],BufferBTg[],BufferSTg[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//Drawing settings-------------------------
   IndicatorBuffers(4);

   SetIndexStyle(0,DRAW_ARROW,2,1);
   SetIndexArrow(0,233);
  
   SetIndexStyle(1,DRAW_ARROW,2,1);
   SetIndexArrow(1,234);

   SetIndexStyle(2,DRAW_ARROW,2,3);
   SetIndexArrow(2,251);   
   
   SetIndexStyle(3,DRAW_ARROW,2,3);
   SetIndexArrow(3,251);   
   
   SetIndexBuffer(0,BufferUp);//стрелка синяя верх
   SetIndexBuffer(1,BufferDn);//стрелка красная вниз
   SetIndexBuffer(2,BufferClBuy);//крестик
   SetIndexBuffer(3,BufferClSell);//крестик

   SetIndexLabel(0,"LONG");
   SetIndexLabel(1,"SHORT");
   SetIndexLabel(2,"Close Buy");
   SetIndexLabel(3,"Close Sell");
      
//Drawing settings=========================
//---- initialization done

return(0);
  }
  
int start()
  {
//---- ArraySetAsSeries --------------------------------------------------  
double STHm[1500], STHs[1500], STHm2[1500];
double STHm5[1500], STHs5[1500], STHm25[1500];
double CCI30[1500], CCI301[1500];



for(i=1500; i>=0; i--)  
   {
  
  CCI30[i]  = iCCI(NULL,PERIOD_H1,26,PRICE_TYPICAL,i+1);                         //v.21 PERIOD_H1
  CCI301[i] = iCCI(NULL,PERIOD_H1,26,PRICE_TYPICAL,i+2);
  
  STHm5[i]  = iStochastic(NULL,PERIOD_H1,12,3,12,MODE_SMA,1,MODE_MAIN,i+1);         //v.21 PERIOD_H1
  STHm25[i] = iStochastic(NULL,PERIOD_H1,12,3,12,MODE_SMA,1,MODE_MAIN,i+2);            //12,3,12
  STHs5[i]  = iStochastic(NULL,PERIOD_H1,12,3,12,MODE_SMA,1,MODE_SIGNAL,i+1);

//=========================================

//Close------------------------------------------------------------
//Close Buy--------------------------------
       if(clb2 == 0       
       && CCI301[i] >= 180.0
       && CCI30[i] < CCI301[i]) 
         {
         clb2 = 21;   
         }
       if(clb3 == 0
       && STHm25[i] > 80.0
       && STHm5[i]  < STHm25[i])
         {
         clb3 = 21;
         }
//Close -----------------------------------
       if(clb2 == 21
       && clb3 == 21)                                                //tmp
         {         
         BufferClBuy[i+1]=High[i+1]+35*Point-10*Point;
         clb1 = 0; clb2 = 0; nA = 0; clb3 = 0;
         }
//Close Buy================================
  
//Close Sell-------------------------------
//Close Sell1-------------------------------
       if(cls2 == 0
       && CCI301[i] <= -180.0
       && CCI30[i] > CCI301[i]) 
          { 
          cls2 = 11;
          }
       if(cls3 == 0
       && STHm25[i] < 20                              
       && STHm5[i]  > STHm25[i])
         {
         cls3 = 11;
         } 
//Close Sell--------------------------------
       if(cls2 == 11
       && cls3 == 11)
          {
           BufferClSell[i+1]=Low[i+1]-35*Point+10*Point;
           cls1 = 0; cls2 = 0; cls3 = 0 ;nA = 0;
          }
//Close Sell===============================

//Close=================================================================

}
//---- done
return(0);}
//+---------------------------------------------------------------------+
 
30 минут
 
час