Функция Time[0] возвращает некорректное значение на счете Pro.ecn - помогите разобраться

 

Добрый день

Имеется советник, работает на реале ( альпари 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 все работает ? 

 

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;


Попробуйте распринтовать все действия советника. И когда случится глюк, у вас будут все данные.