На странице есть много интересных стратегий (https://www.fmz.com/squareВ то время большинство криптовалютных бирж использовали интерфейс APIrest
Протокол, Многие стратегии основаны наrest
Кроме того, были некоторые случаи, когда биржаrest
В ближайшем будущем интерфейс потерпел неудачу, в результате чего стратегия не может выполняться должным образом.
До тех пор, пока стратегия модифицируется, добавление поддержки интерфейса веб-сокета требует некоторых изменений в код стратегии, что обычно довольно проблематично (трудность изменения стратегии намного выше, чем перепись).
Как мы можем не менять код стратегии, но использовать интерфейс котировки рынка websocket?
Вот полная гибкость платформы FMZ Quant, которую мы можем использовать:
Используйте стратегию
Выполнение операции exchange.GetTicker
.
Таким образом, без изменения кода стратегии, пусть стратегия, используя данные, управляемые и подталкиваютсяwebsocket
рыночный интерфейс.
Язык написания кода использует язык программирования JavaScript.
Например, когда нам нужно изменить классическую стратегию
Адрес стратегии:https://www.fmz.com/strategy/9929
Давайте посмотрим на код стратегии и выясним, что стратегия основана наtick
В основном он использует свойстваBuy
, Sell
, иLast
вticker
Данные.ticker
данные получаются с помощью функции API платформы FMZ Quant:exchange.GetTicker
Цель теперь ясна, мы можем заменитьexchange.GetTicker
функция сHook
операцию (то есть заменить ее другой версией).
Однако мы не можем переписать его в
Нам нужен следующий главный герой для дебюта.
Мы создаем библиотеку
Затем установить 2 параметра наSeamlessConnWS
template.
Эти два используются для контроля использования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.init
SeamlessConnWS
шаблон,init
Функция будет выполняться в первую очередь во время реального рыночного хода.
Мы можем заменить содержаниеexchange.GetTicker
Функция с кодом использованияwebsocket
Интерфейс, тем самым достигая бесшовного стыковки с рынком веб-сокетов.
SeamlessConnWS
Адрес шаблона:https://www.fmz.com/strategy/167755
После того, как я скопировалSeamlessConnWS
шаблон в библиотеке стратегии, вы можете просто использовать стратегию
Не забудьте нажать проверьте шаблон, и кнопку сохранить.
Создайте
Откройте параметры управления наSeamlessConnWS
template.
Запустите:
Для того, чтобы легко увидеть перемещенные данные, на строке 157, мы специально добавили код журнала печати, он будет выводить данные, перемещенные обменником.
Отображение в журнале робота:
Таким образом, нам не нужно модифицировать какую-либо строку кода стратегии, и достигает бесшовного стыковки сwebsocket
рыночный интерфейс.
Этот пример относится только к стратегии использованияexchange.GetTicker
функцию рыночного интерфейса, другие рыночные интерфейсы, такие какexchange.GetDepth
, exchange.GetTrades
иexchange.GetRecords
Для стандартного шаблонаSeamlessConnWS
, вы можете попытаться расширить его еще больше.
Для осуществления специальной связиwebsocket
в шаблоне используйтеDial
Например, вы можете указать параметр -2 вread()
функция, которая возвращает только последние данные в буфере, чтоwebsocket
Подключение принято.
Спасибо за чтение.