
Untuk strategi debugging dalam sistem backtesting, biasanya hanyaLog()fungsi. Efisiensi DEBUG jenis ini sangat rendah dan sulit bagi pemula yang memiliki sedikit pengalaman dalam pengujian program. untukJavaScriptStrategi debugging bahasaChromePeramban memiliki dukungan yang lebih baik. Ia dapat mewujudkan debugging breakpoint, debugging langkah tunggal, pemantauan nilai variabel, pemantauan ekspresi, dsb. selama pengujian ulang. Baiklah, mari kita pelajari cara menggunakan cara ini untuk mengendalikan FMZ.JavascriptDEBUG saat menguji ulang strategi dalam bahasa tersebut. Perlu diketahui bahwa hanya di FMZJavascriptKebijakan bahasa mendukung pendekatan ini untuk debugging.
debuggerpetunjukMasukkan kode kebijakan bahasa JavaScript di FMZdebuggerInstruksi yang dapat menghentikan eksekusi program selama pengujian ulang.
Kami menggunakan kode strategi pengujian 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) {
// 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性,属性名区分大小写
var id = exchange.Buy(t.buy, 0.1)
var orderBuy = exchange.GetOrder(id)
}
Sleep(500)
}
}
Dari kode konfigurasi backtest
/*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"}]
*/
Anda dapat melihat bahwa bursa yang kami tambahkan selama pengujian ulang adalah Binance spot, dan konfigurasinya seperti yang ditunjukkan pada tangkapan layar:

Jika kita terus melihat kode strategi, kita dapat melihat bahwavar t = exchange.GetTicker()Di bawah kalimat ini kami menulisdebuggerInstruksinya setara dengan pengaturan titik henti di sini, dan program akan berhenti saat mencapai posisi ini. Banyak sekalidebugger, tetapi tidak disarankan untuk melakukannya. Tetapkan breakpoint di lokasi tertentu. Breakpoint berikutnya dapat ditetapkan dalam fungsi debugging DevTools pada browser.
Anda perlu membuka browser Chrome terlebih dahuluDevToolsKemudian lakukan backtest, set kode strategidebuggerakan berlaku, jika tidakdebuggerIni akan diabaikan dan program strategi pengujian ulang tidak dapat diganggu gugat dan dihentikan pada titik henti. MembukaDevToolsSetelah melakukan backtesting strategi, program strategi akan diinterupsi pada set pertamadebuggerLokasi,debuggerDapat juga diatur dalam lingkup global kode kebijakan.
Kami membuka browser ChromeDevToolsAda dua jenis alat:

Ketika kita mengklik “Periksa”, antarmuka DevTools akan ditampilkan.
Anda juga dapat menggunakan tombol pintas untuk membukanya.Command+Option+I (Mac)atauControl+Shift+I(Windows、Linux)Membuka DevTools。
MembukaDevToolsSetelah itu, seperti yang ditunjukkan pada gambar:

Mengikuti tes di atas, ketika kita mengklik tombol “Mulai Pengujian Kembali” untuk menguji kembali strategi, karena pengaturan dalam kodedebuggerInstruksi, strategi menyela dan menunggu di posisi yang sesuai. Backtest tampaknya macet, seperti yang ditunjukkan di bawah ini:

Terlihat bahwa dalam strategidebuggerTandai posisi interupsi. Seluruh program hanya mengeksekusi n yang ditetapkan ke 1 dan t yang ditetapkan keGetTickerData pasar yang dikembalikan oleh fungsi. Dalam kotak merah pada gambar di atas, Anda dapat melihat nilai variabel spesifik, yang membuatnya sangat mudah untuk mengamati nilai berbagai variabel saat strategi sedang berjalan.
Kita dapat mengeklik nomor baris di sisi kiri kode untuk menambahkan titik henti.

Klik “lanjutkan eksekusi skrip” untuk melanjutkan eksekusi skrip. Program akan berjalan ke breakpoint berikutnya. Jika tidak ada breakpoint atau program mengalami kesalahan dan menyebabkan pengecualian, backtest akan berakhir.

Ada juga tombol yang dapat digunakan untuk: melewati fungsi berikutnya, melangkah ke pemanggilan fungsi berikutnya, keluar dari pemanggilan fungsi saat ini, langkah tunggal, mengabaikan semua titik henti, dan lain-lain.


Pada titik ini, saat kita terus mengklik tombol “lanjutkan eksekusi skrip” untuk melanjutkan eksekusi, program strategi akan mengalami pengecualian, pengujian ulang akan berakhir, dan pesan kesalahan pengecualian akan dicetak.
main:17:31 - TypeError: Cannot convert "undefined" to double
Ini adalah kesalahan umum yang dilakukan oleh pemula, yang tidak membedakan antara huruf besar dan kecil untuk nama atribut struktur.
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
Akibatnya, harga masuk ke bursa. Fungsi beli adalah variabel tak terdefinisi, menyebabkan pengecualian program dan pengujian ulang berakhir.
Ketika program berhenti di breakpoint, baris kode ini tidak dieksekusi. Kami terus mengklik tombol “masuk ke panggilan fungsi berikutnya”.

Lompat ke panggilan fungsi bursa.Beli.

Lihat bahwa harga adalah variabel yang tidak terdefinisi.
Dengan menggunakan metode di atas, mudah untuk menemukan bug program langkah demi langkah. Banyak kesalahan yang sering dilakukan oleh pemula: misalnya, akses keluar batas ke indeks array, referensi ke variabel yang tidak terdefinisi, penulisan ekspresi yang salah, dll. Dengan cara ini, mudah untuk men-debug program.