Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Торгуй как успешные трейдеры - подпишись на их сигналы!
Alexey Oreshkin
3932
Alexey Oreshkin 2016.06.29 00:37 

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

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 Volchanskiy
16678
Alexey Volchanskiy 2016.06.29 00:49  
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 Oreshkin
3932
Alexey Oreshkin 2016.06.29 00:56  
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 Volchanskiy
16678
Alexey Volchanskiy 2016.06.29 01:19  
Alexey Oreshkin:

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

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

билд кстати 1347 

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

Win 10 x64 

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

Alexey Oreshkin
3932
Alexey Oreshkin 2016.06.29 01:25  
Alexey Volchanskiy:

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

Win 10 x64 

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

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

Alexander Bereznyak
21476
Alexander Bereznyak 2016.06.29 07:38  
создавать хендлы индикаторов надо в OnInit, один раз, а затем пользоваться в OnTick, OnTimer и так далее
Alexey Oreshkin
3932
Alexey Oreshkin 2016.06.29 09:49  
Alexander Bereznyak:
создавать хендлы индикаторов надо в OnInit, один раз, а затем пользоваться в OnTick, OnTimer и так далее
Ответ не по теме. Если я сделал так то значит в этом есть необходимость.
Alexander Bereznyak
21476
Alexander Bereznyak 2016.06.29 10:22  
Alexey Oreshkin:
Ответ не по теме. Если я сделал так то значит в этом есть необходимость.
сакральная...
Petros Shatakhtsyan
9197
Petros Shatakhtsyan 2016.06.29 11:12  
Alexey Oreshkin:
Ответ не по теме. Если я сделал так то значит в этом есть необходимость.
Если Вы такой умник, то для чего открыли эту тему ?
Alexey Volchanskiy
16678
Alexey Volchanskiy 2016.06.29 11:15  
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

Alexander Bereznyak
21476
Alexander Bereznyak 2016.06.29 11:34  
хендл индикатора создается не мгновенно
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий