iBarShift
Поиск бара по времени. Функция возвращает индекс бара, в который попадает указанное время.
Объясните цель искать индекс нулевого бара, ели это всегда должно быть 0 ?
Возвращаемое значение, если бар на указанное время не найден. При значении exact=false iBarShift возвращает индекс ближайшего бара, у которого время открытия меньше указанного (time_open<time). Если такой бар не найден (нет истории раньше указанного времени), то функция вернет -1. Если exact=true, то ближайший бар не ищется и функция iBarShift сразу возвращает -1.
Скорее всего функция не может найти указанный бар по времени.
Такое бывает, например при отсутствии котировок.
В том числе: на pro.ecn счетах могут быть пропуски баров , функция не может найти бар и возвращает ближайший.
Например не полностью закачана история.
Вы могли наблюдать на некоторых счетах такую картинку, когда вместо баров стоят прочерки.
Или TimeOpen принимает какое -то другое значения.
Попробуйте Отладкой найти причину.
Я бы добавил дополнительно проверку :
int periods; string symbol=Symbol(); int ibeg=iBarShift(symbol,Period(),TimeOpen); if(Time[ibeg]<=TimeOpen) periods=ibeg; else periods=0;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день
Имеется советник, работает на реале ( альпари standard ) , точно такой же запустил на счете pro.ecn. Советник работает на H4,имеет временнОй стоп, то есть должен закрыть позицию через определенное число интервалов H4 (например 40) .
Количество интервалов определяется так :
int periods;
string symbol = Symbol();
int ibeg=iBarShift(symbol,Period(),TimeOpen);
int iend=iBarShift(symbol,Period(),Time[0]);
periods= ibeg- iend;
где TimeOpen - время открытия ордера
В понедельник в начале дня (3 минуты первого) открывается позиция на обоих счетах, на счете standard - все нормально, функция,приведенная выше начинает отсчитывать периоды, начиная с нуля и тд.
На счете pro.ecn значение periods через несколько секунд оказывается равным 13490 ( ??) и ордер закрывается по временноОму стопу.Через несколько секунд он открывается опять, (поскольку позиция свободна и основной критерий открытия по алгоритму выполняется ) , функция вычисления периодов дает опять несуразное значение , и ордер опять закрывается... Так происходит 30 раз подряд, пока я не вмешиваюсь и не останавливаю советник (потери 50 баксов -((( ) .На счете standard советник открыл один ордер и продолжает прекрасно работать дальше - функция определения кол-ва периодов работает корректно ( и уже работает полгода,а ecn открыл только неделю назад). Помогите пожалуйста разобраться - почему значение Time[0] оказывается некорректным ? Может нужно использовать ф-цию TimeCurrent вместо Time[0] ? Но почему на счете standard все работает ?