Как вы ищете ошибки в программе? - страница 3

 
Для информации: мы в следующем билде выпустим профайлер на исторических данных, что позволит оптимизировать программы оораздо легче.

Плюс пофиксим тормоза на доступе к истории, особенно на мервых инструментах. Можно будет легко писать глобальные сканеры символов без тормозов.
 
Renat Fatkhullin:
Для информации: мы в следующем билде выпустим профайлер на исторических данных, что позволит оптимизировать программы оораздо легче.

Плюс пофиксим тормоза на доступе к истории, особенно на мервых инструментах. Можно будет легко писать глобальные сканеры символов без тормозов.

Это здорово. Особенно радует фраза "в следующем билде", а то многие анонсы растягиваются на годы. А что такое мертвые инструменты?
 
Каждый кусок кода тестирую по отдельности, проверяю, всё ли работает как надо. Присутствуют разного рода проверки, ошибки логируются, для отладки ещё есть дополнительная опция, которая включает большее количество проверок и логирование ключевых данных. В советнике может быть несколько стратегий, в местах большего влияния человеческого фактора, при добавлении стратегии или индикаторов для получения данных, проверки усилены. Даже, можно сказать, что носом тыкается в проблему, иногда указывается как должно быть, соответствие результата вычисления стратегии ограничениям. Например, нельзя одновременно давать сигнал на покупку и сигнал на закрытие данного типа позиции, даже есть требование указание уникального имени стратеги, нужно в основном для управления ордерами и позициями, да, связано это. И др...
 
Renat Fatkhullin:
Для информации: мы в следующем билде выпустим профайлер на исторических данных, что позволит оптимизировать программы оораздо легче.

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

Я участвовал в разработке довольно серьезных проектов, написаных на MS VC++ с использованием MFC, соответственно, мой "стиль" - в основном идет оттуда.

Сам использую:

0. Пишу код сразу для DEBUG и RELEASE вариантов, имеется ряд макросов, которые в релизе пустые, а в дебаге - раскрываются в проверки, трассировку, дополнительные действия. Причем, трассировка может включаться-выключаться специальным дефайном и для релиза (в дебаге она включена всегда), Алексей прав - когда все грубые ошибки исправлены - трассировка в логфайл здорово помогает в выявлении "особых случаев". Print - практически не использую (здесь тоже полностью согласенс Алексеем насчет его минусов).

1. Все объявляемые переменные всегда сразу при создании заполняются невалидными значениями. Это позволяет легче выявлять ошибки "забыл инициализировать".

2. На входе каждой функции ставлю ASSERT'ы - все входные значения проверяются на валидность-невалидность.

3. Прохожу функцию под отладчиком, стараясь пройти все "линии работы", контролируя значение переменных и результатов.

4. Во всех "подозрительных местах" делаю TRACE'ы в лог-файл всех значений.

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

 
Alexey Volchanskiy:


Кстати, я большие проекты из десятков файлов часто редактирую в Visual Studio. Надо в настройках задать расширения mql , как с++

А я - все до этого просветления никак не дойду.

Хотя, у меня каждый класс оформляется в виде пары mqh-mq5, так что даже простые проекты у меня включают более сотни файлов. В самом файле советника - всегда буквально десяток строк. Объявление объекта-фабрики частей эксперта и подключения шаблона, в котором описаны все стандартные точки входа типа OnInit(), OnTick() и так далее. Но, с объявлением объекта-фабрики - сразу происходит подключение всех необходимых файлов.

Надо бы попробовать перейти к работе на VS...

 
George Merts:

А я - все до этого просветления никак не дойду.

Хотя, у меня каждый класс оформляется в виде пары mqh-mq5, так что даже простые проекты у меня включают более сотни файлов. В самом файле советника - всегда буквально десяток строк. Объявление объекта-фабрики частей эксперта и подключения шаблона, в котором описаны все стандартные точки входа типа OnInit(), OnTick() и так далее. Но, с объявлением объекта-фабрики - сразу происходит подключение всех необходимых файлов.

Надо бы попробовать перейти к работе на VS...

а зачем так делать? ведь класс это исходник включаемого файла, зачем класс или его часть вставлять в mq5?

 
Denis Sartakov:

у меня ошибок не бывает.

брехня...
 
Alexander Bereznyak:

брехня...

Вполне возможно если код из 20 строк. А в большом проекте без ошибок никак.
 
Uladzimir Izerski:

Вполне возможно если код из 20 строк. А в большом проекте без ошибок никак.

речь идет о кодах имеющих практическое применения
Причина обращения: