Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114293
Forex Trader  
Я уже писал о проблеме двойного вызова старта после компиляции, но ответ как то не понял.
А теперь обнаружил еще одну накладку с функцией "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 // При любом другом варианте старта кроме компиляции этой проблемы тоже нет

Forex Trader
114293
Forex Trader  
Ну вообще то на некорректную работу функции "iBarShift" можно было хоть как то отреагировать.
Forex Trader
114293
Forex Trader  
попробуйте проделать те же шаги в функции start, а не в init. при инициализации не гарантируется наличия всей истории. она может быть в процессе подкачки.
вообще, сделайте пожалуйста тестового эксперта, пришлите его мне на stringoATmetaquotesDOTru. я запущу у себя и сравним результаты. будет гораздо проще проблему найти
Forex Trader
114293
Forex Trader  
попробуйте проделать те же шаги в функции 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")));
	}
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий