Не пойму ошибка это или так задумано?

 
Я уже писал о проблеме двойного вызова старта после компиляции, но ответ как то не понял.
А теперь обнаружил еще одну накладку с функцией "iBarShif" и тоже после компиляции. Причем ошибка возникает только при вызове функции на томже периоде что и установлен на грфике.
Ниже привожу результат эксперимента (период на графике=60 не менялся)

int init()
  {
....
Print( "init(): iBarShift( Symbol(), 60, StrToTime(\"2005.09.02 00:00\"))= "+iBarShift( Symbol(), 60, StrToTime("2005.09.02 00:00")));
   return(0);
  }
int start()
  {
Print( "start(): iBarShif( Symbol(), 60, StrToTime(\"2005.09.02 00:00\"))t= "+iBarShift( Symbol(), 60, StrToTime("2005.09.02 00:00")));



20051007.log


//========= После компиляции вызов с совпадающим периодом =========
09:31:26 Compiling 'MACD_TEST'
09:31:26 MACD_TEST EURUSD,H1: loaded successfully
09:31:26 MACD_TEST EURUSD,H1: init(): iBarShift( Symbol(), 60, StrToTime("2005.09.02 00:00"))= -1 // Неправильная работа функции после компиляции на совпадающем периоде
09:31:26 MACD_TEST EURUSD,H1: initialized
09:31:26 MACD_TEST EURUSD,H1: start(): iBarShif( Symbol(), 60, StrToTime("2005.09.02 00:00"))t= 603
09:31:26 MACD_TEST EURUSD,H1: start(): iBarShif( Symbol(), 60, StrToTime("2005.09.02 00:00"))t= 603 // Старая проблема двойного вызова после перекомпиляции
//========= После компиляции вызов с другим периодом =========
09:31:55 Compiling 'MACD_TEST'
09:31:55 MACD_TEST EURUSD,H1: loaded successfully
09:31:55 MACD_TEST EURUSD,H1: init(): iBarShift( Symbol(), 30, StrToTime("2005.09.02 00:00"))= 1207 // На графике период=60 вызов с другим периодом и проблема исчезла
09:31:55 MACD_TEST EURUSD,H1: initialized
09:31:55 MACD_TEST EURUSD,H1: start(): iBarShif( Symbol(), 30, StrToTime("2005.09.02 00:00"))t= 1207
09:31:55 MACD_TEST EURUSD,H1: start(): iBarShif( Symbol(), 30, StrToTime("2005.09.02 00:00"))t= 1207 // Эта проблема осталась
09:32:18 MACD_TEST EURUSD,H1: removed
//========= Перекомиляция при отсоединенном индикаторе=========
09:32:29 Compiling 'MACD_TEST'
//========= После отсоединения и повторного подключения вызов с совпадающим периодом =========
09:32:32 MACD_TEST EURUSD,H1: loaded successfully
09:32:33 MACD_TEST EURUSD,H1: init(): iBarShift( Symbol(), 60, StrToTime("2005.09.02 00:00"))= 603 // При любом другом варианте старта кроме компиляции проблемы нет
09:32:33 MACD_TEST EURUSD,H1: initialized
09:32:33 MACD_TEST EURUSD,H1: start(): iBarShif( Symbol(), 60, StrToTime("2005.09.02 00:00"))t= 603 // При любом другом варианте старта кроме компиляции этой проблемы тоже нет

 
Ну вообще то на некорректную работу функции "iBarShift" можно было хоть как то отреагировать.
 
попробуйте проделать те же шаги в функции start, а не в init. при инициализации не гарантируется наличия всей истории. она может быть в процессе подкачки.
вообще, сделайте пожалуйста тестового эксперта, пришлите его мне на stringoATmetaquotesDOTru. я запущу у себя и сравним результаты. будет гораздо проще проблему найти
 
попробуйте проделать те же шаги в функции start, а не в init. при инициализации не гарантируется наличия всей истории. она может быть в процессе подкачки.

Я специально привел кусок кода, чтобы было понятно, что я проверял оба варианта.
Для себя я эту провлему решил с ухищрениями, а подробный отчет об экперименте привел для вас потому что мне не безразлична чистота вашего кода.
Если у вас найдется время перечитайте внимательней первое послание.
Если нет я это тоже пойму, просто скажите что сейчас не до того.


вообще, сделайте пожалуйста тестового эксперта, пришлите его мне на stringoATmetaquotesDOTru. я запущу у себя и сравним результаты. будет гораздо проще проблему найти


Запускайте...
#property  indicator_separate_window
int init() 
  {
Print( "init(): iBarShift( Symbol(), 60, StrToTime(\"2005.09.02 00:00\"))= "+iBarShift( Symbol(), 60, StrToTime("2005.09.02 00:00")));
   return(0);
  }
int start()
  {
Print( "start(): iBarShif( Symbol(), 60, StrToTime(\"2005.09.02 00:00\"))t= "+iBarShift( Symbol(), 60, StrToTime("2005.09.02 00:00")));
	}
Причина обращения: