Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

Creado el: 2019-09-26 15:47:53, Actualizado el: 2024-12-17 20:38:08
comments   3
hits   3049

Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

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 usabanrestLa interfaz API del protocolo, muchas estrategias se basan enrestInterfaz, a veces las actualizaciones del mercado son lentas. Además, recientemente han aparecido algunos intercambiosrestUna falla en la interfaz hace que la política no se pueda utilizar. Si se modifica la política, agreguewebsocketLa 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:

  • 1. Utilice la estrategia “Biblioteca de plantillas”.
  • 2. Síexchange.GetTicker Operación de gancho de función para obtener información del mercado.

Esto permite que la estrategia sea controlada porwebsocketLos datos impulsados ​​por la interfaz del mercado se están ejecutando. Lenguaje de codificación utilizadoJavaScriptidioma.

Estrategia Analítica

Por ejemplo, queremos modificar una vieja estrategia clásica “Rompehielos”.

Dirección de la política

Primero veamos el código de estrategia y descubramos que la estrategia está impulsada por las condiciones del mercado de ticks y utiliza principalmentetickerEn los datosBuySellLastEstos atributos,tickerLos datos se obtienen de la función API de la plataforma FMZ:exchange.GetTicker Conseguir. De esta manera el objetivo queda claro.exchange.GetTickerfunciónHookLa 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.

Función de biblioteca de plantillas yinitCoordinación de funciones

Creamos una “biblioteca de plantillas” y la llamamos:SeamlessConnWS, borre el código inicial.

Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

Entonces daleSeamlessConnWSLa plantilla establece 2 parámetros

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

Se utiliza para controlar si se habilita o deshabilitawebsocketFunción de interfaz, controlar y especificar la apertura de la interfaz de mercado específica. En este ejemplo, debido al espacio limitado, soloexchange.GetTickerLa interfaz realiza operaciones de gancho. Por lo tanto, los parámetros solo están habilitadosGetTickerLa 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.websocketInterfaz, 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 plantillainitFunciones 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.websocketLas interfaces del mercado son Binance Spot y Huobi Spot.initLa 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áinitFunción que puede automáticamenteexchange.GetTickerReemplace el contenido de la función conwebsocketImplementación de código de interfaz para lograr una conexión perfectawebsocketCitas.

Dirección de plantilla SeamlessConnWS

Cómo usarlo

¡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:

Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

Compruébalo, guárdalo y listo.

Crea un robot en tiempo real con la estrategia “Icebreaker” y selecciona Binance como exchange Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket. . AbiertoSeamlessConnWSParámetros de control en la plantilla. Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

Ejecútalo: Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

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. Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

El registro del robot muestra: Le enseñaremos paso a paso cómo conectar sin problemas una estrategia antigua a la interfaz del mercado websocket.

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.GetTickerSe explica la estrategia de la función de interfaz de mercado. Otras interfaces de mercado comoexchange.GetDepthexchange.GetTradesexchange.GetRecords¡Es la misma rutina! Para la plantilla de muestraSeamlessConnWS, que puede ampliarse aún más.

Para enlaces específicos en plantillaswebsocketLa implementación utilizaDialFunció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 volverwebsocketLa conexión recibe los últimos datos en su búfer.

Gracias por leer