Ensinar-lhe como deixar uma antiga estratégia de acoplagem da websocket citações interface

Autora:Bem-estar, Criado: 2019-10-08 14:56:58, Atualizado: 2023-11-06 19:41:28

img

Há muitas estratégias interessantes na página quadrada (https://www.fmz.com/squareNaquela época, a maioria das trocas de criptomoedas API interface estavam usando orestO protocolo, muitas estratégias baseiam-se norestA interfaz de mercado, por conseguinte, às vezes a atualização das cotações do mercado é lenta.restinterface falhou no futuro próximo, resultando em uma estratégia que não pode ser executada corretamente.

Enquanto a estratégia for modificada, adicionar suporte para a interface do websocket requer algumas alterações no código da estratégia, o que geralmente é bastante problemático (a dificuldade de mudar a estratégia é muito maior do que reescrevê-la).

Como podemos não mudar o código de estratégia, mas usar a interface de cotação de mercado websocket?

Aqui está a flexibilidade total da plataforma FMZ Quant, podemos usar:

  • Use a estratégia template class library.

  • Realização de uma operação Hook para cotações de mercado de câmbio com função de obtenção de:exchange.GetTicker.

Assim, sem alterar o código de estratégia, deixe a estratégia usando os dados conduzidos e empurrados pelowebsocketinterface de mercado.

A linguagem de escrita de código usa a linguagem de programação JavaScript.

Estratégia de análise

Por exemplo, quando precisamos de modificar uma estratégia clássica Icebreaker

Endereço estratégico:https://www.fmz.com/strategy/9929

Vamos dar uma olhada no código de estratégia e descobrir que a estratégia é impulsionada pelotickO sistema utiliza principalmente as propriedades deBuy, Sell, eLastemtickerOs dadostickerOs dados são obtidos pela função API da plataforma FMZ Quant:exchange.GetTickerO objectivo está claro agora, podemos substituir oexchange.GetTickerfunção comHookoperação (ou seja, substituí-la por outra versão).

No entanto, não podemos reescrevê-lo no código de estratégia icebreaker, isso afetará a lógica da estratégia, queremos a ligação perfeita para o websocket!

Precisamos do próximo protagonista para estrear.

A função template class library e a função init trabalham juntas

Nós criamos uma biblioteca de classes de modelos chamada: ConeWS

img

Em seguida, definir 2 parâmetros para oSeamlessConnWS template.

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

Estas duas são utilizadas para controlar se a utilização dowebsocketA função de interface, e o controle especifica para abrir uma interface de cotação de mercado específico.hookoperação para oexchange.GetTickerPortanto, precisamos habilitar o parâmetroHook_GetTicker) doGetTickerInterface com owebsocket mode.

Uma vez que o modelo é criado, podemos escrever um acesso específico para o exchangeswebsocketO código específico não é descrito aqui, você pode se referir aoSeamlessConnWSO código (já de código aberto) e a documentação oficial da API FMZ Quant.initFunção no modelo e variáveis globais_DictConnectCreater, _ConnMap:

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

Pode-se ver que este modelo só implementa owebsocketInterface de mercado de duas bolsas, que são a Binance e Huobi.initA estratégia do Icebreaker tem como função assegurar que, quando aSeamlessConnWSmodelo, oinitA função será executada em primeiro lugar durante o mercado real de execução progresso.

O conteúdo doexchange.GetTickerfunção com o código de utilização dowebsocketInterface, conseguindo assim uma ligação perfeita ao mercado de websockets.

SeamlessConnWSEndereço do modelo:https://www.fmz.com/strategy/167755

Como usá-lo

Depois de copiar oSeamlessConnWSmodelo em sua biblioteca de estratégias, você pode apenas usar a estratégia Icebreaker para referenciá-lo, como mostrado na figura:

img

Certifique-se de clicar em verificar o modelo, e o botão salvar.

Criar um Icebreaker estratégia em tempo real robô, a troca escolhe o par de negociação.

img

Abra os parâmetros de controlo noSeamlessConnWS template.

img

Acompanha-o:

img

A fim de ver facilmente os dados empurrados, na linha 157, adicionamos especificamente um código de registro de impressão, que irá produzir os dados empurrados pela troca.

img

Display no registro do robô:

img

Desta forma, não precisamos modificar qualquer linha do código de estratégia, e alcança uma ligação perfeita com owebsocketinterface de mercado.

Este exemplo é apenas para a estratégia de utilização doexchange.GetTickerFunção de interface de mercado, outras interfaces de mercado, tais comoexchange.GetDepth, exchange.GetTradeseexchange.GetRecordsPara o modelo padrãoSeamlessConnWS, você pode tentar expandir ainda mais.

Para a execução da ligação específicawebsocketNo modelo, utilizar oDialA função Dial pode ser alterada conforme necessário. Por exemplo, pode especificar o parâmetro -2 para oread()função, que retorna apenas os dados mais recentes no buffer que owebsocketConexão aceita.

Obrigado por ler.


Relacionados

Mais.