JavaScript strategi backtesting adalah debug dalam DevTools penyemak imbas Chrome

Penulis:Mimpi kecil, Dicipta: 2022-06-24 14:10:02, Dikemas kini: 2023-09-25 19:50:23

img

JavaScript strategi backtesting adalah debug dalam DevTools penyemak imbas Chrome

Untuk strategi debugging dalam sistem backtesting, biasanya hanyaLog()fungsi boleh digunakan, jadi DEBUG sangat tidak cekap dan sukar untuk penguji program pemula dengan sedikit pengalaman.JavaScriptBahasa,Chromepenyemak imbas menyokongnya lebih baik, yang boleh melaksanakan breakpoint debugging, debugging satu langkah, pemantauan nilai pembolehubah, pemantauan ungkapan dan sebagainya semasa backtesting.JavascriptNota bahawa kaedah penyesuaian ini hanya disokong untukJavaScriptstrategi bahasa di platform FMZ.

PeraturandebuggerPerintah di platform FMZ

Memasukkandebuggerperintah ke dalam kod strategi bahasa JavaScript pada FMZ membolehkan pelaksanaan program terganggu semasa backtesting.

Kami menggunakan kod strategi ujian berikut:

/*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)
    }
}

Mengkonfigurasi kod dari backtesting

/*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"}]
*/

Di sini kita dapat melihat bahawa pertukaran yang kita tambahkan untuk backtesting adalah Binance spot, konfigurasi adalah seperti yang ditunjukkan dalam tangkapan skrin:

img

Meneruskan melihat kod strategi, kita boleh melihat bahawa kita menulisdebuggerPerintah di bawahvar t = exchange.GetTicker()kalimat, yang bersamaan dengan memukul titik henti di sini, dan pelaksanaan program akan berhenti di kedudukan ini.debuggers boleh digunakan dalam kod strategi, tetapi tidak disyorkan untuk melakukannya, hanya menggunakan titik henti di lokasi tertentu, dan titik henti berikutnya boleh ditetapkan dalam fungsi debugging DevTools penyemak imbas.

Kita perlu bukaDevToolsdaripada penyemak imbas Chrome sebelum menjalankan backtest, makadebuggeryang ditetapkan dalam kod strategi akan berkuat kuasa.debuggerakan diabaikan, dan program strategi backtesting tidak boleh diganggu atau dihentikan pada titik henti.DevToolsuntuk backtest strategi, program strategi akan terganggu pada tetapan pertamadebuggerkedudukan, dandebuggerjuga boleh ditetapkan dalam skop global kod strategi.

Terdapat dua cara untuk kita membukaDevToolsalat pelayar Chrome:

    1. Kami menggunakan klik kanan pada halaman untuk membuka menu pop-up

    Kita klik Check untuk memaparkan antara muka DevTools.

    1. Gunakan kekunci pintasan

    Anda juga boleh menggunakan kekunci pintasan untuk membukaDevToolsdengan menekanCommand+Option+I (Mac)atauControl+Shift+I (Windows, Linux).

Selepas pembukaanDevToolsseperti yang ditunjukkan dalam gambar:

img

Antara muka DEBUG dalam penyemak imbas untuk strategi bahasa JavaScript

Selepas ujian di atas, apabila kita klik butang Start Backtest untuk backtest strategi, strategi berhenti dan menunggu di kedudukan yang sepadan keranadebuggerperintah ditetapkan dalam kod. backtest nampaknya terjebak, seperti berikut:

img

Ia boleh dilihat bahawa pada kedudukan yang ditandakan terganggu oleh strategidebugger, keseluruhan program hanya menjalankan data pasaran yang dikembalikan oleh fungsi dengan nilai n adalah 1, dan nilai t adalahGetTickerAnda boleh melihat nilai pembolehubah tertentu dalam kotak merah pada gambar di atas, supaya mudah untuk memerhatikan nilai setiap pembolehubah apabila strategi berjalan.

Tetapkan titik henti untuk debugging secara manual

Kita boleh klik nombor baris di sebelah kiri kod untuk menambah titik henti.

img

Klik resume script execution untuk meneruskan pelaksanaan skrip, program akan berjalan ke titik hentian seterusnya, jika tidak ada titik hentian atau program mempunyai ralat yang menyebabkan pengecualian, backtest akan berakhir.

img

Terdapat juga beberapa butang yang boleh dilaksanakan, contohnya, melangkau fungsi seterusnya, pergi ke panggilan fungsi seterusnya, keluar dari panggilan fungsi semasa, melaksanakan langkah tunggal, abaikan semua titik henti, dan lain-lain.

img

Uji kod DEBUG

img

Pada ketika ini, apabila kita terus mengklik butang resume script execution untuk meneruskan pelaksanaan, pengecualian akan berlaku dalam program strategi, dan backtest akan berakhir dengan mesej ralat pengecualian dicetak.

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

Tidak sensitif huruf besar untuk nama sumbangan struktur adalah kesilapan biasa yang dilakukan oleh pemula.

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

Fungsi beli adalah pembolehubah yang tidak ditakrifkan, yang menyebabkan pengecualian program dan menamatkan backtest.

Apabila program berhenti di kedudukan titik henti, baris kod ini tidak dilaksanakan. kita terus klik step ke fungsi seterusnya call butang.

img

Pergi ke pertukaran. Beli panggilan fungsi.

img

Di sini kita boleh lihat bahawa harga adalah pembolehubah yang tidak ditakrifkan.

Dengan menggunakan pendekatan di atas, mudah untuk mengetahui bug program langkah demi langkah. Ramai pemula sering membuat kesilapan, contohnya, indeks array diakses di luar batas, pembolehubah yang tidak ditakrifkan dirujuk, ungkapan ditulis dengan tidak betul, dll, semuanya mudah untuk DEBUG program.


Berkaitan

Lebih lanjut