Способы поиска ошибок

Как выявлять ошибки в алгоритме
Выявление ошибок в алгоритме возможно при помощи двух способов:

1. Использование ParamDebug

Данный способ позволяет выводить промежуточные значения алгоритма при тестировании в отладочную таблицу, а также проверять правильность логики алгоритма по этим значениям.
Рисунок 1 – Отладочная таблица
Например, выведем значения индикатора «Полосы Боллинджера» для проверки в отладочную таблицу. При наведении на какой-либо бар, в таблице выведется текущее значение индикатора на этом баре.
Рисунок 2 – Проверка значений через ParamDebug
Также, чтобы убедиться в правильности расчетов, значения в отладочной таблице данного индикатора можно сравнить со значениями готового индикатора (при его наличии) в TradingView.
Рисунок 3 – TradingView
Если в итоге значения с ParamDebug не сходятся, то можно в TradingView посмотреть код данного индикатора, разбить его на части и выводить промежуточные значения в TradingView. (Рисунок 4)

Процесс проверки:
1. Открываем код индикатора и делаем его копию, чтобы появилась возможность его редактировать.

Рисунок 5 – Копия кода индикатора
2. Изменяем код, например, хотим проверить значения переменной «dev» с нашим значением в ParamDebug. Значения «dev» выводится с помощью функции plot, как показано на рисунке ниже.

Рисунок 6 – Вывод значений
Таким образом, можно сравнивать промежуточные значения кода с промежуточными значениями в TradingView для проверки правильности расчетов.

Это один из вариантов проверки. Также можно сравнить значения с помощью Excel таблицы, если ТЗ в таблице и есть форма расчетов для проверки, например для расчета индикатора «Коэффициента корреляции» (рисунок 7).
Рисунок 7 – Проверка значений через Excel таблицу
Процесс проверки через Excel таблицу:

  1. Открываем график двух инструментов, например (BTCUSDT и BNBUSDT);
  2. Подставляем значения закрытой свечи (кол-во зависит от периода расчета) этих двух инструментов в таблицу;
  3. Сверяем значения xi, yi, xi*yi, x2, y2 со значениями, выведенными в ParamDebug.
Бывают такие ситуации, когда при проверке выше указанными способами, промежуточные и итоговые значения совпадают, но алгоритм не правильно работает. Один из вариантов ошибки, это использование глобальной переменной, которая принимает какие-то значения в методе при определенном условии, но при вызове функции с другим параметром, алгоритм не срабатывает. Данную ошибку можно найти при помощи покрытия разных участков кода ParamDebug и использовании отладки в Visual Studio.

Например, у нас есть несколько объектов класса и функция, принимающая данные объекты, которая вызывается каждый бар.
Рисунок 7 - Пример кода
В данном случае, при таймфрейме 1 и 5 минут, переменная _date будет перезаписываться каждую минуту и расчет будет верным только для 1 минуты, а для 5 минуты условие никогда не будет true. Таким образом, алгоритм будет рассчитывать только для 1 минуты. Исправить это можно, если переменную _date вынести в класс, чтобы каждый объект сохранял информацию по тому таймфрейму, который ему ранее присвоился.
Таким образом, глобальные переменные, используемые в расчетах функциях, принимающие разные таймфреймы, переносить в класс.


2. Использование модуля для отладки кода через Visual Studio

Данный способ позволяет тестировать/проверять значения с помощью break points в Visual Studio. Можно комбинировать с выше описанными способами проверки.
Отладка скрипта через Visual Studio
Рисунок 8 - отладка в Visual Studio
Подключение модуля для отладки показано будет в другой статье.

Check List:
  1. Покрыть код ParamDebug, где требуется проверить правильность работы алгоритма
  2. Сравнить значения с TradingView (при наличии существующего скрипта) и разбить код на части, выводить промежуточные значения
  3. Использовать Excel (если есть расчеты)
  4. Debug в Visual Studio

Пример поиска ошибка через ParamDebug или отладки в Visual Studio:
Рисунок 8 - Пример кода
Данное покрытие кода позволяет просмотреть разные участки кода, которые будут выполняться. Если на отладочной таблице в ETS будет видно, к примеру, ParamDebug("Test", 1) и не видно ParamDebug("Test", 2), это означает, что номер бара меньше указанного значения. Таким способом, покрывая ParamDebug можно идти в глубину кода и просматривать, в какие моменты код срабатывает или нет.

Check List ParamDebug/отладка в Visual Studio:
  1. Покрыть те участки кода, где необходимо посмотреть исполнения кода;
  2. Если выполняется код до функции, но функция пропускается, то углубляться в данную функцию и покрывать ее ParamDebug;
  3. Также углублять в подфункции (при наличии);
  4. Просматривать значения переменных, при которых не выполняется код;
  5. Сравнивать значения выше указанными способами (Excel, TradingView).

Check List Excel:
  1. Заполнять таблицу необходимыми значениями при расчетах;
  2. Разбивать формулу расчета на части;
  3. Сверять значения каждой части формулы с полученными.

Check List TradingView (при наличии готового кода):
  1. Найти индикатор;
  2. Скопировать скрипт, чтобы в дальнейшем изменять;
  3. Разбить алгоритм на части;
  4. Выводить промежуточные значения на график и сверять со своими промежуточными.
Все возможности открывает платформа ETS.