4
Подписаться
1271
Подписчики

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

Создано: 2022-06-22 14:23:26, Обновлено: 2023-09-18 20:24:01
comments   1
hits   1736

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

Для отладки стратегий в системе бэктестинга обычно достаточно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, а ее конфигурация показана на снимке экрана:

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

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

Сначала вам нужно открыть браузер Chrome.DevToolsЗатем выполните бэктест, установите код стратегииdebuggerвступит в силу, в противном случаеdebuggerОн будет проигнорирован, и программа стратегии бэктестинга не может быть прервана и остановлена ​​в точке останова. ОткрытьDevToolsПосле бэктестинга стратегии программа стратегии будет прервана на первом сетеdebuggerРасположение,debuggerТакже может быть установлено в глобальной области действия кода политики.

Открываем браузер ChromeDevToolsСуществует два типа инструментов:

  • 1. Щелкните правой кнопкой мыши по странице, чтобы открыть всплывающее меню.

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

При нажатии кнопки «Проверить» отобразится интерфейс DevTools.

  • 2. Используйте сочетания клавиш

Вы также можете использовать сочетание клавиш, чтобы открыть его.Command+Option+I (Mac)илиControl+Shift+I(Windows、Linux)Открыть DevTools

ОткрытьDevToolsПосле этого, как показано на рисунке:

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

Интерфейс отладки в браузере стратегии языка JavaScript

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

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

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

Вручную установите точки останова для отладки

Мы можем нажать на номер строки в левой части кода, чтобы добавить точку останова.

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

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

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

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

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

Дайте этому тестовому коду отладку

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

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

main:17:31 - TypeError: Cannot convert "undefined" to double

Это распространенная ошибка новичков, которые не различают заглавные и строчные буквы в имени атрибута структуры.

var id = exchange.Buy(t.buy, 0.1)  //  下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。

В результате цена передается на биржу. Функция Buy является неопределенной переменной, что приводит к исключению программы и завершению бэктеста.

Когда программа останавливается в точке останова, эта строка кода не выполняется. Продолжаем нажимать кнопку «перейти к следующему вызову функции».

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

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

Отладка бэктестинга стратегии JavaScript в браузере Chrome DevTools

Видите ли, цена — это неопределенная переменная.

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