Có rất nhiều chiến lược thú vị trên trang vuông (https://www.fmz.com/squareVào thời điểm đó, hầu hết các sàn giao dịch tiền điện tử giao diện API đã sử dụng cácrest
Các chiến lược này được dựa trênrest
Ngoài ra, đã có một số trường hợp mà các sàn giao dịchrest
giao diện đã thất bại trong tương lai gần, dẫn đến một chiến lược không thể thực hiện đúng cách.
Miễn là chiến lược được sửa đổi, việc thêm hỗ trợ cho giao diện websocket đòi hỏi một số thay đổi cho mã chiến lược, thường khá khó khăn (sự khó khăn của việc thay đổi chiến lược cao hơn nhiều so với việc viết lại nó).
Làm thế nào chúng ta có thể không thay đổi mã chiến lược, nhưng sử dụng giao diện báo giá thị trường websocket?
Đây là sự linh hoạt đầy đủ của nền tảng FMZ Quant, chúng ta có thể sử dụng:
Sử dụng chiến lược
Thực hiện một giao dịch exchange.GetTicker
.
Do đó, mà không thay đổi mã chiến lược, hãy cho chiến lược sử dụng dữ liệu điều khiển và đẩy bởi cácwebsocket
giao diện thị trường.
Ngôn ngữ viết mã sử dụng ngôn ngữ lập trình JavaScript.
Ví dụ, khi chúng ta cần sửa đổi một chiến lược cổ điển
Địa chỉ chiến lược:https://www.fmz.com/strategy/9929
Chúng ta hãy nhìn vào mã chiến lược và thấy rằng chiến lược được thúc đẩy bởitick
Nó chủ yếu sử dụng các tính chất củaBuy
, Sell
, vàLast
trongticker
dữ liệuticker
dữ liệu được lấy bằng chức năng API của nền tảng FMZ Quant:exchange.GetTicker
Mục tiêu rõ ràng bây giờ, chúng ta có thể thay thếexchange.GetTicker
chức năng vớiHook
hoạt động (tức là thay thế nó bằng một phiên bản khác).
Tuy nhiên, chúng ta không thể viết lại nó trong mã chiến lược
Vì vậy chúng ta cần nhân vật chính tiếp theo ra mắt.
Chúng tôi tạo ra một thư viện lớp mẫu tên là:
Sau đó thiết lập 2 tham số đểSeamlessConnWS
template.
Hai loại này được sử dụng để kiểm soát liệu có nên sử dụngwebsocket
Do giới hạn của bài viết này, chúng tôi chỉ thực hiện các giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao diện giao thức giao tiếp giao tiếp giao tiếp giao tiếp giao tiếp giao tiếp giao tiếp giao tiếp giaohook
hoạt động choexchange.GetTicker
Do đó, chúng ta cần phải kích hoạt các tham sốHook_GetTicker
) củaGetTicker
giao diện vớiwebsocket
mode.
Một khi mẫu được tạo ra, chúng ta có thể viết một truy cập cụ thể vào trao đổiwebsocket
giao diện trong mẫu, đăng ký một số báo giá nhất định, và sau đó chờ cho các mã chức năng của trao đổi để đẩy dữ liệu.SeamlessConnWS
Một điều cần phải đề cập là các mã nguồn mở và các tài liệu API chính thức FMZ Quant.init
chức năng trong mẫu và các biến toàn cầu_DictConnectCreater
, _ConnMap
:
Phần mã:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("Switching to the ws interface only for the "exchange" exchange object (ie, the first added exchange object)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "Did not find an implementation"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
Có thể thấy rằng mẫu này chỉ thực hiện cácwebsocket
giao diện thị trường của hai sàn giao dịch, đó là Binance và Huobi.init
chức năng là để đảm bảo rằng khi chiến lược SeamlessConnWS
mẫu,init
chức năng sẽ thực hiện đầu tiên trong khi thị trường thực sự chạy tiến bộ.
chúng ta có thể thay thế nội dung củaexchange.GetTicker
chức năng với mã sử dụng cácwebsocket
giao diện, do đó đạt được kết nối liền mạch với thị trường websocket.
SeamlessConnWS
Địa chỉ mẫu:https://www.fmz.com/strategy/167755
Một miếng bánh sau khi sao chépSeamlessConnWS
mẫu vào thư viện chiến lược của bạn, bạn chỉ có thể sử dụng chiến lược
chắc chắn để nhấp vào kiểm tra mẫu, và nút lưu.
Tạo một chiến lược
Mở các thông số điều khiển trênSeamlessConnWS
template.
Chạy lên:
Để dễ dàng nhìn thấy dữ liệu được đẩy, trên dòng 157, chúng tôi đặc biệt thêm một mã nhật ký in, nó sẽ xuất dữ liệu được đẩy bởi trao đổi.
Hiển thị trên nhật ký robot:
Bằng cách này, chúng ta không cần phải sửa đổi bất kỳ dòng nào của mã chiến lược, và đạt được kết nối liền mạch vớiwebsocket
giao diện thị trường.
Ví dụ này chỉ cho chiến lược sử dụngexchange.GetTicker
chức năng giao diện thị trường, các giao diện thị trường khác như:exchange.GetDepth
, exchange.GetTrades
vàexchange.GetRecords
cho mẫu tiêu chuẩnSeamlessConnWS
, bạn có thể cố gắng mở rộng nó thêm.
Đối với việc thực hiện liên kết đặc biệtwebsocket
trong mẫu, sử dụngDial
Các tùy chọn khác nhau có thể được sử dụng trong các ứng dụng khác nhau (ví dụ:read()
chức năng, mà trả về chỉ dữ liệu mới nhất trong bộ đệm mà cácwebsocket
Kết nối chấp nhận.
Cảm ơn đã đọc.