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 usavarest
A interface API do protocolo, muitas estratégias são baseadas emrest
Interface, às vezes as atualizações do mercado são lentas. Além disso, algumas bolsas surgiram recentementerest
Uma falha na interface faz com que a política fique inutilizável. Se a política for modificada, adicionewebsocket
O 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?websocket
E a interface do mercado?
Isso demonstra completamente a flexibilidade poderosa da Inventor Quantitative Trading Platform. Podemos:
exchange.GetTicker
Função Operação de gancho para obtenção de informações de mercado.Isso permite que a estratégia seja controlada porwebsocket
Os dados orientados pela interface de mercado estão em execução.
Linguagem de codificação usadaJavaScript
linguagem.
Por exemplo, queremos modificar uma estratégia clássica antiga “Quebra-gelo”
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 principalmenteticker
Nos dadosBuy
、Sell
、Last
Esses atributos,ticker
Os dados são obtidos da função API da plataforma FMZ:exchange.GetTicker
Pegar. Dessa forma o objetivo fica claro.exchange.GetTicker
funçãoHook
A 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.
init
Coordenação de funçõesCriamos uma “biblioteca de modelos” e a nomeamos:SeamlessConnWS, limpe o código inicial.
Então dêSeamlessConnWSO modelo define 2 parâmetros
Usado para controlar se deve habilitar ou desabilitarwebsocket
Função de interface, controle e especificação da abertura de interface de mercado específica. Devido ao espaço limitado, apenasexchange.GetTicker
A interface executa operações de gancho. Então os parâmetros só são habilitadosGetTicker
A 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 modelowebsocket
Interface, 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 modeloinit
Funçõ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.websocket
As interfaces de mercado são Binance Spot e Huobi Spot.init
A 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 éinit
Função que pode ser ativada automaticamenteexchange.GetTicker
Substitua o conteúdo da função porwebsocket
Implementação de código de interface para obter conexão perfeitawebsocket
Citações.
Endereço do modelo SeamlessConnWS
É 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:
Verifique, salve e pronto.
Crie um robô em tempo real com estratégia “Icebreaker” e selecione Binance como exchange .
AbrirSeamlessConnWSParâmetros de controle no modelo.
Execute-o:
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.
O log do robô mostra:
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.GetTicker
A estratégia da função de interface de mercado é explicada. Outras interfaces de mercado, comoexchange.GetDepth
、exchange.GetTrades
、exchange.GetRecords
É a mesma rotina! Para o modelo de amostraSeamlessConnWS, que pode ser expandido ainda mais.
Para links específicos em modeloswebsocket
A implementação utilizaDial
Funçã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 retornarwebsocket
A conexão recebe os dados mais recentes em seu buffer.
Obrigado pela leitura