Type/to search
8
Follow
1364
Followers
Ensinaremos passo a passo como conectar perfeitamente uma estratégia antiga à interface do mercado websocket
Original
Created 2019-09-26 15:47:53  Updated 2024-12-17 20:38:08
 3
 3802

img

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".
    1. 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.

img

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

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

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:

img

Verifique, salve e pronto.

Crie um robô em tempo real com estratégia "Icebreaker" e selecione Binance como exchange img .
AbrirSeamlessConnWSParâmetros de controle no modelo.
img

Execute-o:
img

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.
img

O log do robô mostra:
img

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

Related Recommendations
Comment
All comments (3)

    梦哥,能多一点python版本的么?

    7 years ago

    好的 感谢建议。

    7 years ago

    好东西,应该早点分享嘛。。。

    7 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)