
Có sự khác biệt đáng kể giữa CTP tương lai hàng hóa và API tiền kỹ thuật số. Những người quen thuộc với giao dịch theo chương trình tiền kỹ thuật số nhưng không quen với giao dịch theo chương trình tương lai hàng hóa không thể chỉ sao chép kinh nghiệm của họ. Bài viết này sẽ tóm tắt những điểm giống và khác nhau giữa chúng.
Dữ liệu lịch sử
Giao diện CTP không cung cấp thông tin lịch sử thị trường, thông tin này phải được lấy thông qua các nhà cung cấp thông tin thị trường. Nếu dữ liệu thị trường bị mất do không đăng nhập hoặc mất kết nối, CTP không cung cấp cơ chế phục hồi thị trường. Điều kiện thị trường lịch sử chỉ có thể thu thập được thông qua dữ liệu của bên thứ ba. Tiền kỹ thuật số thường cung cấp giao diện để thu thập K-line và lịch sử giao dịch.
Các giao thức khác nhau
API tiền điện tử thường là giao thức REST và websocket. CTP đóng gói logic liên quan đến mạng nội bộ và sử dụng giao thức FTD dựa trên giao thức TCP để giao tiếp với nền tảng CTP. Có ba chế độ:
Mọi điều kiện thị trường và giao dịch lệnh của giao thức CTP sẽ chỉ được thông báo sau khi có thay đổi, trong khi các yêu cầu về lệnh, tài khoản và vị thế là các yêu cầu đang hoạt động. Ba chế độ trên có thể được tìm thấy ở những dạng tương tự trong API tiền kỹ thuật số.
Các cấp độ khác nhau của sự tinh vi dữ liệu
Độ sâu của giao thức CTP chỉ có một lần mua và một lần bán, và phí thị trường năm cấp rất đắt. Tiền kỹ thuật số thường có thể đạt được độ sâu đầy đủ hoặc 200 cấp. CTP không thúc đẩy các giao dịch thực tế và chỉ có thể suy ra thông qua những thay đổi về vị thế, trong khi API trao đổi tiền kỹ thuật số có thể thu thập được các giao dịch riêng lẻ thực tế. Mức biến động của dữ liệu thị trường trên nền tảng CTP trong nước là 2 tick mỗi giây. Hầu hết các websocket trao đổi tiền kỹ thuật số có thể thực hiện 10 lần mỗi giây.
Các hạn chế truy cập khác nhau
Các sàn giao dịch tiền kỹ thuật số thường giới hạn giao dịch ở mức 10 lần mỗi giây. Thông thường không có yêu cầu đặc biệt nào khi hủy đơn hàng. CTP có những hạn chế nghiêm ngặt đối với các yêu cầu cần phải được phát hành chủ động. Nhìn chung, an toàn hơn khi thực hiện sau mỗi 2 giây. Ngoài ra còn có các yêu cầu về số lần hủy đơn hàng.
Sự ổn định
Giao thức CTP rất ổn định và hầu như không có lỗi hay vấn đề mạng. Tiền kỹ thuật số sẽ có ít hạn chế hơn và thời gian giao dịch dài hơn, đồng thời việc bảo trì, độ trễ dữ liệu, lỗi mạng, v.v. rất phổ biến.
Thực hành tốt nhất của Giao thức CTP trên Nền tảng định lượng FMZ
Trong chế độ mặc định của CTP, các giao diện để lấy thông tin thị trường, chẳng hạn như GetTicker, GetDepth và GetRecords, chỉ có thể lấy dữ liệu mới nhất nếu có dữ liệu được lưu trong bộ nhớ đệm. Nếu không có dữ liệu, nó sẽ đợi cho đến khi có dữ liệu, do đó chiến lược không cần phải ngủ. Khi có sự thay đổi của thị trường, ticker, độ sâu và hồ sơ sẽ được cập nhật. Vào thời điểm này, việc gọi bất kỳ giao diện nào trong số này sẽ trả về ngay lập tức và trạng thái của giao diện được gọi sẽ được đặt thành chế độ chờ cập nhật. Cuộc gọi tiếp theo đến giao diện tương tự sẽ đợi cho đến khi có dữ liệu mới. quay lại. Một số hợp đồng hoặc giới hạn giá không được ưa chuộng sẽ không được giao dịch trong một thời gian dài. Chiến lược bị kẹt trong một thời gian dài là điều bình thường.
Nếu bạn muốn lấy dữ liệu mỗi khi có thị trường, ngay cả dữ liệu cũ, bạn có thể chuyển sang chế độ cập nhật thị trường exchange.IO(“mode”, 0). Lúc này, chiến lược không thể được viết theo sự kiện. Cần thêm sự kiện Sleep để tránh vòng lặp vô hạn nhanh. Một số chiến lược có tần suất thấp có thể sử dụng chế độ này và thiết kế chiến lược rất đơn giản. Sử dụng exchange.IO(“mode”, 1) để chuyển về chế độ bộ nhớ đệm mặc định.
Khi vận hành một hợp đồng duy nhất, hãy sử dụng chế độ mặc định. Tuy nhiên, nếu có nhiều hợp đồng, có khả năng một hợp đồng chưa cập nhật thông tin thị trường, dẫn đến giao diện thu thập thông tin thị trường bị chặn và không thể thu thập thông tin cập nhật thị trường của các hợp đồng khác. Để giải quyết vấn đề này, bạn có thể sử dụng chế độ cập nhật tức thời, nhưng sẽ bất tiện khi phải viết các chiến lược tần suất cao. Lúc này, bạn có thể sử dụng chế độ đẩy sự kiện để nhận thông tin đẩy lệnh và thị trường. Phương pháp cài đặt là exchange.IO(“wait”). Nếu nhiều đối tượng trao đổi được thêm vào, điều này hiếm khi xảy ra trong hợp đồng tương lai hàng hóa, bạn có thể sử dụng exchange.IO(“wait_any”) và Chỉ mục trả về sẽ chỉ ra chỉ mục trao đổi được trả về.
Đẩy thay đổi giá thị trường: {Sự kiện:“tick”, Chỉ mục:Chỉ số sàn giao dịch (theo thứ tự mà sàn giao dịch robot được thêm vào), Nano:Thời gian nano giây của sự kiện, Biểu tượng:Tên hợp đồng} Đẩy lệnh: {Sự kiện:“order”, Chỉ mục:Chỉ mục trao đổi, Nano:Thời gian nano giây của sự kiện, Lệnh:Thông tin lệnh (giống như GetOrder)}
Tại thời điểm này, cấu trúc chiến lược có thể được viết như sau:
function on_tick(symbol){
Log("symbol update")
exchange.SetContractType(symbol)
Log(exchange.GetTicker())
}
function on_order(order){
Log("order update", order)
}
function main(){
while(true){
if(exchange.IO("status")){ //判断链接状态
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
_C(exchange.SetContractType, "rb888")//订阅rb
while(True){
var e = exchange.IO("wait")
if(e){
if(e.event == "tick"){
on_tick(e.Symbol)
}else if(e.event == "order"){
on_order(e.Order)
}
}
}
}else{
Sleep(10*1000)
}
}
}