
Для отладки стратегий в системе бэктестинга обычно достаточноLog()функция. Эффективность такого рода ОТЛАДКИ очень низкая, и она сложна для новичков, не имеющих большого опыта в тестировании программ. дляJavaScriptСтратегия отладки языкаChromeБраузеры имеют лучшую поддержку. Он может реализовывать отладку по точкам останова, пошаговую отладку, мониторинг значений переменных, мониторинг выражений и т. д. во время бэктестинга. Давайте теперь узнаем, как использовать этот метод для управления ФМЗ.JavascriptDEBUG при обратном тестировании стратегий на языке. Обратите внимание, что только на FMZJavascriptПолитики языка поддерживают такой подход к отладке.
debuggerинструкцияВставьте в код политики язык JavaScript на FMZdebuggerИнструкция, которая может прервать выполнение программы во время бэктестинга.
Мы используем следующий код стратегии тестирования:
/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
function main() {
var n = 1
while (true) {
var t = exchange.GetTicker()
debugger
var r = exchange.GetRecords()
if (n == 1) {
// 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性,属性名区分大小写
var id = exchange.Buy(t.buy, 0.1)
var orderBuy = exchange.GetOrder(id)
}
Sleep(500)
}
}
Из кода конфигурации бэктеста
/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
Вы можете видеть, что биржа, которую мы добавили во время бэктеста, — это спотовая биржа Binance, а ее конфигурация показана на снимке экрана:

Продолжая рассматривать код стратегии, мы видим, чтоvar t = exchange.GetTicker()Под этим предложением мы написалиdebuggerЭта инструкция эквивалентна установке точки останова, и программа остановится, когда достигнет этой позиции. Несколькоdebugger, но делать этого не рекомендуется. Просто установите точку останова в определенном месте. Последующие точки останова можно установить в отладочной функции браузера DevTools.
Сначала вам нужно открыть браузер Chrome.DevToolsЗатем выполните бэктест, установите код стратегииdebuggerвступит в силу, в противном случаеdebuggerОн будет проигнорирован, и программа стратегии бэктестинга не может быть прервана и остановлена в точке останова. ОткрытьDevToolsПосле бэктестинга стратегии программа стратегии будет прервана на первом сетеdebuggerРасположение,debuggerТакже может быть установлено в глобальной области действия кода политики.
Открываем браузер ChromeDevToolsСуществует два типа инструментов:

При нажатии кнопки «Проверить» отобразится интерфейс DevTools.
Вы также можете использовать сочетание клавиш, чтобы открыть его.Command+Option+I (Mac)илиControl+Shift+I(Windows、Linux)Открыть DevTools。
ОткрытьDevToolsПосле этого, как показано на рисунке:

После вышеприведенного теста, когда мы нажимаем кнопку «Начать бэктестинг», чтобы протестировать стратегию, из-за настройки в кодеdebuggerИнструкция, стратегия прерывается и ждет в соответствующей позиции. Бэктест, похоже, завис, как показано ниже:

Видно, что в стратегииdebuggerОтметьте позицию прерывания. Вся программа выполняет только n, назначенное 1, и t, назначенноеGetTickerРыночные данные, возвращаемые функцией. В красном поле на рисунке выше вы можете видеть конкретные значения переменных, что делает очень удобным наблюдение за значениями различных переменных во время работы стратегии.
Мы можем нажать на номер строки в левой части кода, чтобы добавить точку останова.

Нажмите «возобновить выполнение скрипта», чтобы возобновить выполнение скрипта. Программа будет запущена до следующей точки останова. Если точки останова нет или программа имеет ошибку и вызывает исключение, бэктест будет завершен.

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


В этот момент, когда мы продолжим нажимать кнопку «возобновить выполнение скрипта» для продолжения выполнения, в стратегической программе возникнет исключение, бэктест завершится, и будет выведено сообщение об ошибке исключения.
main:17:31 - TypeError: Cannot convert "undefined" to double
Это распространенная ошибка новичков, которые не различают заглавные и строчные буквы в имени атрибута структуры.
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
В результате цена передается на биржу. Функция Buy является неопределенной переменной, что приводит к исключению программы и завершению бэктеста.
Когда программа останавливается в точке останова, эта строка кода не выполняется. Продолжаем нажимать кнопку «перейти к следующему вызову функции».

Перейти к вызову функции exchange.Buy.

Видите ли, цена — это неопределенная переменная.
Используя описанный выше метод, можно легко шаг за шагом находить ошибки в программе. Множество ошибок, которые часто допускают новички: например, выход за пределы индексов массива, ссылки на неопределенные переменные, неправильное написание выражений и т. д. Таким образом, отладка программы становится простой.