
Trong các bài viết trước, chúng ta đã biết rằng cái gọi là giao dịch được lập trình và định lượng là một chương trình kịch bản thực hiện một số hoạt động dựa trên dữ liệu thu được từ sàn giao dịch sau một loạt các phép tính, phán đoán và kích hoạt để vận hành tài khoản sàn giao dịch. Các hành động thu thập dữ liệu và vận hành tài khoản đều được thực hiện thông qua giao diện API trao đổi. Nói một cách đơn giản, đó là sự tương tác giữa chương trình kịch bản và trao đổi. Vì là tương tác nên phải có tương tác bình thường và tương tác bất thường. Khi xảy ra tương tác bất thường, giao diện sẽ trả về thông tin ngoại lệ.
Tất nhiên, các hệ thống giao dịch được lập trình và định lượng trên thị trường hoặc các chương trình tự phát triển sẽ có nhiều lời nhắc và thông báo lỗi khác nhau. Những thông báo lỗi này không chỉ giới hạn ở những thông báo lỗi được báo cáo bởi giao diện API trao đổi. Ngoài ra còn có những lỗi như: lỗi ngoại lệ thời gian chạy chương trình, lỗi cấu hình, lỗi cú pháp chương trình, v.v.
Trên Nền tảng giao dịch định lượng Inventor, thông báo lỗi có thể được chia thành nhiều loại:

Mã này thiếu các ký tự như dấu ngoặc. Loại lỗi này thường hiển thị trên trang chỉnh sửa chính sách và chính sách không thể chạy được (lỗi sẽ được báo cáo trực tiếp trong thời gian chạy, như thể hiện trong hình bên dưới).
Vì vậy, sau khi viết chiến lược, tôi thường xem trang chỉnh sửa chiến lược nền tảng để xem có dấu XX màu đỏ nhỏ không. Nếu có, chắc chắn có lỗi rõ ràng.


Những lỗi như vậy sẽ khiến chương trình bị lỗi và ngừng chạy.
Trên nền tảng FMZ, các cặp giao dịch được định nghĩa thống nhất làX_YỞ định dạng này, X biểu thị tên của loại tiền tệ giao dịch và Y biểu thị tên của loại tiền tệ được tính theo mệnh giá (loại tiền tệ được tính theo cặp hợp đồng giao dịch dựa trên tiền tệ tương lai thường được biểu thị bằng USD, đã được giới thiệu trong các bài viết trước). Ví dụBTC_USDT, nếu tôi viết cặp giao dịch một cách ngẫu nhiên,BTC-USDT。

Lỗi được báo cáo trong hệ thống kiểm tra ngược nền tảng FMZ:

Báo cáo lỗi trong giao dịch thực tế:

Ngoài ra, một lỗi phổ biến mà người mới thường gặp là:
https://www.fmz.com
Loại lỗi này là do thay đổi mật khẩu của tài khoản nền tảng FMZ, dẫn đếnAPI KEYKhông hợp lệ (KHÓA API của người dùng được mã hóa trên trình duyệt và sau đó được cấu hình trên nền tảng FMZ), chiến lược không thể khởi động và lỗi sẽ được báo cáo.
Lỗi gọi giao diện thường gặp khi chạy chiến lược. Trong các bài viết trước, chúng ta đã biết rằng các giao diện trên nền tảng FMZ được chia thànhGiao diện để tạo yêu cầu mạng、Giao diện không tạo ra yêu cầu mạng. Lỗi giao diện sẽ không khiến chương trình chính sách dừng lại. Điều này thường là do ngoại lệ gọi giao diện, trả về dữ liệu không chính xác. Khi đó, chính sách không có khả năng chịu lỗi và lỗi ngoại lệ chương trình do dữ liệu không chính xác gây ra khiến chương trình dừng lại (khái niệm về khả năng chịu lỗi đã được thảo luận trong các bài viết trước).
Sau đây là một số thông báo lỗi giao diện tạo ra yêu cầu mạng:
Hết thời gian mạng

