Trên Nền tảng giao dịch định lượng InventorQuảng trường Chiến lượcCó nhiều chiến lược thú vị trên Internet. Vào thời điểm đó, hầu hết các sàn giao dịch tiền kỹ thuật số đều sử dụngrest
Giao diện API của giao thức, nhiều chiến lược dựa trênrest
Giao diện, đôi khi việc cập nhật thị trường diễn ra chậm. Ngoài ra, một số trao đổi gần đây đã xuất hiệnrest
Lỗi giao diện khiến chính sách không sử dụng được. Nếu chính sách được sửa đổi, hãy thêmwebsocket
Hỗ trợ giao diện yêu cầu một số thay đổi nhất định đối với mã chiến lược, thường gây nhiều phiền toái (thay đổi chiến lược khó hơn nhiều so với việc viết lại nó).
Làm sao tôi có thể sử dụng cùng một chiến lược mà không cần thay đổi nó?websocket
Còn giao diện thị trường thì sao?
Điều này chứng minh đầy đủ tính linh hoạt mạnh mẽ của Nền tảng giao dịch định lượng Inventor. Chúng tôi có thể:
exchange.GetTicker
Chức năng Móc câu để thu thập thông tin thị trường.Điều này cho phép chiến lược được kiểm soát bởiwebsocket
Dữ liệu được điều khiển bởi giao diện thị trường đang chạy.
Ngôn ngữ mã hóa được sử dụngJavaScript
ngôn ngữ.
Ví dụ, chúng tôi muốn sửa đổi một chiến lược cổ điển cũ “Icebreaker”
Trước tiên, chúng ta hãy xem mã chiến lược và thấy rằng chiến lược được thúc đẩy bởi các điều kiện thị trường tích tắc và chủ yếu sử dụngticker
Trong dữ liệuBuy
、Sell
、Last
Những thuộc tính này,ticker
Dữ liệu được lấy từ chức năng API của nền tảng FMZ:exchange.GetTicker
Lấy. Bằng cách này, mục tiêu sẽ rõ ràng hơn.exchange.GetTicker
chức năngHook
Thao tác (tức là viết lại bằng phiên bản khác và thay thế nó) là tất cả những gì cần thiết.
Tuy nhiên, chúng ta không thể viết lại chiến lược Icebreaker vì điều đó sẽ ảnh hưởng đến chiến lược. Điều chúng ta muốn là một kết nối liền mạch! !
Vì vậy, nhân vật chính tiếp theo cần phải xuất hiện.
init
Phối hợp chức năngChúng tôi tạo một “thư viện mẫu” và đặt tên cho nó:SeamlessConnWS, xóa mã ban đầu.
Sau đó choSeamlessConnWSMẫu thiết lập 2 tham số
Được sử dụng để kiểm soát việc bật hay tắtwebsocket
Chức năng giao diện, kiểm soát và chỉ định mở giao diện thị trường cụ thể. Do không gian hạn chế, chỉexchange.GetTicker
Giao diện thực hiện các thao tác móc nối. Vì vậy, các tham số chỉ được kích hoạtGetTicker
Giao diện là tham số điều khiển của chế độ websocket: Hook_GetTicker.
Sau khi mẫu được tạo, bạn có thể viết trao đổi cụ thể để truy cập vào mẫuwebsocket
Giao diện, đăng ký một số báo giá nhất định và sau đó chờ sàn giao dịch đẩy dữ liệu. Mã cụ thể sẽ không được nhắc lại ở đây. Bạn có thể tham khảo mã SeamlessConnWS (có sẵn công khai) và tài liệu API. Những gì bạn cần xem là mẫuinit
Các hàm và biến toàn cục_DictConnectCreater
、_ConnMap
:
Mã số:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("切换为ws接口只针对 exchange 交易所对象(即第一个添加的交易所对象)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "没有找到实现"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
Bạn có thể thấy rằng mẫu này chỉ triển khai 2 trao đổi.websocket
Giao diện thị trường là Binance Spot và Huobi Spot.init
Chức năng này cho phép chiến lược “phá băng” tham chiếuSeamlessConnWSSau khi mẫu được tạo, khi đĩa thực được chạy, điều đầu tiên sẽ được thực thi làinit
Chức năng có thể tự độngexchange.GetTicker
Thay thế nội dung hàm bằngwebsocket
Triển khai mã giao diện để đạt được kết nối liền mạchwebsocket
Trích dẫn.
Rất đơn giản! BóSeamlessConnWSSau khi sao chép mẫu vào thư viện chiến lược của riêng bạn, bạn chỉ cần tham chiếu mẫu đó trong chiến lược “Icebreaker”, như thể hiện trong hình:
Kiểm tra, lưu lại và hoàn tất.
Tạo robot chiến lược “Phá băng” theo thời gian thực và chọn Binance làm sàn giao dịch .
MởSeamlessConnWSKiểm soát các tham số trên mẫu.
Chạy nó:
Để dễ dàng xem dữ liệu được đẩy hơn, tôi đã thêm mã nhật ký in vào dòng 157, mã này sẽ xuất ra dữ liệu được sàn giao dịch đẩy.
Nhật ký robot cho thấy:
Theo cách này, không cần phải sửa đổi một dòng mã chiến lược nào và có thể tích hợp liền mạch giao diện thị trường websocket và chiến lược.
Ví dụ này chỉ để sử dụngexchange.GetTicker
Chiến lược của chức năng giao diện thị trường được giải thích. Các giao diện thị trường khác nhưexchange.GetDepth
、exchange.GetTrades
、exchange.GetRecords
Vẫn là thói quen đó thôi! Đối với mẫu mẫuSeamlessConnWS, có thể mở rộng thêm.
Đối với các liên kết cụ thể trong các mẫuwebsocket
Việc thực hiện sử dụngDial
Chức năng (xem tài liệu API Chức năng quay số), có thể điều chỉnh khi cần thiết. Ví dụ, bạn có thể choread()
Tham số được chỉ định của hàm-2
, nghĩa là chỉ trả vềwebsocket
Kết nối nhận dữ liệu mới nhất trong bộ đệm của nó.
Cảm ơn bạn đã đọc