Сыпаться тестер в режиме отладки

 

У меня уже не первый раз случаютяс такие сюрпризы. Бываю я ставлю точки остановки и запускаю отладку. Несколько раз при запуске в какой-то произвольный момент тестер сыпется и приходится начингать всё сначала. Таких случаев в подряд может быть от 1 и до нескольких. Потом ничего не меня т.е. точки остановки те же и всё тоже.. отладка происходит стабильно. Сегодня так вышло, что вообще не возможно отладить бота. Тестер сыпется постоянно, причём в журнале нет никаких ошибок по этому поводу. Как это понимать? Баг?

Вот последние строки в журнале:

2018.08.13 11:27:30.254 USDJPY: symbol synchronized, 3544 bytes of symbol info received
2018.08.13 11:27:30.254 USDJPY: history synchronization started
2018.08.13 11:27:30.255 USDJPY: load 27 bytes of history data to synchronize in 0:00:00.000
2018.08.13 11:27:30.255 USDJPY: history synchronized from 2015.01.02 to 2018.07.19
2018.08.13 11:27:30.258 2016.01.04 18:36:20   deal #2 buy 0.10 GBPJPY at 175.325 done (based on order #2)
2018.08.13 11:27:30.258 2016.01.04 18:36:20   deal performed [#2 buy 0.10 GBPJPY at 175.325]
2018.08.13 11:27:30.258 2016.01.04 18:36:20   order performed buy 0.10 at 175.325 [#2 buy stop 0.10 GBPJPY at 175.325]
2018.08.13 11:27:30.843 2016.01.04 18:36:20   sell stop 0.10 GBPJPY at 174.964 tp: 174.814 (175.295 / 175.327 / 175.295)
2018.08.13 11:27:30.844 2016.01.04 18:36:40   position closed due end of test at 175.295 [#2 buy 0.10 GBPJPY 175.325 tp: 175.446]
2018.08.13 11:27:30.844 2016.01.04 18:36:40   deal #3 sell 0.10 GBPJPY at 175.295 done (based on order #5)
2018.08.13 11:27:30.844 2016.01.04 18:36:40   deal performed [#3 sell 0.10 GBPJPY at 175.295]
2018.08.13 11:27:30.844 2016.01.04 18:36:40   order performed sell 0.10 at 175.295 [#5 sell 0.10 GBPJPY at 175.295]
2018.08.13 11:27:30.844 2016.01.04 18:36:40   order canceled due end of test [#4 sell stop 0.10 GBPJPY at 174.964]
2018.08.13 11:27:30.844 2016.01.04 18:36:40   order canceled due end of test [#3 sell stop 0.10 GBPJPY at 174.964]
2018.08.13 11:27:30.854 final balance 9997.03 USD
2018.08.13 11:27:30.869 GBPJPY,M5: 4450 ticks, 224 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:00:52.828 (including ticks preprocessing 0:00:01.876).
2018.08.13 11:27:30.869 GBPJPY,M5: total time from login to stop testing 0:00:52.875 (including 0:00:00.047 for history data synchronization)
2018.08.13 11:27:30.869 4518 total ticks for all symbols
2018.08.13 11:27:30.869 GBPJPY: generate 3786830 ticks in 0:00:00.641, passed to tester 4544 ticks
2018.08.13 11:27:30.869 GBPUSD: generate 3778339 ticks in 0:00:00.641, passed to tester 160 ticks
2018.08.13 11:27:30.869 USDJPY: generate 3786045 ticks in 0:00:00.594, passed to tester 95 ticks
2018.08.13 11:27:30.878 579 Mb memory used including 15 Mb of history data, 256 Mb of tick data
2018.08.13 11:27:30.878 log file "F:\Soft portable\Terminals\MT_X\Alpari MT5\Tester\Agent-127.0.0.1-3000\logs\20180813.log" written
2018.08.13 11:27:31.295 MetaTester 5 forced to stop
 
Viktar Dzemikhau:

У меня уже не первый раз случаютяс такие сюрпризы. Бываю я ставлю точки остановки и запускаю отладку. Несколько раз при запуске в какой-то произвольный момент тестер сыпется и приходится начингать всё сначала. Таких случаев в подряд может быть от 1 и до нескольких. Потом ничего не меня т.е. точки остановки те же и всё тоже.. отладка происходит стабильно. Сегодня так вышло, что вообще не возможно отладить бота. Тестер сыпется постоянно, причём в журнале нет никаких ошибок по этому поводу. Как это понимать? Баг?

Вот последние строки в журнале:

В общем, я не так часто удивляюсь, но.. это что-то((

В общем, оказывается, что если вставить строки в OnTick() самыми первыми:

  if (TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES) < "2016.01.04 18:20") {
//  Print("TimeCurrent = ", TimeToString(TimeCurrent(), TIME_DATE));
    return;
  }

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

 
Viktar Dzemikhau:

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

Запустил эти строки в скрипте - все нормально. Скрипт отрабатывает корректно, никаких ошибок не выдает. Даты в виде строк понимает правильно.

 
Sergey Savinkin:

Запустил эти строки в скрипте - все нормально. Скрипт отрабатывает корректно, никаких ошибок не выдает. Даты в виде строк понимает правильно.

ДЦ Альпы. Вроде бы не было особых нареканий. Если пойти с другой стороны. Должна быть причина крушения всегда. В любом языке, в любой программе. Верно? У меня причины нет. Просто свалился и забил на работу. Вот в чём косяк. Поэтому хочется понять причину.

 
Viktar Dzemikhau:

ДЦ Альпы. Вроде бы не было особых нареканий. Если пойти с другой стороны. Должна быть причина крушения всегда. В любом языке, в любой программе. Верно? У меня причины нет. Просто свалился и забил на работу. Вот в чём косяк. Поэтому хочется понять причину.

Поставьте принты через строчку. Может, не здесь ошибка. С точки зрения кода все верно, иначе у меня тоже был бы сбой. Правда, я проверял на FORTS. И выводите код ошибки. Маловероятно, что он вылетает "просто так". Ошибку-то терминал должен сгенерировать.

 
Sergey Savinkin:

Поставьте принты через строчку. Может, не здесь ошибка. С точки зрения кода все верно, иначе у меня тоже был бы сбой. Правда, я проверял на FORTS. И выводите код ошибки. Маловероятно, что он вылетает "просто так". Ошибку-то терминал должен сгенерировать.

Так и сделал. Накидал перед каждым вызовом функции и после вызовов принты с _LastError и запустил. Ошибок не нет т.е. везед 0. Но терминал каким-то чудных образом не обвалился ни разу. Щяс буду по пару принтов убирать и наблюдать. Дичь какая-то((

Убрал все распринтовки ошибок, ошибки прекратились.  Запустил раз 10 без косяков. Потом опять началось такое же самое, как и раньше.

 Точно баг. В общем, 10 раз примерно запустал с такими строками вверху:

  if (TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES) < "2016.01.04 18:20") {
//  Print("TimeCurrent = ", TimeToString(TimeCurrent(), TIME_DATE));
    return;
  }

Потом решил чутка время изменить, потому что там какой-то косяк:

  if (TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES) < "2016.01.04 19:50") {
//  Print("TimeCurrent = ", TimeToString(TimeCurrent(), TIME_DATE));
    return;
  }

Ну и начало сыпаться. Вернул время на предыдущее и опять всё нормально дебажиться.

 
У меня работают оба варианта. Дело тут точно не в коде. Проверяйте, что выдает TimeCurrent(), может, время сбивается. Может, терминал глючит, может, винда. Напишите просто Print(TimeCurrent()) перед условием. Хотя может, ошибка и в другом месте кода.
 
Sergey Savinkin:
У меня работают оба варианта. Дело тут точно не в коде. Проверяйте, что выдает TimeCurrent(), может, время сбивается. Может, терминал глючит, может, винда. Напишите просто Print(TimeCurrent()) перед условием. Хотя может, ошибка и в другом месте кода.

Я попробывал перед нужным моментом скорость уменьшать прогона. Пока что терпимо.

 
Кстати, сегодня специально изменить одну вещь. Пробывал отдебажить. Ошибок нет. Если принтануть тот кусок кода, ошибка находиться. Отладичк подгулявший. Его нужно до ума доводить. Ещё косяк, что не возможно в отладчике просмотреть данные из классов и структур. Тоже не вариант для сложных проектов.
 
Viktar Dzemikhau:
Кстати, сегодня специально изменить одну вещь. Пробывал отдебажить. Ошибок нет. Если принтануть тот кусок кода, ошибка находиться. Отладичк подгулявший. Его нужно до ума доводить. Ещё косяк, что не возможно в отладчике просмотреть данные из классов и структур. Тоже не вариант для сложных проектов.

Напишите, что за ошибка, может, кому-то эта тема поможет.

 
Sergey Savinkin:

Напишите, что за ошибка, может, кому-то эта тема поможет.

В тот то и косяк, что ошибок вообще нет. Могу даже видео записать, но, навряд ли, кто-то будет этим заниматься. Многие вопросы висят годами. Я говорю, не только о своих, но и о вопросах от других форумчан.