Dạy bạn làm thế nào để cho một chiến lược cũ dock websocket trích dẫn giao diện

Tác giả:Tốt, Tạo: 2019-10-08 14:56:58, Cập nhật: 2023-11-06 19:41:28

img

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ácrestCác chiến lược này được dựa trênrestNgoài ra, đã có một số trường hợp mà các sàn giao dịchrestgiao 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 template class library.

  • Thực hiện một giao dịch Hook cho các báo giá thị trường hối đoái có chức năng như: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ácwebsocketgiao diện thị trường.

Ngôn ngữ viết mã sử dụng ngôn ngữ lập trình JavaScript.

Chiến lược phân tích

Ví dụ, khi chúng ta cần sửa đổi một chiến lược cổ điển Icebreaker

Đị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ởitickNó chủ yếu sử dụng các tính chất củaBuy, Sell, vàLasttrongtickerdữ liệutickerdữ liệu được lấy bằng chức năng API của nền tảng FMZ Quant:exchange.GetTickerMục tiêu rõ ràng bây giờ, chúng ta có thể thay thếexchange.GetTickerchức năng vớiHookhoạ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 icebreaker, nó sẽ ảnh hưởng đến chiến lược logic, chúng tôi muốn nối liền liền với websocket!

Vì vậy chúng ta cần nhân vật chính tiếp theo ra mắt.

Chức năng template class library và chức năng init làm việc cùng nhau

Chúng tôi tạo ra một thư viện lớp mẫu tên là: SeamlessConnWS

img

Sau đó thiết lập 2 tham số đểSeamlessConnWS template.

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

Hai loại này được sử dụng để kiểm soát liệu có nên sử dụngwebsocketDo 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 giaohookhoạt động choexchange.GetTickerDo đó, chúng ta cần phải kích hoạt các tham sốHook_GetTicker) củaGetTickergiao 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 đổiwebsocketgiao 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.SeamlessConnWSMộ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.initchứ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ácwebsocketgiao diện thị trường của hai sàn giao dịch, đó là Binance và Huobi.initchức năng là để đảm bảo rằng khi chiến lược Icebreaker gọiSeamlessConnWSmẫu,initchứ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.GetTickerchức năng với mã sử dụng cácwebsocketgiao 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

Cách sử dụng

Một miếng bánh sau khi sao chépSeamlessConnWSmẫ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 Icebreaker để tham chiếu nó, như được hiển thị trong hình:

img

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 Icebreaker robot thời gian thực, sàn giao dịch chọn cặp giao dịch.

img

Mở các thông số điều khiển trênSeamlessConnWS template.

img

Chạy lên:

img

Để 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.

img

Hiển thị trên nhật ký robot:

img

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ớiwebsocketgiao diện thị trường.

Ví dụ này chỉ cho chiến lược sử dụngexchange.GetTickerchức năng giao diện thị trường, các giao diện thị trường khác như:exchange.GetDepth, exchange.GetTradesexchange.GetRecordscho 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ệtwebsockettrong mẫu, sử dụngDialCá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ácwebsocketKết nối chấp nhận.

Cảm ơn đã đọc.


Có liên quan

Thêm nữa