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 orest
O protocolo, muitas estratégias baseiam-se norest
A interfaz de mercado, por conseguinte, às vezes a atualização das cotações do mercado é lenta.rest
interface 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
Realização de uma operação exchange.GetTicker
.
Assim, sem alterar o código de estratégia, deixe a estratégia usando os dados conduzidos e empurrados pelowebsocket
interface de mercado.
A linguagem de escrita de código usa a linguagem de programação JavaScript.
Por exemplo, quando precisamos de modificar uma estratégia clássica
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 pelotick
O sistema utiliza principalmente as propriedades deBuy
, Sell
, eLast
emticker
Os dadosticker
Os dados são obtidos pela função API da plataforma FMZ Quant:exchange.GetTicker
O objectivo está claro agora, podemos substituir oexchange.GetTicker
função comHook
operação (ou seja, substituí-la por outra versão).
No entanto, não podemos reescrevê-lo no código de estratégia
Precisamos do próximo protagonista para estrear.
Nós criamos uma biblioteca de classes de modelos chamada: ConeWS
Em seguida, definir 2 parâmetros para oSeamlessConnWS
template.
Estas duas são utilizadas para controlar se a utilização dowebsocket
A função de interface, e o controle especifica para abrir uma interface de cotação de mercado específico.hook
operação para oexchange.GetTicker
Portanto, precisamos habilitar o parâmetroHook_GetTicker
) doGetTicker
Interface com owebsocket
mode.
Uma vez que o modelo é criado, podemos escrever um acesso específico para o exchangewebsocket
O código específico não é descrito aqui, você pode se referir aoSeamlessConnWS
O código (já de código aberto) e a documentação oficial da API FMZ Quant.init
Funçã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 owebsocket
Interface de mercado de duas bolsas, que são a Binance e Huobi.init
A estratégia do SeamlessConnWS
modelo, oinit
A função será executada em primeiro lugar durante o mercado real de execução progresso.
O conteúdo doexchange.GetTicker
função com o código de utilização dowebsocket
Interface, conseguindo assim uma ligação perfeita ao mercado de websockets.
SeamlessConnWS
Endereço do modelo:https://www.fmz.com/strategy/167755
Depois de copiar oSeamlessConnWS
modelo em sua biblioteca de estratégias, você pode apenas usar a estratégia
Certifique-se de clicar em verificar o modelo, e o botão salvar.
Criar um
Abra os parâmetros de controlo noSeamlessConnWS
template.
Acompanha-o:
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.
Display no registro do robô:
Desta forma, não precisamos modificar qualquer linha do código de estratégia, e alcança uma ligação perfeita com owebsocket
interface de mercado.
Este exemplo é apenas para a estratégia de utilização doexchange.GetTicker
Função de interface de mercado, outras interfaces de mercado, tais comoexchange.GetDepth
, exchange.GetTrades
eexchange.GetRecords
Para o modelo padrãoSeamlessConnWS
, você pode tentar expandir ainda mais.
Para a execução da ligação específicawebsocket
No modelo, utilizar oDial
A 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 owebsocket
Conexão aceita.
Obrigado por ler.