В процессе загрузки ресурсов... загрузка...

JavaScript стратегия backtesting исправлена в DevTools браузера Chrome

Автор:Изобретатели количественного измерения - мечты, Создано: 2022-06-24 14:10:02, Обновлено: 2023-09-25 19:50:23

img

JavaScript стратегия backtesting исправлена в DevTools браузера Chrome

Для стратегий отладки в системах обратного тестирования, как правило, толькоLog()Для стратегии отладки в программе DEBUG очень малоопытным программистам.JavaScriptязык,Chromeбраузер поддерживает его лучше, что может реализовать дебютирование точки прерывания, одноэтапное дебютирование, мониторинг переменных значений, мониторинг выражений и так далее во время бэкстестинга.JavascriptОбратите внимание, что этот метод отладки поддерживается только дляJavaScriptязыковые стратегии на платформе FMZ.

Вdebuggerкомандование на платформе FMZ

Вставкаdebuggerкоманда в стратегический код языка JavaScript на FMZ позволяет прерывать исполнение программы во время бэкстестинга.

Мы используем следующий код стратегии испытания:

/*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) {
            // When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute
            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 spot, конфигурация показана на скриншоте:

img

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

Нам нужно открытьDevToolsперед выполнением обратного теста, тоdebuggerВ противном случаеdebuggerНеобходимо, чтобы эта программа была полностью проигнорирована, и программа стратегии обратного тестирования не может быть прервана или остановлена на перерыве.DevToolsдля обратного тестирования стратегии, программа стратегии будет прервана при первой настройкеdebuggerПоложение иdebuggerмогут быть также установлены в глобальном поле действия кодекса стратегии.

Есть два способа для нас, чтобы открытьDevToolsинструмент браузера Chrome:

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

    Мы нажимаем Check для отображения интерфейса DevTools.

    1. Используйте клавиши короткого пути.

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

После открытияDevToolsкак показано на рисунке:

img

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

После вышеуказанного теста, когда мы нажимаем кнопку Start Backtest для обратного тестирования стратегии, стратегия прерывается и ждет на соответствующем положении, потому чтоdebuggerКоманда установлена в коде.

img

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

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

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

img

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

img

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

img

Проверить код DEBUG

img

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

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

Не быть чувствительным к большим и малым буквам для структуры вносить имя является распространенной ошибкой, совершаемой новичками.

var id = exchange.Buy(t.buy, 0.1)  //  When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute

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

Когда программа останавливается в положении точки прерывания, эта строка кода не выполняется. Мы продолжаем нажимать кнопку step into next function call.

img

Иди на обмен. Купи функцию вызова.

img

Здесь мы видим, что цена является неопределенной переменной.

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


Связанные

Больше