Đối với các chiến lược gỡ lỗi trong hệ thống kiểm tra ngược, thường chỉLog()
chức năng. Hiệu quả của loại DEBUG này rất thấp và rất khó thực hiện đối với những người mới bắt đầu, ít kinh nghiệm trong việc kiểm thử chương trình. vìJavaScript
Chiến lược gỡ lỗi ngôn ngữChrome
Trình duyệt được hỗ trợ tốt hơn. Nó có thể thực hiện gỡ lỗi điểm dừng, 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. trong quá trình kiểm tra ngược. Sau đây chúng ta hãy tìm hiểu cách sử dụng phương pháp này để kiểm soát FMZ.Javascript
DEBUG khi kiểm tra ngược các chiến lược trong ngôn ngữ. Lưu ý rằng chỉ trên FMZJavascript
Chính sách của ngôn ngữ hỗ trợ cách tiếp cận gỡ lỗi này.
debugger
chỉ dẫnChèn vào mã chính sách của ngôn ngữ JavaScript trên FMZdebugger
Hướng dẫn có thể làm gián đoạn quá trình thực thi chương trình trong quá trình kiểm tra ngược.
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) {
// 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性,属性名区分大小写
var id = exchange.Buy(t.buy, 0.1)
var orderBuy = exchange.GetOrder(id)
}
Sleep(500)
}
}
Từ mã cấu hình kiểm tra ngược
/*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"}]
*/
Bạn có thể thấy rằng sàn giao dịch mà chúng tôi đã thêm trong quá trình kiểm tra ngược là Binance spot và cấu hình được hiển thị như trong ảnh chụp màn hình:
Tiếp tục xem xét mã chiến lược, chúng ta có thể thấy rằngvar t = exchange.GetTicker()
Dưới câu này chúng tôi đã viếtdebugger
Hướng dẫn này tương đương với việc thiết lập điểm dừng ở đây và chương trình sẽ dừng khi đạt đến vị trí này. Nhiềudebugger
, nhưng không nên làm như vậy. Chỉ cần đặt điểm dừng tại một vị trí nhất định. Các điểm dừng tiếp theo có thể được đặt trong chức năng gỡ lỗi DevTools của trình duyệt.
Trước tiên bạn cần mở trình duyệt ChromeDevTools
Sau đó thực hiện kiểm tra ngược, bộ mã chiến lượcdebugger
sẽ có hiệu lực, nếu khôngdebugger
Nó sẽ bị bỏ qua và chương trình chiến lược kiểm thử ngược không thể bị gián đoạn hoặc dừng lại tại điểm dừng. MởDevTools
Sau khi kiểm tra lại chiến lược, chương trình chiến lược sẽ bị gián đoạn ở lần đặt đầu tiêndebugger
Vị trí,debugger
Cũng có thể được thiết lập trong phạm vi toàn cầu của mã chính sách.
Chúng tôi mở trình duyệt ChromeDevTools
Có hai loại công cụ:
Khi chúng ta nhấp vào “Kiểm tra”, giao diện DevTools sẽ được hiển thị.
Bạn cũng có thể sử dụng phím tắt để mở nó.Command+Option+I (Mac)
hoặcControl+Shift+I(Windows、Linux)
Mở DevTools
。
MởDevTools
Sau đó, như thể hiện trong hình:
Sau khi thực hiện thử nghiệm trên, khi chúng ta nhấp vào nút “Bắt đầu kiểm tra ngược” để kiểm tra ngược chiến lược, do cài đặt trong mãdebugger
Hướng dẫn, chiến lược ngắt và chờ ở vị trí tương ứng. Backtest dường như bị kẹt, như hiển thị bên dưới:
Có thể thấy rằng trong chiến lượcdebugger
Đánh dấu vị trí ngắt. Toàn bộ chương trình chỉ thực hiện n được gán cho 1 và t được gán choGetTicker
Dữ liệu thị trường được trả về bởi hàm. Trong hộp màu đỏ ở hình trên, bạn có thể thấy các giá trị biến cụ thể, giúp bạn dễ dàng quan sát giá trị của nhiều biến khác nhau khi chiến lược đang chạy.
Chúng ta có thể nhấp vào số dòng ở bên trái của mã để thêm điểm dừng.
Nhấp vào “tiếp tục thực thi tập lệnh” để tiếp tục thực thi tập lệnh. Chương trình sẽ chạy đến điểm dừng tiếp theo. Nếu không có điểm dừng hoặc chương trình có lỗi và gây ra ngoại lệ, thì quá trình kiểm tra ngược sẽ kết thúc.
Ngoài ra còn có các nút có thể được sử dụng để: bỏ qua hàm tiếp theo, chuyển sang lệnh gọi hàm tiếp theo, thoát khỏi lệnh gọi hàm hiện tại, bước đơn, bỏ qua tất cả các điểm dừng, v.v.
Lúc này, khi chúng ta tiếp tục nhấp vào nút “tiếp tục thực thi tập lệnh” để tiếp tục thực thi, chương trình chiến lược sẽ có ngoại lệ, quá trình kiểm tra ngược kết thúc và thông báo lỗi ngoại lệ được in ra.
main:17:31 - TypeError: Cannot convert "undefined" to double
Đây là một lỗi thường gặp ở người mới bắt đầu, họ không phân biệt được chữ hoa và chữ thường trong tên thuộc tính cấu trúc.
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
Kết quả là giá được chuyển vào sàn giao dịch. Hàm mua là một biến không xác định, gây ra lỗi chương trình và quá trình kiểm tra ngược kết thúc.
Khi chương trình dừng tại điểm dừng, dòng mã này sẽ không được thực thi. Chúng ta tiếp tục nhấp vào nút “chuyển sang lệnh gọi hàm tiếp theo”.
Nhảy tới chức năng gọi lệnh mua.
Xem giá là một biến không xác định.
Sử dụng phương pháp trên, bạn có thể dễ dàng tìm ra lỗi chương trình theo từng bước. Nhiều lỗi mà người mới thường mắc phải: ví dụ, truy cập ngoài giới hạn vào chỉ mục mảng, tham chiếu đến các biến chưa xác định, viết biểu thức không đúng, v.v. Bằng cách này, việc gỡ lỗi chương trình trở nên dễ dàng.