Время бара iTime
Чутка поконкретнее можно?)
У меня в функцию прилетает индекс бара текущего тф (в момент перебора на истории), а также ТФ, для которого нужно узнать "новая ли свеча".
В iTime мне что получить?
Особый акцент делаю, что это не текущий поток котировок, а перебор истории от самого старого бара к самому новому.По неравенству IBarSHift() на текущем баре и предыдущем.
А если только стандартные таймфреймы, можно вычислять номер бара от начала эпохи - время бара поделить на период в секундах старшего таймфрейма.
По неравенству IBarSHift() на текущем баре и предыдущем.
А если только стандартные таймфреймы, можно вычислять номер бара от начала эпохи - время бара поделить на период в секундах старшего таймфрейма.
хм, идея с iBarShift в теории выглядит довольно хорошо
спасибо, сейчас попробуюколлеги, наведите, пожалуйста, на идею.
На текущем таймфрейме на истории в цикле перебираются бары. Как в этом цикле можно определить наступление нового бара на ТФ старше?
Допустим, перебираем на н1, и нужно определить, что на ТФ д1 новый бар в этом переборе.
input ENUM_TIMEFRAMES period = PERIOD_H1; //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- for(int i = rates_total - 1000; i < rates_total; i++) if((int)time[i] % PeriodSeconds(period) == 0) Print(time[i]); return(rates_total); } //+------------------------------------------------------------------+
Не оно?
ЗЫ. Хотя нет. фуфло.
В данном, конкретном случае, когда часовой и дневной, тогда можно использовать TimeToString с параметром даты, без часов и минут. Для всех часовых баров дата будет будет одна, если другая - новый бар. Хотя, можно получить формат и для других отношений.
Что-ж тут сложного-то???
if(IsNewBar(PERIOD_D1)) { Print(Наступил новый день); }
Это может быть в OnTick() или OnCalculate()
Это пользовательская функция
/*****************************IsNewBar*******************************/ bool IsNewBar(ENUM_TIMEFRAMES tf) { datetime tm = iTime(_Symbol, tf, 0); static datetime time = 0; if(tm != time) { time = tm; return true; } return false; }/*******************************************************************/
Чтобы перебрать историю можно вместо нуля поставить переменную во входящие функции…
Что-ж тут сложного-то???
Это может быть в OnTick() или OnCalculate()
Это пользовательская функция
Чтобы перебрать историю можно вместо нуля поставить переменную во входящие функции…
Вы не могли привести боевой пример вашего кода? Допустим, в онинит.
Запустить робот, к примеру, на н1, и в журнал печатать каждый раз, когда появляется новый тф на d1, перебирая последние 100 баров?
Вы не могли привести боевой пример вашего кода? Допустим, в онинит.
Запустить робот, к примеру, на н1, и в журнал печатать каждый раз, когда появляется новый тф на d1, перебирая последние 100 баров?
Я много чего могу. Но ведь выжпрограммисты тоже должны чуток напрягать мозги…
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
коллеги, наведите, пожалуйста, на идею.
На текущем таймфрейме на истории в цикле перебираются бары. Как в этом цикле можно определить наступление нового бара на ТФ старше?
Допустим, перебираем на н1, и нужно определить, что на ТФ д1 новый бар в этом переборе.