JavaScript strategi backtesting adalah debugged di DevTools dari browser Chrome

Penulis:Mimpi kecil, Dibuat: 2022-06-24 14:10:02, Diperbarui: 2023-09-25 19:50:23

img

JavaScript strategi backtesting adalah debugged di DevTools dari browser Chrome

Untuk strategi debugging dalam sistem backtesting, biasanya hanyaLog()fungsi dapat digunakan, sehingga DEBUG sangat tidak efisien dan sulit untuk pemula tes program dengan sedikit pengalaman.JavaScriptbahasa,Chromebrowser mendukungnya lebih baik, yang dapat menerapkan breakpoint debugging, debugging satu langkah, pemantauan nilai variabel, pemantauan ekspresi dan sebagainya selama backtesting.Javascriptbahasa strategi backtesting pada platform FMZ. Perhatikan bahwa metode debugging ini hanya didukung untukJavaScriptstrategi bahasa di platform FMZ.

PeraturandebuggerKomando di platform FMZ

Masukkandebuggerperintah ke dalam kode strategi bahasa JavaScript pada FMZ memungkinkan eksekusi program untuk terganggu selama backtesting.

Kami menggunakan kode strategi tes 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 kode 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 bisa melihat bahwa pertukaran yang kami tambahkan untuk backtesting adalah Binance spot, konfigurasi seperti yang ditunjukkan dalam tangkapan layar:

img

Meneruskan melihat kode strategi, kita dapat melihat bahwa kita menulisdebuggerperintah di bawahvar t = exchange.GetTicker()kalimat, yang setara dengan memukul titik putus di sini, dan eksekusi program akan berhenti di posisi ini.debuggers dapat digunakan dalam kode strategi, tetapi tidak disarankan untuk melakukannya, hanya menggunakan breakpoint di lokasi tertentu, dan breakpoint berikutnya dapat ditetapkan dalam fungsi debugging DevTools dari browser.

Kita harus membukaDevToolsdari browser Chrome sebelum menjalankan backtest, makadebuggerJika tidak, kebijakan ini tidak akan berlaku.debuggerakan diabaikan, dan program strategi backtesting tidak dapat terganggu atau dihentikan pada titik istirahat.DevToolsuntuk backtest strategi, program strategi akan terganggu pada pengaturan pertamadebuggerposisi, dandebuggerjuga dapat ditetapkan dalam ruang lingkup global kode strategi.

Ada dua cara bagi kita untuk membukaDevToolsalat browser Chrome:

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

    Kita klik Check untuk menampilkan antarmuka DevTools.

    1. Gunakan tombol jalan pintas

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

Setelah dibuka.DevToolsSeperti yang ditunjukkan pada gambar:

img

Antarmuka DEBUG di browser untuk strategi bahasa JavaScript

Setelah tes di atas, ketika kita mengklik tombol Start Backtest untuk backtest strategi, strategi putus dan menunggu di posisi yang sesuai karenadebuggerperintah ditetapkan dalam kode. backtest tampaknya terjebak, sebagai berikut:

img

Hal ini dapat dilihat bahwa pada posisi yang ditandai terganggu oleh strategidebugger, seluruh program hanya mengeksekusi data pasar yang dikembalikan oleh fungsi dengan nilai n adalah 1, dan nilai t adalahGetTickerAnda dapat melihat nilai variabel tertentu di kotak merah dari gambar di atas, sehingga mudah untuk mengamati nilai setiap variabel ketika strategi berjalan.

Atur titik putus untuk debugging secara manual

Kita bisa mengklik nomor baris di sisi kiri kode untuk menambahkan titik putus.

img

Klik resume script execution untuk melanjutkan eksekusi skrip, program akan berjalan ke titik istirahat berikutnya, jika tidak ada titik istirahat atau program memiliki kesalahan yang menyebabkan pengecualian, backtest akan berakhir.

img

Ada juga beberapa tombol yang dapat diimplementasikan, misalnya, melewatkan fungsi berikutnya, pergi ke panggilan fungsi berikutnya, keluar dari panggilan fungsi saat ini, mengeksekusi langkah tunggal, mengabaikan semua breakpoint, dll.

img

Uji kode DEBUG

img

Pada titik ini, ketika kita terus mengklik tombol resume script execution untuk melanjutkan eksekusi, pengecualian akan terjadi dalam program strategi, dan backtest akan berakhir dengan pesan kesalahan pengecualian dicetak.

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

Tidak sensitif huruf besar untuk struktur kontribusi nama adalah kesalahan umum 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

Harga yang diteruskan ke bursa. Fungsi beli adalah variabel yang tidak ditentukan, yang menyebabkan pengecualian program dan mengakhiri backtest.

Ketika program berhenti di posisi breakpoint, baris kode ini tidak dijalankan. kita terus mengklik tombol step into next function call.

img

Pergi ke bursa. Beli panggilan fungsi.

img

Di sini kita bisa melihat bahwa harga adalah variabel yang tidak ditentukan.

Dengan menggunakan pendekatan di atas, mudah untuk mengetahui bug program langkah demi langkah. Banyak pemula sering membuat kesalahan, misalnya, indeks array diakses di luar batas, variabel yang tidak ditentukan dirujuk, ekspresi ditulis dengan salah, dll, semuanya mudah untuk DEBUG program.


Berkaitan

Lebih banyak