En la plataforma de negociación cuantitativa de InventorPlaza de la estrategiaExisten muchas estrategias interesantes en Internet. En ese momento, la mayoría de los intercambios de monedas digitales usabanrest
La interfaz API del protocolo, muchas estrategias se basan enrest
Interfaz, a veces las actualizaciones del mercado son lentas. Además, recientemente han aparecido algunos intercambiosrest
Una falla en la interfaz hace que la política no se pueda utilizar. Si se modifica la política, agreguewebsocket
La compatibilidad de la interfaz requiere ciertos cambios en el código de la estrategia, lo que suele ser problemático (cambiar la estrategia es mucho más difícil que reescribirla).
¿Cómo puedo utilizar la misma estrategia sin cambiarla?websocket
¿Qué pasa con la interfaz del mercado?
Esto demuestra plenamente la gran flexibilidad de la plataforma de negociación cuantitativa de Inventor. Podemos:
exchange.GetTicker
Operación de gancho de función para obtener información del mercado.Esto permite que la estrategia sea controlada porwebsocket
Los datos impulsados por la interfaz del mercado se están ejecutando.
Lenguaje de codificación utilizadoJavaScript
idioma.
Por ejemplo, queremos modificar una vieja estrategia clásica “Rompehielos”.
Primero veamos el código de estrategia y descubramos que la estrategia está impulsada por las condiciones del mercado de ticks y utiliza principalmenteticker
En los datosBuy
、Sell
、Last
Estos atributos,ticker
Los datos se obtienen de la función API de la plataforma FMZ:exchange.GetTicker
Conseguir. De esta manera el objetivo queda claro.exchange.GetTicker
funciónHook
La operación (es decir, reescribirlo con otra versión y reemplazarlo) es todo lo que se necesita.
Sin embargo, no podemos reescribir la estrategia de Icebreaker porque eso afectará la estrategia. ¡Lo que queremos es una conexión perfecta! !
Entonces el próximo protagonista necesita aparecer.
init
Coordinación de funcionesCreamos una “biblioteca de plantillas” y la llamamos:SeamlessConnWS, borre el código inicial.
Entonces daleSeamlessConnWSLa plantilla establece 2 parámetros
Se utiliza para controlar si se habilita o deshabilitawebsocket
Función de interfaz, controlar y especificar la apertura de la interfaz de mercado específica. En este ejemplo, debido al espacio limitado, soloexchange.GetTicker
La interfaz realiza operaciones de gancho. Por lo tanto, los parámetros solo están habilitadosGetTicker
La interfaz es el parámetro de control del modo websocket: Hook_GetTicker.
Una vez creada la plantilla, puedes escribir el intercambio específico al que acceder en la plantilla.websocket
Interfaz, suscríbase a ciertas cotizaciones y luego espere a que el intercambio envíe los datos. No se repetirá aquí el código específico. Puede consultar el código de SeamlessConnWS (disponible públicamente) y la documentación de la API. Lo que necesitas mirar es la plantillainit
Funciones y variables globales_DictConnectCreater
、_ConnMap
:
Código:
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)
}
}
// ...
}
}
Puedes ver que esta plantilla solo implementa 2 intercambios.websocket
Las interfaces del mercado son Binance Spot y Huobi Spot.init
La función es permitir que la estrategia “Rompehielos” haga referenciaSeamlessConnWSUna vez creada la plantilla, al ejecutar el disco real lo primero que se ejecutará seráinit
Función que puede automáticamenteexchange.GetTicker
Reemplace el contenido de la función conwebsocket
Implementación de código de interfaz para lograr una conexión perfectawebsocket
Citas.
Dirección de plantilla SeamlessConnWS
¡Es muy sencillo! ManojoSeamlessConnWSDespués de copiar la plantilla a tu propia biblioteca de estrategias, solo necesitas referenciarla en la estrategia “Rompehielos”, como se muestra en la figura:
Compruébalo, guárdalo y listo.
Crea un robot en tiempo real con la estrategia “Icebreaker” y selecciona Binance como exchange .
AbiertoSeamlessConnWSParámetros de control en la plantilla.
Ejecútalo:
Para facilitar la visualización de los datos enviados, agregué un código de registro de impresión en la línea 157, que generará los datos enviados por el intercambio.
El registro del robot muestra:
De esta manera, no es necesario modificar una sola línea de código de estrategia y se logra una integración perfecta de la interfaz y la estrategia del mercado websocket.
Este ejemplo es solo para usoexchange.GetTicker
Se explica la estrategia de la función de interfaz de mercado. Otras interfaces de mercado comoexchange.GetDepth
、exchange.GetTrades
、exchange.GetRecords
¡Es la misma rutina! Para la plantilla de muestraSeamlessConnWS, que puede ampliarse aún más.
Para enlaces específicos en plantillaswebsocket
La implementación utilizaDial
Función (consulte la documentación de la API Función de marcado), que se puede ajustar según sea necesario. Por ejemplo, puedes darread()
Parámetros especificados de la función-2
, es decir, solo volverwebsocket
La conexión recibe los últimos datos en su búfer.
Gracias por leer