Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Criado em: 2019-09-26 15:47:53, atualizado em: 2024-12-17 20:38:08
comments   3
hits   3049

Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Na plataforma de negociação quantitativa InventorPraça da EstratégiaExistem muitas estratégias interessantes na Internet. Naquela época, a maioria das bolsas de moeda digital usavarestA interface API do protocolo, muitas estratégias são baseadas emrestInterface, às vezes as atualizações do mercado são lentas. Além disso, algumas bolsas surgiram recentementerestUma falha na interface faz com que a política fique inutilizável. Se a política for modificada, adicionewebsocketO suporte à interface requer certas alterações no código da estratégia, o que geralmente é problemático (alterar a estratégia é muito mais difícil do que reescrevê-la). Como posso usar a mesma estratégia sem alterá-la?websocketE a interface do mercado? Isso demonstra completamente a flexibilidade poderosa da Inventor Quantitative Trading Platform. Podemos:

  • 1. Use a estratégia “Biblioteca de modelos”.
  • 2. Simexchange.GetTicker Função Operação de gancho para obtenção de informações de mercado.

Isso permite que a estratégia seja controlada porwebsocketOs dados orientados pela interface de mercado estão em execução. Linguagem de codificação usadaJavaScriptlinguagem.

Estratégia Analítica

Por exemplo, queremos modificar uma estratégia clássica antiga “Quebra-gelo”

Endereço da Política

Vamos primeiro olhar para o código da estratégia e descobrir que a estratégia é conduzida pelas condições do mercado de ticks e usa principalmentetickerNos dadosBuySellLastEsses atributos,tickerOs dados são obtidos da função API da plataforma FMZ:exchange.GetTicker Pegar. Dessa forma o objetivo fica claro.exchange.GetTickerfunçãoHookA operação (ou seja, reescrevê-lo com outra versão e substituí-lo) é tudo o que é necessário. No entanto, não podemos reescrever a estratégia Icebreaker, pois isso afetará a estratégia. O que queremos é uma conexão perfeita! ! Então o próximo protagonista precisa aparecer.

Função da biblioteca de modelos einitCoordenação de funções

Criamos uma “biblioteca de modelos” e a nomeamos:SeamlessConnWS, limpe o código inicial.

Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Então dêSeamlessConnWSO modelo define 2 parâmetros

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Usado para controlar se deve habilitar ou desabilitarwebsocketFunção de interface, controle e especificação da abertura de interface de mercado específica. Devido ao espaço limitado, apenasexchange.GetTickerA interface executa operações de gancho. Então os parâmetros só são habilitadosGetTickerA interface é o parâmetro de controle do modo websocket: Hook_GetTicker.

Depois que o modelo for criado, você pode escrever a troca específica para acessar no modelowebsocketInterface, assine determinadas cotações e aguarde até que a bolsa envie os dados. O código específico não será repetido aqui. Você pode consultar o código SeamlessConnWS (disponível publicamente) e a documentação da API. O que você precisa observar é o modeloinitFunções e variáveis ​​globais_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)
            }
        }
        // ... 
        
    }
}

Você pode ver que este modelo implementa apenas 2 trocas.websocketAs interfaces de mercado são Binance Spot e Huobi Spot.initA função é permitir que a estratégia “Icebreaker” faça referênciaSeamlessConnWSApós a criação do modelo, quando o disco real for executado, a primeira coisa que será executada éinitFunção que pode ser ativada automaticamenteexchange.GetTickerSubstitua o conteúdo da função porwebsocketImplementação de código de interface para obter conexão perfeitawebsocketCitações.

Endereço do modelo SeamlessConnWS

Como usar

É muito simples! PacoteSeamlessConnWSDepois de copiar o modelo para sua própria biblioteca de estratégias, você só precisa referenciá-lo na estratégia “Icebreaker”, conforme mostrado na figura:

Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Verifique, salve e pronto.

Crie um robô em tempo real com estratégia “Icebreaker” e selecione Binance como exchange Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket . AbrirSeamlessConnWSParâmetros de controle no modelo. Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Execute-o: Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Para facilitar a visualização dos dados enviados, adicionei um código de log de impressão na linha 157, que exibirá os dados enviados pela exchange. Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

O log do robô mostra: Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket

Dessa forma, não há necessidade de modificar uma única linha de código de estratégia, e a integração perfeita da interface de mercado do websocket e da estratégia é alcançada.

Este exemplo é apenas para usoexchange.GetTickerA estratégia da função de interface de mercado é explicada. Outras interfaces de mercado, comoexchange.GetDepthexchange.GetTradesexchange.GetRecordsÉ a mesma rotina! Para o modelo de amostraSeamlessConnWS, que pode ser expandido ainda mais.

Para links específicos em modeloswebsocketA implementação utilizaDialFunção (consulte a documentação da API Função de discagem), que pode ser ajustada conforme necessário. Por exemplo, você pode darread()Parâmetros especificados pela função-2, ou seja, somente retornarwebsocketA conexão recebe os dados mais recentes em seu buffer.

Obrigado pela leitura