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.JavaScript
Bahasa,Chrome
penyemak imbas menyokongnya lebih baik, yang boleh melaksanakan breakpoint debugging, debugging satu langkah, pemantauan nilai pembolehubah, pemantauan ungkapan dan sebagainya semasa backtesting.Javascript
Nota bahawa kaedah penyesuaian ini hanya disokong untukJavaScript
strategi bahasa di platform FMZ.
debugger
Perintah di platform FMZMemasukkandebugger
perintah 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:
Meneruskan melihat kod strategi, kita boleh melihat bahawa kita menulisdebugger
Perintah di bawahvar t = exchange.GetTicker()
kalimat, yang bersamaan dengan memukul titik henti di sini, dan pelaksanaan program akan berhenti di kedudukan ini.debugger
s 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 bukaDevTools
daripada penyemak imbas Chrome sebelum menjalankan backtest, makadebugger
yang ditetapkan dalam kod strategi akan berkuat kuasa.debugger
akan diabaikan, dan program strategi backtesting tidak boleh diganggu atau dihentikan pada titik henti.DevTools
untuk backtest strategi, program strategi akan terganggu pada tetapan pertamadebugger
kedudukan, dandebugger
juga boleh ditetapkan dalam skop global kod strategi.
Terdapat dua cara untuk kita membukaDevTools
alat pelayar Chrome:
Kita klik
Anda juga boleh menggunakan kekunci pintasan untuk membukaDevTools
dengan menekanCommand+Option+I (Mac)
atauControl+Shift+I (Windows, Linux)
.
Selepas pembukaanDevTools
seperti yang ditunjukkan dalam gambar:
Selepas ujian di atas, apabila kita klik butang debugger
perintah ditetapkan dalam kod. backtest nampaknya terjebak, seperti berikut:
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 adalahGetTicker
Anda boleh melihat nilai pembolehubah tertentu dalam kotak merah pada gambar di atas, supaya mudah untuk memerhatikan nilai setiap pembolehubah apabila strategi berjalan.
Kita boleh klik nombor baris di sebelah kiri kod untuk menambah titik henti.
Klik
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.
Pada ketika ini, apabila kita terus mengklik butang
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
Pergi ke pertukaran. Beli panggilan fungsi.
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.