На платформе количественной торговли InventorСтратегический квадратВ Интернете есть много интересных стратегий. В то время большинство цифровых валютных бирж использовалиrest
Интерфейс API протокола, на котором основаны многие стратегииrest
Интерфейс, иногда обновления маркета происходят медленно. Кроме того, в последнее время появились некоторые биржиrest
Сбой интерфейса делает политику непригодной к использованию. Если политика изменена, добавьтеwebsocket
Поддержка интерфейса требует внесения определенных изменений в код стратегии, что обычно хлопотно (изменить стратегию гораздо сложнее, чем переписать ее).
Как я могу использовать ту же стратегию, не меняя ее?websocket
А как насчет интерфейса рынка?
Это полностью демонстрирует мощную гибкость платформы количественной торговли Inventor. Мы можем:
exchange.GetTicker
Функция «Операция перехвата» для получения рыночной информации.Это позволяет контролировать стратегиюwebsocket
Данные, полученные через интерфейс рынка, запущены.
Используемый язык кодированияJavaScript
язык.
Например, мы хотим модифицировать классическую старую стратегию «Ледокол».
Давайте сначала посмотрим на код стратегии и увидим, что стратегия основана на тиковых рыночных условиях и в основном используетticker
В данныхBuy
、Sell
、Last
Эти атрибуты,ticker
Данные получены из API-функции платформы FMZ:exchange.GetTicker
Получать. Таким образом, цель ясна.exchange.GetTicker
функцияHook
Все, что нужно сделать, это выполнить операцию (т. е. перезаписать ее другой версией и заменить ее).
Однако мы не можем переписать стратегию Icebreaker, поскольку это повлияет на стратегию. Мы хотим бесшовного соединения! !
Итак, должен появиться следующий главный герой.
init
Координация функцийСоздаем «библиотеку шаблонов» и называем ее:SeamlessConnWS, очистите исходный код.
Тогда дайSeamlessConnWSШаблон задает 2 параметра
Используется для управления включением или выключениемwebsocket
Функция интерфейса, управление и указание открытия конкретного рыночного интерфейса. Из-за ограниченного пространства, толькоexchange.GetTicker
Интерфейс выполняет операции перехвата. Таким образом, параметры включены толькоGetTicker
Интерфейс представляет собой параметр управления режимом веб-сокета: Hook_GetTicker.
После создания шаблона вы можете указать конкретный обмен, к которому будет осуществляться доступ в шаблоне.websocket
Подключитесь, подпишитесь на определенные котировки, а затем ждите, пока биржа отправит данные. Конкретный код не будет здесь повторяться. Вы можете обратиться к коду SeamlessConnWS (публично доступному) и документации API. Вам нужно обратить внимание на шаблон.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("切换为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)
}
}
// ...
}
}
Вы видите, что этот шаблон реализует только 2 обмена.websocket
Рыночные интерфейсы — Binance Spot и Huobi Spot.init
Функция заключается в том, чтобы позволить стратегии «Ледокол» ссылатьсяSeamlessConnWSПосле создания шаблона, при запуске реального диска, первое, что нужно сделать, это выполнитьinit
Функция, которая может автоматическиexchange.GetTicker
Замените содержимое функции наwebsocket
Реализация кода интерфейса для достижения бесшовного соединенияwebsocket
Кавычки.
Все очень просто! ПучокSeamlessConnWSПосле копирования шаблона в собственную библиотеку стратегий вам останется только сослаться на него в стратегии «Ледокол», как показано на рисунке:
Проверьте, сохраните и готово.
Создайте робота в реальном времени по стратегии «Ледокол» и выберите Binance в качестве биржи .
ОткрытьSeamlessConnWSПараметры управления по шаблону.
Запустите его:
Чтобы упростить просмотр отправленных данных, я добавил код журнала печати в строку 157, который выведет данные, отправленные биржей.
Журнал робота показывает:
Таким образом, нет необходимости изменять ни одной строки кода стратегии, и достигается бесшовная интеграция интерфейса и стратегии рынка веб-сокетов.
Этот пример предназначен только для использованияexchange.GetTicker
Объясняется стратегия функции рыночного интерфейса. Другие рыночные интерфейсы, такие какexchange.GetDepth
、exchange.GetTrades
、exchange.GetRecords
Это та же самая рутина! Для образца шаблонаSeamlessConnWS, который может быть расширен в дальнейшем.
Для конкретных ссылок в шаблонахwebsocket
Реализация используетDial
Функция (см. документацию API Функция набора номера), которую можно настроить по мере необходимости. Например, вы можете датьread()
Параметры, указанные функцией-2
, то есть только возвратwebsocket
Соединение получает последние данные в свой буфер.
Спасибо за прочтение