Tài nguyên đang được tải lên... tải...

JavaScript chiến lược backtesting được gỡ lỗi trong DevTools của trình duyệt Chrome

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2022-06-24 14:10:02, Cập nhật: 2023-09-25 19:50:23

img

JavaScript chiến lược backtesting được gỡ lỗi trong DevTools của trình duyệt Chrome

Đố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.JavaScriptngôn ngữ,Chrometrì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 để DEBUGJavascriptLưu ý rằng phương pháp gỡ lỗi này chỉ được hỗ trợ choJavaScriptcác chiến lược ngôn ngữ trên nền tảng FMZ.

Cácdebuggerchỉ huy trên sân bay FMZ

Nhậpdebuggerlệ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:

img

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ếtdebuggerchỉ 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.debuggers 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ởDevToolscủa trình duyệt Chrome trước khi thực hiện backtest, sau đódebuggertrong bộ luật chiến lược sẽ có hiệu lực.debuggersẽ 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êndebuggervị trí, vàdebuggercũ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ởDevToolscông cụ của trình duyệt Chrome:

    1. Chúng tôi sử dụng chuột phải trên trang để mở menu bật lên

    Chúng ta nhấp vào Check để hiển thị giao diện DevTools.

    1. Sử dụng phím tắt

    Bạn cũng có thể sử dụng phím tắt để mởDevToolsbằng cách nhấnCommand+Option+I (Mac)hoặcControl+Shift+I (Windows, Linux).

Sau khi mởDevToolsnhư trong hình:

img

Giao diện của DEBUG trong trình duyệt cho chiến lược ngôn ngữ JavaScript

Sau khi kiểm tra trên, khi chúng ta nhấp vào nút Start Backtest để kiểm tra lại chiến lược, chiến lược sẽ dừng lại và chờ ở vị trí tương ứng vìdebuggerlệnh được đặt trong mã. backtest dường như bị mắc kẹt, như sau:

img

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àGetTickerBạ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.

Đặt điểm ngắt để gỡ lỗi bằng tay

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.

img

Nhấp vào tiếp tục thực thi kịch bản để tiếp tục thực thi kịch bản, 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 gây ra ngoại lệ, backtest sẽ kết thúc.

img

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.

img

Kiểm tra mã DEBUG

img

Tại thời điểm này, khi chúng ta tiếp tục nhấp vào nút tiếp tục thực thi kịch bản để tiếp tục thực thi, một ngoại lệ sẽ xảy ra trong chương trình chiến lược, và backtest sẽ kết thúc với một thông báo lỗi ngoại lệ được in.

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.

img

Đi đến sàn giao dịch. Mua chức năng gọi.

img

Ở đâ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.


Có liên quan

Thêm nữa