
На платформе количественной торговли 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Соединение получает последние данные в свой буфер.
Спасибо за прочтение