Trong các bài viết trước đây, chúng ta đã học được rằng cái gọi là giao dịch lập trình và định lượng là một chương trình kịch bản dựa trên dữ liệu thu được từ nền tảng, sau một loạt các phép tính, phán đoán và kích hoạt để thực hiện một số hoạt động, và vận hành tài khoản nền tảng để giao dịch. Những hành động này của việc thu thập dữ liệu và hoạt động tài khoản đều được thực hiện thông qua giao diện API nền tảng. Nói một cách đơn giản, các chương trình kịch bản tương tác với nền tảng. Vì nó là tương tác, phải có tương tác bình thường và tương tác bất thường. Khi một tương tác bất thường xảy ra, một giao diện 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ó các thông báo và thông báo lỗi khác nhau. Các thông báo lỗi này không giới hạn trong các thông báo lỗi được báo cáo bởi các API nền tảng. Ngoài ra còn có các lỗi khác, chẳng hạn như: lỗi ngoại lệ chương trình trong quá trình hoạt động, 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 lượng tử FMZ, thông báo lỗi có thể được chia thành một số loại:
Lỗi cú pháp chiến lược Loại lỗi này là lỗi phổ biến nhất, thường được gây ra bởi tình huống mà người mới bắt đầu không quen thuộc với lập trình, và việc viết mã của họ trong quá trình nghiên cứu có lỗi cú pháp. Ví dụ:
Mã được viết mà không có ký tự như ngoặc ngửa. Đối với loại lỗi này, thông báo lỗi thường có thể được nhìn thấy trên trang chỉnh sửa chiến lược, và trong hoàn cảnh đó, chiến lược không thể chạy (một khi chiến lược được chạy, sẽ có một lỗi được báo cáo, như được hiển thị trong hình).
Do đó, bạn có thể làm cho nó trở thành một thói quen để có một cái nhìn của trang chiến lược chỉnh sửa sau khi hoàn thành viết mã, để xem nếu có một thập tự đỏ nhỏ; nếu có một, điều đó có nghĩa là chắc chắn có một lỗi rõ ràng.
Sự ngoại lệ của chương trình trong quá trình hoạt động do chương trình chiến lược BUG Nếu một chương trình có lỗi trong quá trình hoạt động, kích hoạt ngoại lệ sẽ làm cho chương trình dừng lại bất thường, và loại thông báo lỗi này sẽ được hiển thị.
Những lỗi như thế này đều có thể gây ra sự ngoại lệ của chương trình, và ngăn chương trình chạy.
Lỗi do cấu hình và cài đặt không chính xác
Trên nền tảng FMZ, tất cả các cặp giao dịch được xác định dưới dạngX_Y
, trong đó BTC_USDT
; giả sử rằng tôi viết sai, tôi viết nó vàoBTC-USDT
.
Báo cáo lỗi trong hệ thống backtest trên nền tảng FMZ:
Báo cáo lỗi trong bot:
Hoặc, sai lầm phổ biến nhất mà người mới bắt đầu thường gặp:
Sự sai lầm này là do sự vô hiệu hóa củaAPI KEY
trong đối tượng trao đổi được cấu hình sau khi sửa đổi mật khẩu của tài khoản FMZ (các API KEY của người dùng đều được mã hóa bởi cuối trình duyệt và được cấu hình trên nền tảng FMZ). Điều đó sẽ làm cho một chiến lược không thể bắt đầu, sẽ gây ra một lỗi được báo cáo.
Lỗi do giao diện gọi
Các lỗi gọi giao diện thường gặp khi chạy các chiến lược. Trong các bài viết trước đây, chúng tôi đã nghiên cứu và học được rằng các giao diện trên nền tảng FMZ được chia thành:giao diện thực hiện yêu cầu mạngvàgiao diện không thực hiện yêu cầu mạng. Lỗi giao diện sẽ không trực tiếp gây ra chương trình chiến lược dừng lại. Thông thường, do ngoại lệ gọi giao diện, dữ liệu sai được trả về và chiến lược không chịu lỗi. Sau đó, lỗi ngoại lệ chương trình gây ra bởi dữ liệu sai khiến chương trình dừng lại (khái niệm chịu lỗi đã được giới thiệu trong các bài viết trước).
Dưới đây tôi liệt kê một số thông báo lỗi của các giao diện thực hiện yêu cầu mạng:
Thời gian ra khỏi mạng
Một trong những thông báo lỗi mà người mới bắt đầu thường gặp là do sử dụng thiết bị mạng nội địa (PC hoặc máy chủ nội địa).
Lỗi http 429
Đây là một trong những thông báo lỗi cổ điển; lý do là giao diện nền tảng được gọi quá thường xuyên, vượt quá giới hạn tần số của nền tảng. (được đề cập trong các bài viết trước). Một số sinh viên mới có thể nói rằng lỗi sẽ không được nêu lên nếu họ áp dụng cho API KEY của một số nền tảng hoặc một số tài khoản nền tảng khác. Chúng ta cần biết rằng giới hạn tần suất truy cập giao diện bởi các nền tảng thường 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ỉ, máy chủ nền tảng sẽ từ chối truy cập vào IP, nếu số yêu cầu vượt quá giới hạn.
Lỗi dịch vụ giao diện nền tảng
Các lỗi thời gian và 429 đã đề cập ở trên là lỗi trong lớp mạng. Nếu có vấn đề trong lớp dịch vụ giao diện nền tảng, một lỗi cũng sẽ được báo cáo. Ví dụ, tôi muốn có được báo giá thị trường giao ngay, nhưng tôi thiết lập một cặp giao dịch không tồn tại. Tôi kiểm tra 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 thuận tiện, rất phù hợp cho thử nghiệm bot thực sự của các cuộc gọi hàm và thu thập dữ liệu.
Kết quả thực hiện của công cụ gỡ lỗi; không có sự khác biệt giữa việc thực hiện công cụ gỡ lỗi và thực hiện bot.
Huobi error 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ệ (xem ở đây:"err-msg":"invalid symbol"
)
Ví dụ, có rất nhiều lỗi liên quan đến dịch vụ như vậy. Ví dụ, khi thiết lập đòn bẩy, một số nền tảng không hỗ trợ các giá trị đòn bẩy với chữ thập phân. Nếu giá trị đòn bẩy có chữ thập phân, nó cũng sẽ gây ra lỗi trong cuộc gọi giao diện.
Danh sách một cuộc gọi giao diện không tạo yêu cầu mạng:
Mã hợp đồng tương lai đặt Một số giao diện chỉ đặt một số biến số toàn cầu trong hệ thống và không thực hiện yêu cầu mạng. Ví dụ:
Tuy nhiên, nếu các tham số được truyền hoặc viết sai, lỗi cũng sẽ được báo cáo.
Không có vấn đề là loại lỗi nào, thông báo lỗi được hiển thị là thông tin chính để tìm ra vấn đề, nghĩa là bạn có thể phân biệt vấn đề từ thông báo lỗi. Bạn có thể sử dụng công cụ dịch để dịch thông tin lỗi vào ngôn ngữ bạn có thể đọc, để chiết xuất các từ khóa. Ví dụ:"err-msg":"invalid symbol"
Bạn có thể biết lỗi được gây ra bởi cài đặt sai của cặp giao dịch, vì biểu tượng
Hệ thống backtest cũng là điểm chính của một công cụ định lượng. Hệ thống backtest có thể dễ dàng kiểm tra nguyên mẫu của một chiến lược, và ban đầu kiểm tra các lỗi tiềm ẩn và các vấn đề logic trong chiến lược, nhưng hệ thống backtest cần được xem xét hợp lý. Hệ thống backtest có thể phản ánh một số vấn đề của một chiến lược đến một mức độ nhất định.
Sau đây là một mô tả ngắn gọn về hệ thống backtest trên nền tảng FMZ từ cấp độ của các ngôn ngữ chiến lược khác nhau được hỗ trợ bởi FMZ. (Một số giới thiệu về hệ thống backtest đã được đề cập trong các bài viết trước đây.)
JavaScript
Các backtest được thực hiện trên trình duyệt, và nó sử dụng các tài nguyên phần cứng địa phương.
Python
Trong backtest trên một docker, bạn có thể chọn docker nào để gán (hoặc docker được triển khai bởi chính bạn, hoặc docker công cộng của nền tảng FMZ). Do tải trọng lớn của docker công cộng trên nền tảng FMZ, nên sử dụng backtest docker cục bộ (Điều đó cũng sẽ nhanh hơn. Trong backtest của docker công cộng, khi nó quá tải, một số nhiệm vụ backtest sẽ bị hủy bỏ, với kết quả của backtest bị gián đoạn).
C++
Không giống như các ngôn ngữ kịch bản, các chiến lược ngôn ngữ C ++ cần được biên dịch và sau đó được thực thi. Chiến lược ngôn ngữ C ++ sẽ được biên dịch đầu tiên trên nền tảng FMZ (máy chủ) (nếu có vấn đề với việc viết mã, việc biên dịch có thể không vượt qua, và một thông báo lỗi sẽ được nhắc trực tiếp). Sau khi biên dịch được thông qua, nó sẽ được kiểm tra lại trên nền tảng FMZ (máy chủ).
Mylangage
Lớp dưới được thực hiện bởi JavaScript, và backtest cũng được thực hiện trên trình duyệt.
Hiển thị
Lớp dưới được thực hiện bởi JavaScript, và backtest cũng được thực hiện trên trình duyệt
Hệ thống backtest của nền tảng FMZ Quant Trading có hai chế độ backtest (không quan trọng ngôn ngữ nào một chiến lược được viết, chế độ backtest là một thiết lập của hệ thống backtest, và các tùy chọn thiết lập là giống nhau cho tất cả các ngôn ngữ được hỗ trợ trên FMZ).
Đối với hướng dẫn về hệ thống backtest, bạn có thể tham khảo phần liên quan của hướng dẫn viết chiến lược trên nền tảng FMZ:
There are the highest, the lowest, open and close prices in one bar, which forms a price structure. Within the time range represented by the K-line, the prices are all in the price structure. Therefore, as long as the generated price is within the K-line structure of the four prices, the simulated price is reasonable.
Cũng giống như mô phỏng được hiển thị trong hình ảnh sau:
Chắc chắn, nó là một chút phức tạp hơn so với những gì được hiển thị trong hình để thực hiện mô phỏng trong hệ thống backtest, mà sẽ không được thảo luận thêm ở đây. Sau khi biết nguyên tắc, bạn cần phải chú ý đến những nhược điểm của backtest cấp độ mô phỏng. Mặc dù backtest cấp độ mô phỏng là rất nhanh (vì giá được tạo ra bởi mô phỏng không phải là giá thực tế thứ hai theo thứ hai phát hành liên tiếp). Tuy nhiên, nếu chiến lược phù hợp vớixu hướng thay đổi tick mô phỏng, chiến lược sẽ hoạt động xuất sắc (nhưng trong thực tế, giá có thể không thay đổi theo xu hướng, mặc dù giá nằm trong cấu trúc của thanh K-line). Dòng K được sử dụng để tạo ra các dữ liệu tick mô phỏng ở đây được gọi là đường K dưới cùng, và thời gian của đường K được gọi làThời gian đường K dưới cùng, được thiết lập trên trang thiết lập chiến lược như hình sau:
Ở đây tôi đặt 1 phút, có nghĩa là sử dụng dữ liệu đường K với khoảng thời gian 1 phút như nguồn dữ liệu để tạo ra dữ liệu tick mô phỏng.
Có một điểm nữa, đối với một chiến lược tần số cao, backtest ở mức độ mô phỏng rõ ràng là không phù hợp.
Nguồn dữ liệu của hệ thống kiểm tra lại FMZ Quant ở đâu? Hệ thống kiểm tra lại sử dụng dữ liệu của bảng điều khiển trên nền tảng FMZ theo mặc định. Bảng điều khiển của FMZ tự động thu thập dữ liệu thị trường đặt của mỗi loại tiền tệ trên mỗi nền tảng và cung cấp nó cho hệ thống kiểm tra lại của nền tảng.
Ngoài ra còn có một số hướng dẫn về nguồn dữ liệu tùy chỉnh trong tài liệu FMZ API:Các nguồn dữ liệu tùy chỉnh
Ngoài ra còn có một số chương trình trong Digest trên nền tảng FMZ. Những người mới bắt đầu, những người quan tâm đến điều đó, có thể tham khảo các chương trình đó và nghiên cứu chúng.
Bạn không thể làm giao dịch được lập trình và định lượng mà không cóhọc, thử nghiệmvàsuy nghĩ. Nó không hiệu quả để nghĩ về các câu hỏi từ không.tìm kiếm thông tinVậy thìHãy tự mình thử xem., vàsuy nghĩ và phân tíchNếu vấn đề không được giải quyết, lặp lại các hành động trên.
Nhưng, thường khi những người mới bắt đầu gặp vấn đề, họ sẽ cảm thấy:
Oh, viết các chiến lược được lập trình và định lượng là rất khó! Vẫn còn bối rối về nó, ngay cả tôi cũng đã nghiên cứu nó trong một thời gian! Chỉ muốn bỏ cuộc trước khi bắt đầu! ...
Bắt đầu với nền tảng FMZ thực sự rất dễ dàng và đơn giản. Trước hết, bạn phải giỏi tìm kiếm thông tin. Có rất nhiều thông tin trong
Sau đó, có khả năng hoạt động; sử dụng hệ thống backtest và công cụ gỡ lỗi có thể dễ dàng thực hiện thử nghiệm. Điều này không có nghĩa là kiểm tra một chiến lược hoàn chỉnh. Trên thực tế, nếu bạn hoàn toàn không có những điều cơ bản, bạn thậm chí có thể học những điều cơ bản của các chương trình JavaScript trực tiếp trên hệ thống backtest của FMZ Quant.
Đâ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; trang web không giới hạn trong JS, và tất cả các loại kiến thức CNTT có thể được truy vấn và học ở đây. Ví dụ, tôi không biết làm thế nào để sử dụng biểu thức thường của JS, tôi nên làm gì? Dĩ nhiên, hãy tìm kiếm thông tin trước, rồi thử xem!
Tôi đã thấy một ví dụ như thế này:Nếu tôi muốn kiểm tra nó, tôi có thể sử dụng hệ thống backtest của FMZ để kiểm tra nó để nghiên cứu.
Đặt ngẫu nhiên một nền tảng trên hệ thống backtest.
Kiểm tra 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, " Is it the email address? ", " Answer:", IsEmail(strEmailAddress1))
var strEmailAddress2 = "123456789@qq.com"
Log(strEmailAddress2, " Is it the email address? ", " Answer:", IsEmail(strEmailAddress2))
}
Nhìn xem, đây là một công cụ tuyệt vời để học! Ví dụ, nếu tôi muốn học cách viết logic vòng lặp của ngôn ngữ JavaScript, và sau đó thử nó:
Theo trình tự của một mảng, in mỗi phần tử của một biến mảng trong một vòng lặp:
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? Trong thực tế, trên FMZ, bạn có thể hoàn toàn học các nguyên tắc cơ bản của JavaScript bằng cách thử các hoạt động trên hệ thống backtest trong khi xem các hướng dẫn JavaScript. Sau khi cú pháp JavaScript gần như được thành thạo, bạn có thể bước vào giai đoạn tiếp theo, để thực sự sử dụng giao diện nền tảng để lấy dữ liệu và kiểm tra. Bạn cũng có thể sử dụngcông cụ debugtrên FMZ để tiến hành thử nghiệm giao diện thực sự. Sau đó, bạn cần phải suy nghĩ nhiều hơn, rút ra kết luận từ một trường hợp, với các bài kiểm tra, xác minh, và phân tích so sánh, v.v. Điều đó làm cho việc học và bắt đầu rất nhanh.