iLow первого сегодняшнего бара

 
Здравствуйте!


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

Спасибо!


 
lbgraf:
Здравствуйте!

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

Спасибо!

iBarShift();

Документация по MQL5: Доступ к таймсериям и индикаторам / iBarShift
Документация по MQL5: Доступ к таймсериям и индикаторам / iBarShift
  • www.mql5.com
iBarShift - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Sevastyanov #:

iBarShift();

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

 
lbgraf:
Здравствуйте!


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

Спасибо!


что-то типа:

double low = iLow(_Symbol,_Period,iBarShift(_Symbol,_Period,60*60*24*(TimeCurrent()/(60*60*24))));

не проверял

 
Nikolai Semko #:

что-то типа:

не проверял

Наверное можно эту конструкцию:

60*60*24*(TimeCurrent()/(60*60*24))

заменить на 

iTime(_Symbol,PERIOD_D1,0)

т.е. получится так:

double low = iLow(_Symbol,_Period,iBarShift(_Symbol,iTime(_Symbol,PERIOD_D1,0)));

Тоже не проверял. )))

 
lbgraf:
Здравствуйте!


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

Спасибо!


Сначала скажите как вы определяете открытие сессии…

 
lbgraf:
Здравствуйте!


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

Спасибо!


Не оно?

Узнать время первого часового бара дня - Используйте торговые тики вместо всех тиков, мы теряем универсальность.
Узнать время первого часового бара дня - Используйте торговые тики вместо всех тиков, мы теряем универсальность.
  • 2023.02.12
  • www.mql5.com
что общее направление в работе - избавляться от функций iX. Тогда первый часовой бар на дневном диапазоне будет найден таким образом получить количество баров на часовом периоде за промежуток времени текущий момент - время начала дня по дневному периоду
 
Alexey Viktorov #:

Сначала скажите как вы определяете открытие сессии…

Похоже что под сессий топикстартер подразумевает начало торгового дня (судя по названию темы), но возможны варианты. 
Хотя, строго говоря, для форекса сессий несколько в сутках.
Умение задать вопрос правильно - это наука. )))

 
Alexander Sevastyanov #:

Наверное можно эту конструкцию:

заменить на 

т.е. получится так:

Тоже не проверял. )))

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

 
Nikolai Semko #:

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

Я не профи и никогда бы не подумал что 6 арифметических операций + вызов 

TimeCurrent()

сработает быстрее чем вызов

iTime(_Symbol,PERIOD_D1,0)

Можно конечно проверить, но теоретически в чем причина?

 
Alexander Sevastyanov #:

Я не профи и никогда бы не подумал что 6 арифметических операций + вызов 

сработает быстрее чем вызов

Можно конечно проверить, но теоретически в чем причина?

Во-первых, эти два выражения генерируют один и тот же код. Компилятор заменяет умножение нескольких констант на одну константу. Записал длинно для наглядности.

86400*(TimeCurrent()/86400)
60*60*24*(TimeCurrent()/(60*60*24))

Во-вторых, арифметические операции почти бесплатные в сравнению с функциями TimeCurrent() или iTime()
В-третьих функция TimeCurrent() намного быстрее функциям подобным  iTime(). Думаю в раз 10-20.
Можете проверить. Мне лень, так как делал это уже много раз и просто это знаю.

ЗЫ
В-четвертых,
Если Вы находитесь не на D1 ТФ, то нет гарантии при первом вызове, что массив D1 уже сформирован, и поэтому Вы поймаете лаг на ровном месте, пока система не сформирует D1 массив