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.JavaScript
bahasa,Chrome
browser mendukungnya lebih baik, yang dapat menerapkan breakpoint debugging, debugging satu langkah, pemantauan nilai variabel, pemantauan ekspresi dan sebagainya selama backtesting.Javascript
bahasa strategi backtesting pada platform FMZ. Perhatikan bahwa metode debugging ini hanya didukung untukJavaScript
strategi bahasa di platform FMZ.
debugger
Komando di platform FMZMasukkandebugger
perintah 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:
Meneruskan melihat kode strategi, kita dapat melihat bahwa kita menulisdebugger
perintah di bawahvar t = exchange.GetTicker()
kalimat, yang setara dengan memukul titik putus di sini, dan eksekusi program akan berhenti di posisi ini.debugger
s 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 membukaDevTools
dari browser Chrome sebelum menjalankan backtest, makadebugger
Jika tidak, kebijakan ini tidak akan berlaku.debugger
akan diabaikan, dan program strategi backtesting tidak dapat terganggu atau dihentikan pada titik istirahat.DevTools
untuk backtest strategi, program strategi akan terganggu pada pengaturan pertamadebugger
posisi, dandebugger
juga dapat ditetapkan dalam ruang lingkup global kode strategi.
Ada dua cara bagi kita untuk membukaDevTools
alat browser Chrome:
Kita klik
Anda juga dapat menggunakan tombol pintasan untuk membukaDevTools
dengan menekanCommand+Option+I (Mac)
atauControl+Shift+I (Windows, Linux)
.
Setelah dibuka.DevTools
Seperti yang ditunjukkan pada gambar:
Setelah tes di atas, ketika kita mengklik tombol debugger
perintah ditetapkan dalam kode. backtest tampaknya terjebak, sebagai berikut:
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 adalahGetTicker
Anda dapat melihat nilai variabel tertentu di kotak merah dari gambar di atas, sehingga mudah untuk mengamati nilai setiap variabel ketika strategi berjalan.
Kita bisa mengklik nomor baris di sisi kiri kode untuk menambahkan titik putus.
Klik
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.
Pada titik ini, ketika kita terus mengklik tombol
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
Pergi ke bursa. Beli panggilan fungsi.
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.