Научить вас, как позволить старой стратегии стыковки веб-сокета цитаты интерфейс

Автор:Доброта, Создано: 2019-10-08 14:56:58, Обновлено: 2023-11-06 19:41:28

img

На странице есть много интересных стратегий (https://www.fmz.com/squareВ то время большинство криптовалютных бирж использовали интерфейс APIrestПротокол, Многие стратегии основаны наrestКроме того, были некоторые случаи, когда биржаrestВ ближайшем будущем интерфейс потерпел неудачу, в результате чего стратегия не может выполняться должным образом.

До тех пор, пока стратегия модифицируется, добавление поддержки интерфейса веб-сокета требует некоторых изменений в код стратегии, что обычно довольно проблематично (трудность изменения стратегии намного выше, чем перепись).

Как мы можем не менять код стратегии, но использовать интерфейс котировки рынка websocket?

Вот полная гибкость платформы FMZ Quant, которую мы можем использовать:

  • Используйте стратегию классная библиотека шаблонов.

  • Выполнение операции Hook для получения котировок на валютном рынке с функцией:exchange.GetTicker.

Таким образом, без изменения кода стратегии, пусть стратегия, используя данные, управляемые и подталкиваютсяwebsocketрыночный интерфейс.

Язык написания кода использует язык программирования JavaScript.

Стратегия анализа

Например, когда нам нужно изменить классическую стратегию Icebreaker

Адрес стратегии:https://www.fmz.com/strategy/9929

Давайте посмотрим на код стратегии и выясним, что стратегия основана наtickВ основном он использует свойстваBuy, Sell, иLastвtickerДанные.tickerданные получаются с помощью функции API платформы FMZ Quant:exchange.GetTickerЦель теперь ясна, мы можем заменитьexchange.GetTickerфункция сHookоперацию (то есть заменить ее другой версией).

Однако мы не можем переписать его в icebreaker стратегическом коде, это повлияет на логику стратегии, мы хотим бесшовную стыковку с веб-сокетом!

Нам нужен следующий главный герой для дебюта.

Функция template class library и функция init работают вместе

Мы создаем библиотеку классов шаблонов под названием: SeamlessConnWS

img

Затем установить 2 параметра наSeamlessConnWS template.

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

Эти два используются для контроля использованияwebsocketИз-за ограничения этой статьи, мы только предварительнуюhookОперация поexchange.GetTickerПоэтому нам нужно включить параметр ((Hook_GetTicker) отGetTickerинтерфейс сwebsocket mode.

Как только шаблон будет создан, мы можем написать специальный доступ к обменуwebsocketС помощью интерфейса в шаблоне, подпишитесь на определенные котировки, а затем ждать, пока код функции обмена, чтобы подтолкнуть данные.SeamlessConnWSКод (уже открытый источник) и официальная документация API FMZ Quant.initфункция в шаблоне и глобальные переменные_DictConnectCreater, _ConnMap:

Часть кода

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)
            }
        }
        // ... 
        
    }
}

Видно, что этот шаблон реализует толькоwebsocketРыночный интерфейс двух бирж, которые являются Binance и Huobi.initIcebreaker стратегия называютSeamlessConnWSшаблон,initФункция будет выполняться в первую очередь во время реального рыночного хода.

Мы можем заменить содержаниеexchange.GetTickerФункция с кодом использованияwebsocketИнтерфейс, тем самым достигая бесшовного стыковки с рынком веб-сокетов.

SeamlessConnWSАдрес шаблона:https://www.fmz.com/strategy/167755

Как его использовать

После того, как я скопировалSeamlessConnWSшаблон в библиотеке стратегии, вы можете просто использовать стратегию Icebreaker для ссылки на него, как показано на рисунке:

img

Не забудьте нажать проверьте шаблон, и кнопку сохранить.

Создайте Icebreaker стратегию в режиме реального времени робот, биржа выбирает торговую пару.

img

Откройте параметры управления наSeamlessConnWS template.

img

Запустите:

img

Для того, чтобы легко увидеть перемещенные данные, на строке 157, мы специально добавили код журнала печати, он будет выводить данные, перемещенные обменником.

img

Отображение в журнале робота:

img

Таким образом, нам не нужно модифицировать какую-либо строку кода стратегии, и достигает бесшовного стыковки сwebsocketрыночный интерфейс.

Этот пример относится только к стратегии использованияexchange.GetTickerфункцию рыночного интерфейса, другие рыночные интерфейсы, такие какexchange.GetDepth, exchange.GetTradesиexchange.GetRecordsДля стандартного шаблонаSeamlessConnWS, вы можете попытаться расширить его еще больше.

Для осуществления специальной связиwebsocketв шаблоне используйтеDialНапример, вы можете указать параметр -2 вread()функция, которая возвращает только последние данные в буфере, чтоwebsocketПодключение принято.

Спасибо за чтение.


Связанные

Больше