Поиск баров по времени на младших ТФ

 

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

Воспользовавшись поиском не нашел ответа на проблему которая меня мучает несколько недель :)

Допустим я работаю на месячном графике. Определил для себя 5 баров со смещением от начала 5, 12, 20, 25, 30 (точные номера баров не суть важно).

Теперь мне надо найти эти же самые бары (по ценам High или Low) на графике более нижнего порядка. Для начала на W1. Так как месяц из себя представляет 4 (иногда 5) недель, а функция iBarshift возвращает только одно смещение, то становится не возможно найти конкретный бар на котором находится цена открытия или закрытия исследуемого бара на месячном графике.


Пример. На месячном графике у меня бар от марта месяца 2008 года. На недельном графике iBarshift возвращает мне позицию самого первого бара мартовского меяца, не предположив что их должно быть как минимум 4.


Далее если опуститься на дневной график то мы должны пропахать как минимум 30 баров чтоб определить нужный нам.


Вопрос - есть ли уже готовые встроенные функции поиска определенного бара по цене открытия ИЛИ закрытия на нижестоящем графике, при знании номера бара и цены открытия ИЛИ закрытия вышестоящего графика? Или может кто-то этим уже занимался? Или подскажите алгоритм универсального определения и нахождения групп необходимых баров вне зависимости на каком графике мы находимся и на каком графике нужно найти..

Спасибо.

 
iBarShift() по времени бара старшего таймфрейма c флагом True, если вернула -1 - значит промахнулись, тогда используем iBarShift() с флагом False и вычитаем 1 - получаем номер первого бара. Берем время этого первого бара, прибавляем длительность периода старшего таймфрема, с этим временем вызываем iBarShift() с флагом True, если получили -1, то используем iBarShift() с флагом False и получаем номер последнего бара, если же получили значение, то прибавляем 1 и тоже получаем номер последнего бара. Примерно так.
 
Integer писал (а) >>
iBarShift() по времени бара старшего таймфрейма c флагом True, если вернула -1 - значит промахнулись, тогда используем iBarShift() с флагом False и вычитаем 1 - получаем номер первого бара. Берем время этого первого бара, прибавляем длительность периода старшего таймфрема, с этим временем вызываем iBarShift() с флагом True, если получили -1, то используем iBarShift() с флагом False и получаем номер последнего бара, если же получили значение, то прибавляем 1 и тоже получаем номер последнего бара. Примерно так.

Спасибо за ответ. Нужно будет реализовать такую процедуру... Основную идею я уловил - более или менее понятна.

Вот какие места не понятны:

тогда используем iBarShift() с флагом False и вычитаем 1 - получаем номер первого бара.

вы наверное ошиблись и нужно прибавить 1 чтобы получить номер первого бара? Тк тесты указывают именно на это.



Далее не понятно:

Берем время этого первого бара, прибавляем длительность периода старшего таймфрема

как определить длительность старшего таймфрейма?



Спасибо.

 

1. Точно вычитаем. Так как нет бара младшего таймфрейма соответсвующего времени начала бара старшего таймфрейма, то iBarShift() с флагом false вернет номер более раннего бара, а отсчет баров идет справа налево, надо сдвинуться вправо на один бар.

2. Длительность бара. Если, например, D1 - 86400 сек., H4 - 1440 сек.

 
Integer писал (а) >>

1. Точно вычитаем. Так как нет бара младшего таймфрейма соответсвующего времени начала бара старшего таймфрейма, то iBarShift() с флагом false вернет номер более раннего бара, а отсчет баров идет справа налево, надо сдвинуться вправо на один бар.

2. Длительность бара. Если, например, D1 - 86400 сек., H4 - 1440 сек.

Есть функции которые сами вернут мне длительность бара или самому закладываться на период и высчитывать программно? Просто тогда нестандартные таймфреймы могут быть неработоспособными в данном случае.


А так в принципе идея понятна. Странно что никому это не нужно было раньше или просто эти люди сюда не заглядывают :)



Спасибо.

 
RainMan писал (а) >>

Есть функции которые сами вернут мне длительность бара или самому закладываться на период и высчитывать программно? Просто тогда нестандартные таймфреймы могут быть неработоспособными в данном случае.

Period()*60. С нестандартными - не пробовал, что на них возращает функция Period(). Попробуйте, расскажите. Если не возвращает то, что надо, тогда вручную вводить.

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