Te enseño cómo dejar que una vieja estrategia acoplamiento de la interfaz de citas websocket

El autor:La bondad, Creado: 2019-10-08 14:56:58, Actualizado: 2023-11-06 19:41:28

img

Hay muchas estrategias interesantes en la página cuadrada (https://www.fmz.com/squareEn aquel entonces, la mayoría de los intercambios de criptomonedas utilizaban la interfaz de API de la plataforma FMZ Quant.restEn la actualidad, la mayoría de los países de la Unión Europea han adoptado medidas de reducción de larestEn la actualidad, la mayoría de los mercados de divisas se encuentran en una fase de revalorización de las cotizaciones.restLa interfaz ha fallado en un futuro próximo, lo que resulta en una estrategia que no puede funcionar correctamente.

Mientras la estrategia se modifique, añadir soporte para la interfaz websocket requiere algunos cambios en el código de la estrategia, que generalmente es bastante problemático (la dificultad de cambiar la estrategia es mucho mayor que reescribirla).

¿Cómo podemos no cambiar el código de la estrategia, pero utilizar la websocket mercado de cotización de la interfaz?

Aquí está toda la flexibilidad de la plataforma FMZ Quant, podemos usar:

  • Utilice la estrategia biblioteca de clases de plantillas.

  • Realización de una operación Hook para cotizaciones de mercado de divisas que obtienen la función de:exchange.GetTicker.

Por lo tanto, sin cambiar el código de la estrategia, que la estrategia utilizando los datos impulsados y empujados por elwebsocketinterfaz de mercado.

El lenguaje de escritura de código utiliza el lenguaje de programación JavaScript.

Estrategia de análisis

Por ejemplo, cuando necesitamos modificar una estrategia clásica Rompehielos

Dirección estratégica:https://www.fmz.com/strategy/9929

A continuación, examinemos el código de estrategia y descubrimos que la estrategia está impulsada por eltickEl valor de mercado se basa principalmente en las propiedades deBuy, Sell, yLastEn eltickerLos datos.tickerlos datos se obtienen mediante la función API de la plataforma FMZ Quant:exchange.GetTickerEl objetivo está claro ahora, podemos reemplazar elexchange.GetTickerFunción conHookoperación (es decir, sustituirla por otra versión).

Sin embargo, no podemos reescribirlo en el código de la estrategia icebreaker, afectará a la lógica de la estrategia, queremos el acoplamiento sin problemas a la websocket!

Así que necesitamos el próximo protagonista para debutar.

La función template class library y la función init trabajan juntas

Creamos una biblioteca de clases de plantillas llamada: SeamlessConnWS

img

Luego establecer 2 parámetros para elSeamlessConnWS template.

  • EsUsedWebSocket
  • Se puede utilizar el código de código de la aplicación.

img

Estos dos se utilizan para controlar si se utiliza elwebsocketLa función de interfaz, y el control especifica para abrir una interfaz de cotización de mercado específico.hookLa operación para elexchange.GetTickerPor lo tanto, necesitamos habilitar el parámetro ((Hook_GetTicker) de laGetTickerinterfaz con elwebsocket mode.

Una vez que la plantilla se crea, podemos escribir un acceso específico a los intercambioswebsocketEl código específico no se describe aquí, puede referirse a laSeamlessConnWSEl código (ya de código abierto) y la documentación oficial de la API de FMZ Quant.initfunción en la plantilla y las variables globales_DictConnectCreater, _ConnMap:

Parte del código:

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)
            }
        }
        // ... 
        
    }
}

Se puede ver que esta plantilla sólo implementa elwebsocketInterfaz de mercado de dos intercambios, que son el Binance y Huobi.initLa función de la estrategia Icebreaker es asegurarse de que cuando la estrategiaSeamlessConnWSmodelo, elinitEl mercado real se ejecutará primero durante el proceso de funcionamiento.

Podemos sustituir el contenido de laexchange.GetTickerFunción con el código de uso delwebsocketEn el caso de las aplicaciones web, la interfaz de conexión de los servidores de Internet es la que permite la conexión sin problemas con el mercado de los websockets.

SeamlessConnWSDirección del modelo:https://www.fmz.com/strategy/167755

Cómo usarlo

¡Después de copiar elSeamlessConnWSSi usted tiene una plantilla en su biblioteca de estrategias, sólo puede utilizar la estrategia Icebreaker para hacer referencia a ella, como se muestra en la figura:

img

Asegúrese de hacer clic en comprobar la plantilla, y el botón guardar.

Crear un robot de tiempo real Breaker estrategia, el intercambio elige el par de negociación.

img

Abrir los parámetros de control en elSeamlessConnWS template.

img

Lo ejecutamos:

img

Con el fin de ver fácilmente los datos empujados, en la línea 157, añadimos específicamente un código de registro de impresión, que saldrá los datos empujados por el intercambio.

img

Muestra en el registro del robot:

img

De esta manera, no necesitamos modificar ninguna línea del código de la estrategia, y logra un acoplamiento sin problemas con elwebsocketinterfaz de mercado.

Este ejemplo es sólo para la estrategia de uso de laexchange.GetTickerFunción de interfaz de mercado, otras interfaces de mercado tales comoexchange.GetDepth, exchange.GetTradesyexchange.GetRecordsPara la plantilla estándarSeamlessConnWS, puede tratar de expandirlo aún más.

Para la aplicación del vínculo específicowebsocketEn la plantilla, utilizar elDialPor ejemplo, puede especificar el parámetro -2 para la función Dial.read()función, que devuelve sólo los datos más recientes en el búfer que elwebsocketLa conexión acepta.

Gracias por leer.


Relacionados

Más.