Một trong những thông báo lỗi mà người mới thường gặp là sử dụng thiết bị mạng trong nước (máy tính riêng hoặc máy chủ trong nước). Vì hầu hết các sàn giao dịch đều bị chặn nên về cơ bản nhiều sàn giao dịch không thể truy cập được từ mạng trong nước và giao diện truy cập sẽ báo cáo thời gian chờ. (đã đề cập trong các bài viết trước)
lỗi http 429
https://www.fmz.com
Một trong những thông báo lỗi kinh điển. Nguyên nhân là giao diện trao đổi được gọi quá thường xuyên, vượt quá giới hạn tần suất của trao đổi. (đã đề cập trong các bài viết trước)
Một số sinh viên mới có thể nói, tôi sẽ nộp đơn xin trao đổi thêm.API KEYHoặc tôi có thể đăng ký thêm một vài tài khoản trao đổi nữa. Chúng ta cần biết rằng các sàn giao dịch thường giới hạn tần suất truy cập của các giao diện dựa trên địa chỉ IP. Nói một cách đơn giản, miễn là tất cả các yêu cầu được gửi từ một địa chỉ IP được tính trên địa chỉ IP này, nếu vượt quá giới hạn và IP này gửi lại yêu cầu , máy chủ trao đổi sẽ từ chối truy cập.
Báo cáo lỗi ở cấp độ giao diện trao đổi
Thời gian chờ và lỗi 429 được đề cập ở trên là lỗi cấp độ mạng. Lỗi cũng sẽ được báo cáo nếu có vấn đề xảy ra ở cấp độ giao diện trao đổi. Ví dụ, tôi muốn lấy báo giá giao ngay, nhưng tôi đặt một cặp giao dịch không tồn tại. Tôi đã thử nghiệm nó trong công cụ gỡ lỗi của nền tảng FMZ. Công cụ gỡ lỗi là một công cụ kiểm tra rất tiện lợi, rất phù hợp để kiểm tra thời gian thực các lệnh gọi hàm, thu thập dữ liệu và các nhu cầu khác.

Không có sự khác biệt giữa kết quả thực hiện của công cụ gỡ lỗi và thực hiện thực tế.

