Đối với các chiến lược gỡ lỗi trong các hệ thống backtesting, thường chỉ cóLog()
DEBUG là rất kém hiệu quả và khó khăn cho người thử nghiệm chương trình mới với ít kinh nghiệm.JavaScript
ngôn ngữ,Chrome
trình duyệt hỗ trợ nó tốt hơn, có thể thực hiện gỡ lỗi điểm ngắt, gỡ lỗi một bước, giám sát giá trị biến, giám sát biểu thức và vân vân trong quá trình backtesting. Vì vậy, hãy học cách sử dụng phương pháp này để DEBUGJavascript
Lưu ý rằng phương pháp gỡ lỗi này chỉ được hỗ trợ choJavaScript
các chiến lược ngôn ngữ trên nền tảng FMZ.
debugger
chỉ huy trên sân bay FMZNhậpdebugger
lệnh vào mã chiến lược của ngôn ngữ JavaScript trên FMZ cho phép việc thực thi chương trình bị gián đoạn trong quá trình backtesting.
Chúng tôi sử dụng mã chiến lược thử nghiệm sau:
/*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)
}
}
Cài đặt mã từ 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"}]
*/
Ở đây chúng ta có thể thấy rằng trao đổi chúng tôi đã thêm cho backtesting là Binance điểm, cấu hình là như được hiển thị trong ảnh chụp màn hình:
Tiếp tục nhìn vào mã chiến lược, chúng ta có thể thấy rằng chúng ta đã viếtdebugger
chỉ huy dướivar t = exchange.GetTicker()
câu, tương đương với việc nhấn một điểm dừng ở đây, và việc thực hiện chương trình sẽ dừng lại ở vị trí này.debugger
s có thể được sử dụng trong mã chiến lược, nhưng không được khuyến cáo làm như vậy, chỉ cần sử dụng điểm ngắt tại một vị trí nhất định, và các điểm ngắt tiếp theo có thể được đặt trong chức năng gỡ lỗi DevTools của trình duyệt.
Chúng ta cần mởDevTools
của trình duyệt Chrome trước khi thực hiện backtest, sau đódebugger
trong bộ luật chiến lược sẽ có hiệu lực.debugger
sẽ bị phớt lờ, và chương trình chiến lược của backtesting không thể bị gián đoạn hoặc dừng lại tại điểm dừng.DevTools
để kiểm tra lại chiến lược, chương trình chiến lược sẽ bị gián đoạn tại cài đặt đầu tiêndebugger
vị trí, vàdebugger
cũng có thể được thiết lập trong phạm vi toàn cầu của mã chiến lược.
Có hai cách để chúng ta mởDevTools
công cụ của trình duyệt Chrome:
Chúng ta nhấp vào
Bạn cũng có thể sử dụng phím tắt để mởDevTools
bằng cách nhấnCommand+Option+I (Mac)
hoặcControl+Shift+I (Windows, Linux)
.
Sau khi mởDevTools
như trong hình:
Sau khi kiểm tra trên, khi chúng ta nhấp vào nút debugger
lệnh được đặt trong mã. backtest dường như bị mắc kẹt, như sau:
Nó có thể được nhìn thấy rằng ở vị trí được đánh dấu gián đoạn bởi chiến lượcdebugger
, toàn bộ chương trình chỉ thực hiện dữ liệu thị trường được trả về bởi hàm với giá trị n là 1, và giá trị của t làGetTicker
Bạn có thể thấy các giá trị biến cụ thể trong hộp màu đỏ của hình trên, do đó, nó là dễ dàng để quan sát giá trị của mỗi biến khi chiến lược đang chạy.
Chúng ta có thể nhấp vào số dòng ở phía bên trái của mã để thêm điểm dừng.
Nhấp vào
Ngoài ra còn có một số nút có thể được thực hiện, ví dụ, bỏ qua hàm tiếp theo, đi đến cuộc gọi hàm tiếp theo, bước ra khỏi cuộc gọi hàm hiện tại, thực hiện bước duy nhất, bỏ qua tất cả các điểm ngắt, v.v.
Tại thời điểm này, khi chúng ta tiếp tục nhấp vào nút
main:17:31 - TypeError: Cannot convert "undefined" to double
Không nhạy cảm với chữ cái lớn cho một cấu trúc đóng góp tên là một sai lầm phổ biến được thực hiện bởi người mới.
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
Giá được chuyển vào trao đổi. Buying hàm là một biến không xác định, gây ra một ngoại lệ chương trình và kết thúc backtest.
Khi chương trình dừng lại ở vị trí breakpoint, dòng mã này không được thực thi.
Đi đến sàn giao dịch. Mua chức năng gọi.
Ở đây chúng ta có thể thấy rằng giá là một biến không xác định.
Bằng cách sử dụng phương pháp trên, rất dễ dàng để tìm ra các lỗi chương trình từng bước. Nhiều người mới bắt đầu thường mắc lỗi, ví dụ, chỉ mục của một mảng được truy cập ngoài ranh giới, biến chưa xác định được tham chiếu, biểu thức được viết không chính xác, vv, tất cả đều dễ dàng DEBUG chương trình.