Чудеса отладчика ?

 

Товарищи, прошу указать на место где я торможу или это торможу не я всё таки.
Есть вот такой код:

void OnTick()
  {
      int handle=INVALID_HANDLE;
      int x=0;         
      
      for(int i=5;i<10;i++){
      
         handle=iMACD(Symbol(),Period(),i,26,9,PRICE_CLOSE);  
         if (handle==INVALID_HANDLE) continue;
         double mx[];
         x=CopyBuffer(handle,0,0,100,mx);
         Print("x="+(string)x+"  "+(string)GetLastError());         
      }                  
  }

И если я запускаю этот код в отладчике через Ctrl+F5, ставлю в начале цикла точку остановки, то я ожидаю увидеть что переменная х будет = 100 на каждой итерации цикла, но она почему то всегда возвращает -1 и код ошибки при этом 4806, т.е. ERR_INDICATOR_DATA_NOT_FOUND.
Опытным путём выяснил что если я в строке

handle=iMACD(Symbol(),Period(),i,26,9,PRICE_CLOSE);

поменяю переменную i на число, то всё начинает работать как и должно.
Вопрос - почему так?

п.с: для тех кто читает по диагонали - ошибка возникает только при пошаговой отладке в тестере. Во всех остальных вариантах всё работает.

 
Alexey Oreshkin:

Товарищи, прошу указать на место где я торможу или это торможу не я всё таки.
Есть вот такой код:

И если я запускаю этот код в отладчике через Ctrl+F5, ставлю в начале цикла точку остановки, то я ожидаю увидеть что переменная х будет = 100 на каждой итерации цикла, но она почему то всегда возвращает -1 и код ошибки при этом 4806, т.е. ERR_INDICATOR_DATA_NOT_FOUND.
Опытным путём выяснил что если я в строке

поменяю переменную i на число, то всё начинает работать как и должно.
Вопрос - почему так?

п.с: для тех кто читает по диагонали - ошибка возникает только при пошаговой отладке в тестере. Во всех остальных вариантах всё работает.

Удивился и решил проверить, билд 1347, пошаговая отладка через F11

2016.06.29 01:48:12.258 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:10.367 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:08.509 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:06.499 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:02.616 TestHandle (EURUSD,M1) x=100  0

 
Alexey Volchanskiy:

Удивился и решил проверить, билд 1347, пошаговая отладка через F11

2016.06.29 01:48:12.258 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:10.367 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:08.509 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:06.499 TestHandle (EURUSD,M1) x=100  0

2016.06.29 01:48:02.616 TestHandle (EURUSD,M1) x=100  0

Ошибка только при пошаговой отладке и всё!
вот скрин:

справа внизу переменная х равна -1 

билд кстати 1347 

 
Alexey Oreshkin:

Ошибка только при пошаговой отладке и всё!
вот скрин:

справа внизу переменная х равна -1 

билд кстати 1347 

Чудеса какие-то... https://gyazo.com/b19b7ce359ddcf4bf09487955490e772

Win 10 x64 

Я бы терминал переставил 

 
Alexey Volchanskiy:

Чудеса какие-то... https://gyazo.com/b19b7ce359ddcf4bf09487955490e772

Win 10 x64 

блин, что за **** (
весь день с этим сегодня бьюсь
это скрин сделан при тестировании через  CTRL+F5 или просто через F5? 
ошибка возникает при отладке через тестер, т.е. только через CTRL+F5 (синий кружок), а при отладке в реалтайме, т.е. через F5 всё работает правильно.

п.с. терминал тут не причём, в другом проверял - таже проблема 

 
создавать хендлы индикаторов надо в OnInit, один раз, а затем пользоваться в OnTick, OnTimer и так далее
 
Alexander Bereznyak:
создавать хендлы индикаторов надо в OnInit, один раз, а затем пользоваться в OnTick, OnTimer и так далее
Ответ не по теме. Если я сделал так то значит в этом есть необходимость.
 
Alexey Oreshkin:
Ответ не по теме. Если я сделал так то значит в этом есть необходимость.
сакральная...
 
Alexey Oreshkin:
Ответ не по теме. Если я сделал так то значит в этом есть необходимость.
Если Вы такой умник, то для чего открыли эту тему ?
 
Alexey Oreshkin:

блин, что за **** (
весь день с этим сегодня бьюсь
это скрин сделан при тестировании через  CTRL+F5 или просто через F5? 
ошибка возникает при отладке через тестер, т.е. только через CTRL+F5 (синий кружок), а при отладке в реалтайме, т.е. через F5 всё работает правильно.

п.с. терминал тут не причём, в другом проверял - таже проблема 

Я запускал через F5, пропустил ваше условие, сорри.

Запустил через CTRL+F5, вообще отладка не пошла, все тупо висело. Запустил в обычном тестере с реальными тиками, подкачал историю, прогнал один раз. Потом на том же периоде  (28-29 июня) pапустил через CTRL+F5. При первом тике выдавал x=-1, при следующих 100, это и в тестере печатается. В чем дело, не знаю. Кстати, в редакторе в настройке отладки ставлю "на основе реальны[ тиков", нажимаю ОК, захожу туда еще раз - выбрано "все тики".


2016.06.29 11:58:32.610 2016.06.28 00:02:00   x=100  4806

2016.06.29 11:58:31.536 2016.06.28 00:02:00   x=100  4806

2016.06.29 11:58:30.314 2016.06.28 00:02:00   x=100  4806

2016.06.29 11:57:55.796 2016.06.28 00:01:30   x=-1  4806

2016.06.29 11:57:53.161 2016.06.28 00:01:30   x=-1  4806

2016.06.29 11:57:50.365 2016.06.28 00:01:30   x=-1  4806

2016.06.29 11:57:20.358 2016.06.28 00:01:30   x=-1  4806

2016.06.29 11:57:10.689 2016.06.28 00:01:30   x=-1  4806

2016.06.29 11:57:05.121 EURUSD,M1: testing of Experts\Tests\TestHandle.ex5 from 2016.06.28 00:00 to 2016.06.29 00:00 started

 
хендл индикатора создается не мгновенно
Причина обращения: