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.rest
En la actualidad, la mayoría de los países de la Unión Europea han adoptado medidas de reducción de larest
En la actualidad, la mayoría de los mercados de divisas se encuentran en una fase de revalorización de las cotizaciones.rest
La 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
Realización de una operación exchange.GetTicker
.
Por lo tanto, sin cambiar el código de la estrategia, que la estrategia utilizando los datos impulsados y empujados por elwebsocket
interfaz de mercado.
El lenguaje de escritura de código utiliza el lenguaje de programación JavaScript.
Por ejemplo, cuando necesitamos modificar una estrategia clásica
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 eltick
El valor de mercado se basa principalmente en las propiedades deBuy
, Sell
, yLast
En elticker
Los datos.ticker
los datos se obtienen mediante la función API de la plataforma FMZ Quant:exchange.GetTicker
El objetivo está claro ahora, podemos reemplazar elexchange.GetTicker
Función conHook
operación (es decir, sustituirla por otra versión).
Sin embargo, no podemos reescribirlo en el código de la estrategia
Así que necesitamos el próximo protagonista para debutar.
Creamos una biblioteca de clases de plantillas llamada:
Luego establecer 2 parámetros para elSeamlessConnWS
template.
Estos dos se utilizan para controlar si se utiliza elwebsocket
La función de interfaz, y el control especifica para abrir una interfaz de cotización de mercado específico.hook
La operación para elexchange.GetTicker
Por lo tanto, necesitamos habilitar el parámetro ((Hook_GetTicker
) de laGetTicker
interfaz con elwebsocket
mode.
Una vez que la plantilla se crea, podemos escribir un acceso específico a los intercambioswebsocket
El código específico no se describe aquí, puede referirse a laSeamlessConnWS
El código (ya de código abierto) y la documentación oficial de la API de FMZ Quant.init
funció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 elwebsocket
Interfaz de mercado de dos intercambios, que son el Binance y Huobi.init
La función de la estrategia SeamlessConnWS
modelo, elinit
El mercado real se ejecutará primero durante el proceso de funcionamiento.
Podemos sustituir el contenido de laexchange.GetTicker
Función con el código de uso delwebsocket
En 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.
SeamlessConnWS
Dirección del modelo:https://www.fmz.com/strategy/167755
¡Después de copiar elSeamlessConnWS
Si usted tiene una plantilla en su biblioteca de estrategias, sólo puede utilizar la estrategia
Asegúrese de hacer clic en comprobar la plantilla, y el botón guardar.
Crear un robot de tiempo real
Abrir los parámetros de control en elSeamlessConnWS
template.
Lo ejecutamos:
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.
Muestra en el registro del robot:
De esta manera, no necesitamos modificar ninguna línea del código de la estrategia, y logra un acoplamiento sin problemas con elwebsocket
interfaz de mercado.
Este ejemplo es sólo para la estrategia de uso de laexchange.GetTicker
Función de interfaz de mercado, otras interfaces de mercado tales comoexchange.GetDepth
, exchange.GetTrades
yexchange.GetRecords
Para la plantilla estándarSeamlessConnWS
, puede tratar de expandirlo aún más.
Para la aplicación del vínculo específicowebsocket
En la plantilla, utilizar elDial
Por 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 elwebsocket
La conexión acepta.
Gracias por leer.