Huobi 错误 GetTicker: Invalid ticker: {"Info":{"err-code":"invalid-parameter","err-msg":"invalid symbol","status":"error","ts":1620872079355},"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}
Thông báo lỗi ở đây có nghĩa là cặp giao dịch không hợp lệ (như có thể thấy ở đây"err-msg":"invalid symbol")。
Ví dụ, có rất nhiều lỗi liên quan đến kinh doanh như vậy. Ví dụ, khi thiết lập đòn bẩy, một số sàn giao dịch không hỗ trợ giá trị đòn bẩy có phần thập phân. Lúc này, nếu giá trị đòn bẩy có phần thập phân, nó cũng sẽ gây ra lỗi gọi giao diện.
Liệt kê một lệnh gọi giao diện không tạo ra yêu cầu mạng
Thiết lập mã hợp đồng tương lai Một số giao diện chỉ thiết lập một số biến toàn cục trong hệ thống và không tạo ra các yêu cầu mạng, ví dụ:

Tuy nhiên, lỗi sẽ xảy ra nếu các tham số được truyền không đúng cách hoặc được viết ngẫu nhiên.

Tuy nhiên, bất kể loại lỗi nào, thông báo lỗi hiển thị là thông tin quan trọng để tìm ra sự cố và thường có thể xác định được sự cố từ thông báo lỗi. Bạn có thể sử dụng công cụ dịch để dịch thông báo lỗi và trích xuất thông tin quan trọng. Ví dụ, trong ví dụ trên"err-msg":"invalid symbol", bản dịch: “err msg”: “Ký hiệu không hợp lệ”. Có lẽ bạn biết rằng cài đặt cặp giao dịch là sai vì các ký hiệu tiếng Anh thường được sử dụng để biểu thị mã giao dịch và cặp giao dịch.
Chúng tôi sẽ thảo luận ngắn gọn về thông tin lỗi. Có một bài đăng sẽ tiếp tục thu thập các câu hỏi thường gặp để truy vấn: https://www.fmz.com/bbs-topic/1427
Hệ thống kiểm tra ngược cũng là một điểm chính trong công cụ định lượng. Hệ thống kiểm tra ngược có thể kiểm tra thuận tiện các nguyên mẫu chiến lược và kiểm tra sơ bộ các lỗi tiềm ẩn và các vấn đề logic trong chiến lược. Chúng ta cần phải có cái nhìn lý trí về hệ thống kiểm tra ngược. Hệ thống kiểm tra ngược có thể phản ánh một số vấn đề của chiến lược ở một mức độ nhất định.
Dưới đây chúng tôi sẽ giải thích ngắn gọn về hệ thống kiểm thử ngược trên nền tảng FMZ theo góc nhìn của các ngôn ngữ chiến lược khác nhau được FMZ hỗ trợ. (Một số giới thiệu về hệ thống kiểm tra ngược đã được đề cập trong các bài viết trước)
Kiểm tra ngược phía trình duyệt sử dụng tài nguyên phần cứng cục bộ.
Khi kiểm tra ngược trên một đơn vị giám sát, bạn có thể chọn đơn vị giám sát để phân bổ (đơn vị giám sát của riêng bạn hoặc đơn vị giám sát công khai của nền tảng FMZ). Do khối lượng công việc lớn đè nặng lên người giám hộ công khai trên nền tảng FMZ, nên sử dụng người giám hộ cục bộ để kiểm tra ngược (điều này cũng sẽ nhanh hơn. Khi kiểm tra ngược với người giám hộ công khai, khi có quá nhiều tác vụ vượt quá khối lượng công việc, một số kiểm tra ngược các nhiệm vụ sẽ bị hủy, dẫn đến sự chậm trễ trong quá trình kiểm tra ngược). (gián đoạn đo lường).
Không giống như ngôn ngữ kịch bản, chính sách C++ cần phải được biên dịch trước khi có thể thực thi. Chiến lược ngôn ngữ C++ sẽ được biên dịch trên nền tảng FMZ (máy chủ) trước (nếu có vấn đề với mã, quá trình biên dịch có thể không thành công và thông báo lỗi sẽ xuất hiện). Sau khi biên dịch, hãy kiểm tra lại trên nền tảng FMZ (máy chủ).
Việc triển khai cơ bản là JavaScript và việc kiểm tra ngược cũng được thực hiện trên trình duyệt.
Việc triển khai cơ bản là JavaScript và việc kiểm tra ngược cũng được thực hiện trên trình duyệt.
Hệ thống kiểm thử ngược của Inventor Quantitative Trading Platform có hai chế độ kiểm thử ngược (chế độ này không phân biệt ngôn ngữ chiến lược, chế độ này là cài đặt kiểm thử ngược và chiến lược kiểm thử ngược trong nhiều ngôn ngữ là như nhau).

Để biết hướng dẫn về hệ thống kiểm tra ngược, vui lòng tham khảo thông tin trong hướng dẫn về nền tảng:
https://www.fmz.com/bbs-topic/4158#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B
K线中一根柱子不是有高开低收么,构成了一个价格框架,在这个K线代表的时间范围内,价格都在这个价格框架内,所以只要生成的价格在这个K线高开低收框架范围内,这个模拟出来的价格就是合理的。
Giống như mô phỏng trong hình: https://www.fmz.com Tất nhiên, khi hệ thống kiểm thử ngược thực tế triển khai mô phỏng này, tình hình phức tạp hơn một chút so với hình minh họa. Chúng ta sẽ không đi sâu vào vấn đề này ở đây. Chỉ cần hiểu cơ chế kiểm thử ngược ở cấp độ mô phỏng là đủ. Biết được nguyên lý này, chúng ta cần lưu ý đến những nhược điểm của backtesting cấp độ mô phỏng, mặc dù backtesting cấp độ mô phỏng diễn ra rất nhanh (vì giá do mô phỏng tạo ra không phải là giá thực tế được công bố từng giây một). Nhưng nếu chiến lược phù hợpXu hướng thay đổi tích tắc mô phỏngĐiều này sẽ khiến chiến lược hoạt động rất hiệu quả (nhưng trong tình huống thực tế, giá có thể không di chuyển theo cách này, mặc dù giá nằm trong khuôn khổ cột K-line này). Đường K được sử dụng để tạo dữ liệu tích tắc mô phỏng được gọi là đường K cơ bản và chu kỳ của đường K này được gọi làChu kỳ K-line dưới cùng, thiết lập như hiển thị trong trang thiết lập chính sách:
Cài đặt 1 phút ở đây có nghĩa là dữ liệu đường K có chu kỳ 1 phút được sử dụng làm nguồn dữ liệu để tạo các tích tắc mô phỏng.
Một điểm nữa là đối với các chiến lược tần suất cao, rõ ràng là không phù hợp khi sử dụng thử nghiệm ngược ở cấp độ mô phỏng. Tuy nhiên, đối với các chiến lược xu hướng, việc sử dụng thử nghiệm ngược ở cấp độ mô phỏng vẫn có thể phản ánh hiệu suất của chiến lược ở một mức độ nhất định.

Dữ liệu cho hệ thống kiểm tra ngược của Inventor Quantitative Trading Platform đến từ đâu? Hệ thống kiểm tra ngược sử dụng dữ liệu từ trung tâm dữ liệu của nền tảng FMZ theo mặc định. Trung tâm dữ liệu của nền tảng FMZ tự động thu thập dữ liệu thị trường của từng loại tiền tệ từ mỗi sàn giao dịch và cung cấp cho hệ thống kiểm tra ngược trên nền tảng.

Ngoài ra còn có một số hướng dẫn trong tài liệu API FMZ về nguồn dữ liệu tùy chỉnh: https://www.fmz.com/api#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%BA%90
Ngoài ra còn có một số giải pháp trong thư viện FMZ:

Những người mới quan tâm có thể nghiên cứu và tham khảo.
Giao dịch theo chương trình và định lượng là không thể tách rờihọc、Bài kiểm tra、nghĩ。 Bạn không thể suy nghĩ về vấn đề một cách riêng lẻ, như thế sẽ không hiệu quả. Cách hiệu quả nhất để giải quyết và suy nghĩ về vấn đề làTìm thông tin,Sau đóHãy tự mình thử nhé、Phân tích suy nghĩNếu vấn đề vẫn chưa được giải quyết, vui lòng lặp lại các bước trên.
Nhưng thông thường khi người mới gặp phải vấn đề, họ cảm thấy:
“Ồ~ Lập trình, định lượng và viết chiến lược quá khó.” “Tôi đã nhìn nó rất lâu rồi nhưng vẫn còn bối rối!” “Tôi vẫn chưa bắt đầu và tôi muốn bỏ cuộc!” ….
Thực ra rất đơn giản để bắt đầu trên nền tảng FMZ. Trước hết, bạn cần phải giỏi tìm kiếm thông tin. Có rất nhiều thông tin có sẵn để tham khảo tại Quảng trường chiến lược, Cộng đồng và Thư viện của Nền tảng giao dịch định lượng Inventor.

Sau đó là khả năng thực tế. Sử dụng hệ thống kiểm tra ngược và các công cụ gỡ lỗi có thể tạo điều kiện cho việc kiểm tra. Điều này không có nghĩa là kiểm tra toàn bộ chiến lược. Trên thực tế, nếu bạn hoàn toàn không có kiến thức cơ bản, bạn thậm chí có thể học những kiến thức cơ bản về lập trình JavaScript trên hệ thống kiểm tra định lượng FMZ.
Đây là trang web hướng dẫn mà tôi thường học JS: https://www.runoob.com/js/js-loop-for.html Không chỉ giới hạn ở JS, mọi loại kiến thức CNTT đều có thể tìm kiếm và học hỏi tại đây. Ví dụ, tôi không biết cách sử dụng biểu thức chính quy của JS, tôi phải làm sao? Tất nhiên, hãy kiểm tra thông tin trước, sau đó hãy thử nhé~
Tôi đã thấy một ví dụ như thế này:
Tôi muốn thử nghiệm nó và tôi thậm chí có thể sử dụng hệ thống kiểm tra ngược của nền tảng FMZ để thử nghiệm và học hỏi.
Thiết lập một sàn giao dịch ngẫu nhiên trên hệ thống kiểm tra ngược

Kiểm tra đoạn mã sau:
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
function main() {
var strEmailAddress1 = "13512345678"
Log(strEmailAddress1, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress1))
var strEmailAddress2 = "[email protected]"
Log(strEmailAddress2, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress2))
}

