Я упустил из виду функциональность, аналогичную iBarShift для МТ4. Подскажите как это сделать?
И насколько я понимаю вместо Time[10] нужно использовать CopyTime?
аналог ibarshift:
int iBarOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
аналог Time[]:
Time( int i )
там много еще чего, что пригодится:
double iHigh(string symbol,int tf,int ind) double High( int i ) double iLow(string symbol,int tf,int ind) double Low( int i ) double iClose(string symbol,int tf,int ind) double Close( int i ) double iOpen(string symbol,int tf,int ind) double Open( int i ) double HighOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false ) double LowOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false ) double CloseOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false ) double OpenOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false ) string SPeriod(ENUM_TIMEFRAMES tf) //символьное представление периода datetime iTime( const string symbol, int tf, int ind ) //+------------------------------------------------------------------+ //| Аналог Bars(), не требует предварительной синхронизации истории | //| Вход : symbol - символ в терминале | //| timeframe - таймфрейм | //| Выход : нет | //| Прим. : нет | //+------------------------------------------------------------------+ int BarsSinh( string symbol,ENUM_TIMEFRAMES timeframe ) //+------------------------------------------------------------------+ //| Произвести синхронизацию таймсерии с историей | //| Вход : symbol - символ в терминале | //| tf - таймфрейм | //| Выход : нет | //| Прим. : нет | //+------------------------------------------------------------------+ void SynhronizeSeries( string symbol, ENUM_TIMEFRAMES tf ) //+------------------------------------------------------------------+ //| Проверить наличие истории на дату start_date, если остуствует, | //| то произвести попытку загрузки | //| Вход : symbol - символ в терминале | //| period - таймфрейм | //| start_date - дата проверки истории | //| Выход : код результата выполнения операции подробнее | //| см. https://www.mql5.com/ru/docs/series/timeseries_access | //| Прим. : нет | //+------------------------------------------------------------------+ int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date) //+------------------------------------------------------------------+ //| возвращает строкое значение периода | //+------------------------------------------------------------------+ string GetPeriodName(ENUM_TIMEFRAMES period)
спасибо! полезная вещь
если ничего более вменяемого из стандартного нет, буду использовать алгоритмы из библиотеки
Если кому интересно, нашел альтернативу.
int iBarShiftFast(string symbol, ENUM_TIMEFRAMES timeframe, datetime time) { datetime lastBar; SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE, lastBar); return(Bars(symbol, timeframe, time, lastBar) - 1); }
По моим замерам, ускорение по сравнению с вариантом с CopyTime - от 2 до 7 раз (в зависимости от входных данных). Если есть замечания или баги, напишите плиз.
Если кому интересно, нашел альтернативу.
По моим замерам, ускорение по сравнению с вариантом с CopyTime - от 2 до 7 раз (в зависимости от входных данных). Если есть замечания или баги, напишите плиз.
Спасибо. Попробую юзать.
А может теперь вот так правильней:
А может теперь вот так правильней:
А еще быстрее и правильнее (первый параметр должен быть NULL, с нулем не работает)
int bar = Bars(NULL, 0, t, 32000000000);
Ибо зачем выполнять лишнюю функцию TimeCurrent()
32000000000 - это не от текущего момента, а почти от момента 3000 года
А еще быстрее и правильнее (первый параметр должен быть NULL, с нулем не работает)
Ибо зачем выполнять лишнюю функцию TimeCurrent()
32000000000 - это не от текущего момента, а почти от момента 3000 года
А как же -1? Важный же момент...
А как же -1? Важный же момент...
Не понял, о чем речь?
Функция Bars возвращает количество баров. Когда нам нужно получить индекс бара с индексом 9(сори за тавтологию), она будет возвращать 10, т.к. индекс первого бара равен 0.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я упустил из виду функциональность, аналогичную iBarShift для МТ4. Подскажите как это сделать?
И насколько я понимаю вместо Time[10] нужно использовать CopyTime?