Написание пользовательского индикатора, который используют другие таймфреймы

 
void start ()
  {
        int i, num, Counted_bars;
        Counted_bars = IndicatorCounted();

        num = Bars - Counted_bars - 1;

        if(Bars<10)

      return;
for(i = 0; i < num; i++)
   {
           if(i%23 == 0)
           {
              varHigh =   iHigh (Symbol(),PERIOD_D1,day);
              day++;
            }
        ExtRealBuffer[i] = varHigh;
        }
} 

 Я хочу написать индикатор, который бы на ЧАСОВОМ таймфрейме выводил максимум предыдущего дня (в iHigh используется  PERIOD_D1). 

Как правильно поставить проверку условия для того, чтобы понять, что наступил новый день (сейчас стоит i делить на 23.. но это не правильно) 

 

А чем вам такое сравнение не по душе:

if(iTime(NULL,PERIOD_D1,0) != iTime(NULL,PERIOD_D1,1))
 
evillive:

А чем вам такое сравнение не по душе:


Наверное тем, что результат такого сравнения всегда ИСТИНА.
 

Ну тогда вотъ:

      int dayi = iBarShift(NULL, 1440, Time[i], false);

      double H = iHigh(NULL, period, dayi + 1);
      double L = iLow(NULL, period, dayi + 1); 
      double C = iClose(NULL, period, dayi + 1);
      double O = iOpen(NULL, period, dayi + 1);
 
ramnek:

 Я хочу написать индикатор, который бы на ЧАСОВОМ таймфрейме выводил максимум предыдущего дня (в iHigh используется  PERIOD_D1). 

Как правильно поставить проверку условия для того, чтобы понять, что наступил новый день (сейчас стоит i делить на 23.. но это не правильно) 


Можно много изобретать, но 2 варианта легких.

1) Раз на баре удаляем и рисуем объект. ObjectDelete ObjectCreate

2) Ну или просто передвигаем его.  ObjectMove

 

Ну или так.

 

datetime prev_day;

void OnTick()
{

...
if(iTime(Symbol(),PERIOD_D1,0)==prev_day) return;
prev_day=iTime(Symbol(),PERIOD_D1,0);
}
Причина обращения: