Нахождение времени открытия/закрытия бара более высокого периода

 

Привет Всем,

Для Примера: график открыт с периодом 1 минута (может быть 5, 15 и т.д.) и для него же организован for-цикл.

Как для текущей свечки (1 минута) найти время открытия/закрытия самой последней (уже закрытой) свечки более высокого периода, допустим Н4?

(Н4 свечка может быть сегодняшняя или в прошедший день, если это начало нового дня)

Спасибо!

 
chief2000 писал(а) >>

Привет Всем,

Для Примера: график открыт с периодом 1 минута (может быть 5, 15 и т.д.) и для него же организован for-цикл.

Как для текущей свечки (1 минута) найти время открытия/закрытия самой последней (уже закрытой) свечки более высокого периода, допустим Н4?

(Н4 свечка может быть сегодняшняя или в прошедший день, если это начало нового дня)

Спасибо!

iTime(NULL,PERIOD_H4,1) - время открытия. Зарытия прибавить 4*60*60

 
Avals писал(а) >>

iTime(NULL,PERIOD_H4,1) - время открытия. Зарытия прибавить 4*60*60

Спасибо!

По ходу столкнулся с несколькими проблемами - можно ли PERIOD_H4 заменить переменной?

extern string    PeriodToTest         = "PERIOD_H4";


