A mão a mão ensina-te como dar uma interface de mercado de websocket para uma estratégia velha e velha de ligação sem fio

Autora:Sonhos pequenos, Criado: 2019-09-26 15:47:53, Atualizado: 2023-10-18 19:54:36

img

A mão a mão ensina-te como dar uma interface de mercado de websocket para uma estratégia velha e velha de ligação sem fio

O inventor da plataforma de negociação quantitativaPraça da EstratégiaHá uma série de estratégias interessantes que eram usadas na época para trocas de moeda digital.restA maioria das estratégias são baseadas na interface API do protocolo.restA maioria das empresas que operam em mercados de alto nível, por exemplo, estão atualizando as suas interfaces, por vezes mais lentamente. Além disso, recentemente surgiram algumas bolsas.restO problema é que a política não pode ser usada se a política for alterada.websocketO suporte da interface requer uma certa mudança no código da política, que geralmente é mais difícil (muito mais difícil de mudar a política do que reescrever). Como não mudar de estratégia, mas usar?websocketE a interface de trabalho? A plataforma de negociação quantitativa dos inventores é muito flexível e pode ser usada para:

  • 1, Utilize a política "Library de modelos".
  • Dois, simexchange.GetTickerA função que é obtida pela função Hook operação.

A estratégia é executada sem alterar uma linha de código, deixando a estratégia ser executada por uma única linha de código.websocketO motor de dados impulsionado pela interface de negócios é executado. Utilização de linguagens de programaçãoJavaScriptA língua.

Estratégias de análise

Por exemplo, estamos a tentar mudar uma estratégia clássica e antiga, "Bate-fogo".

Endereço estratégico

Primeiro, vamos olhar para o código da estratégia e descobrir que a estratégia é impulsionada pelo mercado de ticks e é usada principalmente por pessoas que estão usando ticks.tickerOs dadosBuySellLastAs características são diferentes.tickerOs dados são obtidos através da função API da plataforma FMZ:exchange.GetTickerO objetivo é claro, e nós colocamos isso em prática.exchange.GetTickerFunçõesHookA operação (ou seja, reescrever para outra versão e substituí-la) é possível. Mas não podemos reescrever a estratégia do quebrador de gelo, isso afetará a estratégia, o que queremos é uma ligação perfeita! A partir daí, o próximo personagem principal deve entrar no palco.

A função de biblioteca de modelos einitFunção de colaboração

Criamos uma biblioteca de modelos chamada:Conexão sem costuraO código inicial em branco.

img

E depois dá-lheConexão sem costuraModelo com 2 parâmetros

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

Usado para controlar se você está ligadowebsocketInterface função, controle especifica a abertura de uma interface de mercado específico. Neste caso, devido ao tamanho limitado, apenas paraexchange.GetTickerA interface faz a operação do gancho.GetTickerA interface é o parâmetro de controle do modo websocket: Hook_GetTicker.

Agora que o modelo está criado, você pode escrever o que você quer para o seu site.websocketO código específico não é mais descrito, pode ser consultado no código SeamlessConnWS (publicado) e na documentação da API.initFunçõ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)
            }
        }
        // ... 
        
    }
}

Como você pode ver, este modelo só implementa dois tipos de câmbio.websocketA interface de transações é denominada em Bitcoin Cash e Token Cash.initA função é para que a estratégia do quebra-gelos cite.Conexão sem costuraApós o modelo, o disco real é executado primeiro.initA função pode ser automaticamenteexchange.GetTickerO conteúdo da função é substituído por usowebsocketImplementação de código de interface, permitindo assim a ligação sem fiowebsocketO que é isso?

Endereço do modelo SeamlessConnWS

Como usar

É muito simples!Conexão sem costuraApós o modelo ser copiado para o seu próprio acervo de políticas, pode ser usado apenas para referenciar a estratégia do "quebra-gelo", como se vê:

img

Selecione, salve e basta.

Criar uma estratégia de "quebra-gelo", um robô real, e a bolsa escolher BinanceimgNão, não. AberturaConexão sem costuraParâmetros de controle no modelo.img

A partir de agora:img

Para facilitar a visualização dos dados enviados, adicionei uma linha de código para imprimir logs em 157 linhas, que produzem os dados enviados pelas bolsas.img

O bot mostra em seu log:img

Isso permite que a websocket interaja com a interface de mercado e a política sem barreiras sem alterar uma linha de código de política.

Este caso é apenas para usoexchange.GetTickerA estratégia de uma função de interface de mercado é explicada por outras interfaces de mercado, como por exemploexchange.GetDepthexchange.GetTradesexchange.GetRecordsE é o mesmo esquema!Conexão sem costuraO blogueiro também escreveu sobre o assunto:

Para links específicos no modelowebsocketA implementação, o usoDialFunções (ver documentação API Dial Function) podem ser ajustadas conforme necessário.read()Função especifica parâmetros-2O que significa que só voltamos.websocketOs dados mais recentes na área de buffer da conexão recebem dados.

Obrigado por ler.


Relacionados

Mais.

congcong009Monk, pode dar-me mais uma versão em Python?

A noiva também.O que é bom, deveria ser compartilhado mais cedo.

Sonhos pequenosMuito bem, obrigado pela sugestão.