Nhìn kìa~ đây quả là một công cụ học tập tuyệt vời! Ví dụ, tôi muốn học cách viết logic vòng lặp trong JavaScript, chúng ta hãy thử nhé:
Lặp qua các phần tử của một biến mảng theo thứ tự xuất hiện của chúng trong mảng:
function main() {
var arr = [{coinName: "BTC", price: 10000}, {coinName: "LTC", price: 100}, {coinName: "ETH", price: 2000}, {coinName: "ETC", price: 500}]
for (var i = 0 ; i < arr.length ; i++) {
Log(arr[i])
}
}

Bạn có cảm thấy có động lực để học ngay lập tức không? Trên thực tế, trên FMZ, bạn có thể xem hướng dẫn về JavaScript trong khi tìm hiểu những kiến thức cơ bản về JavaScript trên hệ thống kiểm thử ngược. Cú pháp JavaScript gần như đã thành thạo. Để vào giai đoạn tiếp theo, bạn cần sử dụng giao diện trao đổi để lấy dữ liệu để thử nghiệm. Bạn cũng có thể sử dụng nền tảng FMZCông cụ gỡ lỗiThực hiện thử nghiệm giao diện thực tế.
Sau đó, bạn cần suy nghĩ nhiều hơn, rút ra suy luận từ một ví dụ, thử nghiệm và xác minh, so sánh và phân tích, v.v. Bằng cách này, bạn có thể bắt đầu rất nhanh chóng.