start {

int DayBarOpenTime = iTime(NULL, PeriodToTest, i);
. . .

Применение PeriodToTest в таком варианте выдает ошибки.. Кто-нибудь знает как это исправить?

 

Еще один вопрос, связанный с этим:

int temp = 0;


start() {

   for(i = 1000; i >= 0; i--) {

      int PeriodBarStartTime = iTime(NULL, PERIOD_H4, i);

      if(Time[i]==PeriodBarStartTime) {
         temp = 1;
      }
. . . 

   }
}

В этом Примере, почему [temp = 0] всегда? Нигде нет его обнуления.

Получается что на периодах, меньших Н4, Time[i] никогда не равен времени открытия Н4 свечи - но вседь такого быть не может?!

Вижу, я не понимаю как это работает..

.

Спасибо!

 
chief2000 писал(а) >>

Спасибо!

По ходу столкнулся с несколькими проблемами - можно ли PERIOD_H4 заменить переменной?

Применение PeriodToTest в таком варианте выдает ошибки.. Кто-нибудь знает как это исправить?

extern int    PeriodToTest         = PERIOD_H4;


start {

int DayBarOpenTime = iTime(NULL, PeriodToTest, i);
. . .
 
chief2000 писал(а) >>

Еще один вопрос, связанный с этим:

В этом Примере, почему [temp = 0] всегда? Нигде нет его обнуления.

Получается что на периодах, меньших Н4, Time[i] никогда не равен времени открытия Н4 свечи - но вседь такого быть не может?!

Вижу, я не понимаю как это работает..

.

Спасибо!

Не совсем понятно что ищется.

Есть функция iBarShift()

 
Vinin писал(а) >>

Спасибо! "int" помог!

По-поводу второго вопроса - сейчас скопирую сюда часть скрипта.

 
Vinin писал(а) >>

Не совсем понятно что ищется.

Есть функция iBarShift()

for(i = 100; i >= 0; i--) {

// ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
      HighPreviousPeriod     = iHigh(NULL, PeriodToTest, i+1);
      LowPreviousPeriod      = iLow( NULL, PeriodToTest, i+1);

      int PeriodBarStartTime = iTime(NULL, PeriodToTest, i);
      int PeriodBarEndTime   = PeriodBarStartTime+PeriodUse*60;
// ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````



      if(Time[i]>=PeriodBarStartTime   &&   Time[i+1]!=PeriodBarStartTime   &&   Time[i]<=PeriodBarEndTime) {
         status_high       = true;
         status_low        = true;

         temp = 1;
      }



      string linename_vline_start = StringConcatenate("MyLine_Hi_Lo_LINES_VLINE_START_", PeriodBarStartTime);
      ObjectCreate(linename_vline_start, OBJ_VLINE, 0,  PeriodBarStartTime, 0);
      ObjectSet(linename_vline_start, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(linename_vline_start, OBJPROP_WIDTH, 1);
      ObjectSet(linename_vline_start, OBJPROP_BACK , True);
      ObjectSet(linename_vline_start, OBJPROP_COLOR, SkyBlue);





// ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
      if(High[i]>=HighPreviousPeriod   &&   Low[i]<=HighPreviousPeriod   &&   status_high==true) {
         string linename_Previous_Day_High = StringConcatenate("MyLine_Hi_Lo_LINES_HiLINE_", Time[i]);
         ObjectCreate(linename_Previous_Day_High, OBJ_TREND, 0,  (iTime(NULL, PeriodToTest, i)),HighPreviousPeriod,  Time[i],HighPreviousPeriod);
         ObjectSet(linename_Previous_Day_High, OBJPROP_STYLE, STYLE_SOLID);
         ObjectSet(linename_Previous_Day_High, OBJPROP_RAY, False);
         ObjectSet(linename_Previous_Day_High, OBJPROP_BACK , True);
         ObjectSet(linename_Previous_Day_High, OBJPROP_WIDTH,1);
         ObjectSet(linename_Previous_Day_High, OBJPROP_COLOR, Lime);

         status_high  = false;
      }

      if(Low[i]<=LowPreviousPeriod   &&   High[i]>=LowPreviousPeriod   &&   status_low==true) {
         string linename_Previous_Day_Low = StringConcatenate("MyLine_Hi_Lo_LINES_LoLINE_", Time[i]);
         ObjectCreate(linename_Previous_Day_Low, OBJ_TREND, 0,  (iTime(NULL, PeriodToTest, i)),LowPreviousPeriod,  Time[i],LowPreviousPeriod);
         ObjectSet(linename_Previous_Day_Low, OBJPROP_STYLE, STYLE_SOLID);
         ObjectSet(linename_Previous_Day_Low, OBJPROP_RAY, False);
         ObjectSet(linename_Previous_Day_Low, OBJPROP_BACK , True);
         ObjectSet(linename_Previous_Day_Low, OBJPROP_WIDTH,1);
         ObjectSet(linename_Previous_Day_Low, OBJPROP_COLOR, Magenta);

         status_low = false;
      }
// ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````



} // for(i = TotalDays; i >= 0; i--)
 

Я хочу разделить, скажем 1 минутный график на отрезки (по 4 часа в этом Примере) и в каждом

отрезке определить наибольшее и наименьшее значения. Если в следующем отрезке свеча выше предыдущего наибольшего

или меньше наименьшего, то скрипт должен начертить линию, соединяющую наибольшее из предыдущего отрезка со

свечкой, которая его превзошла (и тоже самое для минимумов).

В том виде какой представлен выше, скрипт рисует несколько линий, причем не на всех периодах (я об 1мин - 1час), и

даже те линии что созданы, не ограничиваются свечой, превосходящей предыдущий максимум, а пробегают несколько

Н4 отрезков. Не могу разобраться в чем дело..

 
Количество баров на каждом таймфрейме разное. и номер бара совсем не должен совпадать на разных таймфреймах. Потому и надо использовать функцию iBarShift(), которая ищет нужный бар по заданному времени.
 
Vinin писал(а) >>
Количество баров на каждом таймфрейме разное. и номер бара совсем не должен совпадать на разных таймфреймах. Потому и надо использовать функцию iBarShift(), которая ищет нужный бар по заданному времени.

Я понимаю что количество баров в разные дни может различаться, но у меня нет четкого представления о том

как применение iBarShift() может помочь? Вы предлагаете отказаться от использования iTime()? Или использовать iBarShift()

в качестве дополнительной проверки? Хотелось бы получить больше подробностей.

Спасибо!

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