CTP tương lai hàng hóa và sàn giao dịch API tiền điện tử có những khác biệt đáng kể. quen thuộc với giao dịch lập trình trao đổi tiền điện tử không có nghĩa là quen thuộc với chương trình CTP tương lai hàng hóa. chúng ta không thể đơn giản sao chép phương pháp và kinh nghiệm. Bài viết này sẽ tóm tắt những điểm tương đồng và khác biệt giữa chúng.
Giao diện CTP không cung cấp báo giá thị trường lịch sử, và báo giá thị trường lịch sử cần được giải quyết thông qua cơ quan báo giá thị trường. Nếu dữ liệu thị trường bị mất do không đăng nhập, CTP không cung cấp cơ chế bổ sung thị trường. Các báo giá thị trường lịch sử chỉ có thể được thu thập thông qua cơ quan bên thứ ba. Hầu hết các sàn giao dịch tiền điện tử thường cung cấp một giao diện để có được K-line và lịch sử giao dịch.
API trao đổi tiền điện tử thường là mộtREST
vàwebsocket
CTP đóng gói nội bộ logic liên quan đến mạng và giao tiếp với nền tảng CTP bằng cách sử dụng giao thức FTD dựa trên giao thức TCP.
Chế độ phản hồi yêu cầu: khách hàng bắt đầu một yêu cầu, và nền CTP nhận và trả lời yêu cầu.
Chế độ truyền thông phát sóng: Sau khi khách hàng đăng ký báo giá thị trường hợp đồng, CTP đẩy các báo giá thị trường thông qua phát sóng.
Chế độ giao tiếp riêng tư: Sau khi khách hàng ủy thác hợp đồng, thông tin đặt hàng, trả lại giao dịch, v.v. được đẩy bởi CTP từ điểm này sang điểm khác.
Tất cả các giao dịch báo giá và giao dịch đặt hàng của thỏa thuận CTP sẽ được thông báo sau khi thay đổi, trong khi các đơn đặt hàng, tài khoản và vị trí điều tra được truy vấn tích cực.
Độ sâu của giao thức CTP chỉ là giá mua và bán mới nhất, các báo giá thị trường sâu hơn như năm lớp giá mua và bán đắt tiền, bạn cần phải trả thêm tiền cho sàn giao dịch tương lai để có được nó. mặt khác, sàn giao dịch tiền điện tử thường có thể có được độ sâu đầy đủ lên đến 200 lớp giá mua và bán.
Ngoài ra, CTP không đẩy báo giá giao dịch thực, nó chỉ có thể được đảo ngược bằng cách thay đổi vị trí, và API trao đổi tiền điện tử có thể có được báo giá giao dịch chi tiết thực sự. Mức độ đánh dấu dữ liệu thị trường của nền tảng CTP là 2 đánh dấu mỗi giây.
Các sàn giao dịch tiền điện tử thường được giới hạn ở 10 ticks mỗi giây. Không có yêu cầu đặc biệt cho việc rút tiền. 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 gửi đi một cách tích cực. Nói chung, một lần mỗi 2 giây là khá an toàn, và cũng có yêu cầu về số lượng rút tiền.
Giao thức CTP rất ổn định và hầu như không có lỗi hoặc vấn đề mạng. Do trao đổi tiền điện tử có hạn chế ít hơn, thời gian giao dịch dài hơn, bảo trì hệ thống, sự chậm trễ dữ liệu và lỗi mạng rất phổ biến.
CTP chế độ mặc định để có được giao diện thị trường nhưGetTicker
, GetDepth
, GetRecords
được lưu trữ dữ liệu để có được mới nhất, nếu không có dữ liệu sẽ chờ cho đến khi có dữ liệu, vì vậy chiến lược không thể sử dụngSleep
Khi có một sự thay đổi báo giá thị trường,ticker
, depth
, vàrecords
sẽ được cập nhật. Tại thời điểm này, bất kỳ giao diện nào cũng sẽ được trả về ngay lập tức khi được gọi. Sau đó trạng thái giao diện được gọi được đặt để chờ chế độ cập nhật, Khi lần tiếp theo cùng một giao diện được gọi, nó sẽ chờ dữ liệu mới trở lại.
Một số hợp đồng giao dịch không phổ biến hoặc giá đạt mức giá giới hạn hàng ngày sẽ xảy ra trong một thời gian dài mà không có bất kỳ hoạt động giao dịch nào, điều này là bình thường khi chiến lược bị mắc kẹt trong một thời gian dài.
Nếu bạn muốn có được dữ liệu mỗi khi bạn nhận được báo giá thị trường, ngay cả dữ liệu cũ, bạn có thể chuyển sang thị trường ngay lập tức cập nhật chế độexchange.IO ("mode", 0)
Tại thời điểm này, chiến lược không thể được viết như một trình điều khiển sự kiện.SLeep
Một số chiến lược tần số thấp có thể sử dụng chế độ này, và thiết kế chiến lược là đơn giản.exchange.IO("mode", 1)
để chuyển trở lại chế độ cache mặc định.
Khi vận hành một hợp đồng duy nhất, sử dụng chế độ mặc định sẽ ổn. Tuy nhiên, nếu có nhiều hợp đồng giao dịch, có thể một hợp đồng đã không được cập nhật, dẫn đến việc chặn giao diện thị trường và các cập nhật thị trường báo giá hợp đồng giao dịch khác không có sẵn. Để giải quyết vấn đề này, bạn có thể sử dụng chế độ cập nhật ngay lập tức, nhưng không thuận tiện để viết một chiến lược tần số cao. Tại thời điểm này, bạn có thể sử dụng chế độ đẩy sự kiện để có được lệnh và báo giá đẩy. Phương pháp thiết lập làexchange.IO("wait")
Nếu nhiều đối tượng trao đổi được thêm vào, đây là tình huống hiếm hoi trong giao dịch tương lai hàng hóa, bạn có thể sử dụngexchange.IO ("wait_any")
, và trở lạiindex
sẽ chỉ ra chỉ số trao đổi được trả lại.
Giá thị trườngtick
Đẩy thay đổi:
{Event:"tick", Index: exchange index (in the order of robot exchange added), Nano: event nanosecond time, Symbol: contract name}
Lệnh đẩy:
{Event:"order", Index: Exchange Index, Nano: Event Nanosecond Time, Order: Order Information (consistent with 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")){ //Determine the link status
exchange.IO("mode", 0)
_C (exchange.SetContractType, "MA888") // subscribe to the MA, only the first time is the real request to send a subscription, the following are just program switch, won't consume any time.
_C(exchange.SetContractType, "rb888") // Subscribe 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)
}
}
}