Similaridades e diferenças entre os futuros de commodities e as trocas de criptomoedas API

Autora:Bem-estar, Criado: 2019-09-28 10:22:34, Atualizado: 2023-11-06 20:01:39

img

O CTP de futuros de commodities e a troca de API de criptomoedas têm diferenças significativas. Conhecer a negociação de programação de troca de criptomoedas não significa estar familiarizado com a programação de CTP de futuros de commodities. não podemos simplesmente copiar o método e a experiência.

Dados históricos

A interface do CTP não fornece cotação de mercado histórica, e a cotação de mercado histórica precisa ser resolvida através da agência de cotação de mercado. Se os dados de mercado forem perdidos devido à falha no login, o CTP não fornece um mecanismo de reabastecimento de mercado. As cotações de mercado históricas só podem ser obtidas através de agência de terceiros. A maioria das bolsas de criptomoedas geralmente fornece uma interface para obter a linha K e o histórico de transações.

Diferente acordo

A API de troca de criptomoedas é geralmente umRESTewebsocketO CTP encapsula internamente a lógica relacionada à rede e comunica com o fundo do CTP usando o protocolo FTD baseado no protocolo TCP. Dividido em três modos:

  • Modo de resposta de solicitação: o cliente inicia uma solicitação e o fundo do CTP recebe e responde à solicitação.

  • Modo de comunicação em transmissão: depois de o cliente subscrever a cotação do mercado do contrato, o CTP empurra as cotações do mercado através da transmissão.

  • Modo de comunicação privada: Após o cliente encomendar um contrato, as informações de encomenda, retorno da transação, etc. são empurradas pelo CTP ponto a ponto.

Todas as cotações e transações de ordem do acordo CTP serão notificadas após alterações, enquanto as ordens de consulta, contas e posições são ativamente consultadas.

Diferentes níveis de dados

A profundidade do protocolo CTP são apenas o último preço de compra e venda, as cotações de mercado mais profundas, como cinco camadas de preço de compra e venda são caras, você precisa pagar dinheiro extra para a bolsa de futuros para obtê-lo. por outro lado, A troca de criptomoedas geralmente pode obter profundidade total até 200 camadas de preços de compra e venda.

Além disso, o CTP não empurra as cotações de transações reais, ele só pode ser revertido por mudanças de posição, e a API de troca de criptomoedas pode obter cotações de transações detalhadas reais.

Diferentes restrições de acesso

As trocas de criptomoedas são geralmente limitadas a 10 ticks por segundo. Não há requisitos especiais para retiradas de pedidos. A CTP tem restrições estritas sobre pedidos que precisam ser enviados ativamente. Geralmente, uma vez por 2 segundos é bastante segura, e também há requisitos para o número de retiradas.

Estabilidade

O protocolo CTP é muito estável e quase não há erros ou problemas de rede. Devido à troca de criptomoedas ter menos restrição, mais tempo de transação, manutenção do sistema, atraso de dados e erros de rede são muito comuns.

Plataforma quântica FMZ Protocolos CTP Melhores práticas

CTP modo padrão para obter a interface de mercado, tais comoGetTicker, GetDepth, GetRecordssão dados em cache para obter o mais recente, se não houver dados vai esperar até que haja dados, por isso a estratégia não pode usarSleepQuando há uma alteração de cotação de mercado,ticker, depth, erecordsNeste ponto, qualquer interface será devolvida imediatamente quando for chamada. Em seguida, o estado de interface chamada é definido para esperar o modo de atualização, Quando a próxima vez que a mesma interface for chamada, ele esperará que novos dados retornem.

Alguns contratos comerciais impopulares ou o preço atinge o preço limitado diário ocorrerá por um longo tempo sem qualquer atividade comercial, o que é normal para a estratégia para ficar preso por um longo tempo.

Se você quiser obter os dados toda vez que você obter a cotação do mercado, mesmo os dados antigos, você pode mudar para o mercado imediatamente atualizar o modoexchange.IO ("mode", 0)Neste ponto, a estratégia não pode ser escrita como um condutor de evento.SLeepAlgumas estratégias de baixa frequência podem usar este modo, e o design da estratégia é simples.exchange.IO("mode", 1)para voltar ao modo de cache padrão.

No entanto, se houver vários contratos de negociação, é possível que um contrato não tenha sido atualizado, resultando em um bloqueio da interface do mercado e outras atualizações de cotações de mercado de contratos de negociação não estejam disponíveis. Para resolver este problema, você pode usar o modo de atualização imediata, mas não é conveniente escrever uma estratégia de alta frequência. Neste ponto, você pode usar o modo push de evento para obter o push de ordens e cotações.exchange.IO("wait")Se múltiplos objetos de troca são adicionados, esta é uma situação rara na negociação de futuros de commodities, você pode usarexchange.IO ("wait_any"), e o devolvidoindexindicará o índice da troca devolvida.

Cotação de mercadotickEmpurra para mudar:

{Event:"tick", Index: exchange index (in the order of robot exchange added), Nano: event nanosecond time, Symbol: contract name}

Ordem empurrar:

{Event:"order", Index: Exchange Index, Nano: Event Nanosecond Time, Order: Order Information (consistent with GetOrder)}

Neste ponto, a estrutura da estratégia pode ser escrita como:

function on_tick(symbol){
     Log("symbol update")
     exchange.SetContractType(symbol)
     Log(exchange.GetTicker())
}

function on_order(order){
     Log("order update", order)
}

function main(){
     while(true){
         if(exchange.IO("status")){ //Determine the link status
             exchange.IO("mode", 0)
             _C (exchange.SetContractType, "MA888") // subscribe to the MA, only the first time is the real request to send a subscription, the following are just program switch, won't consume any time.
             _C(exchange.SetContractType, "rb888") // Subscribe rb
             While(True){
                 Var e = exchange.IO("wait")
                 If(e){
                     If(e.event == "tick"){
                         On_tick(e.Symbol)
                     }else if(e.event == "order"){
                         On_order(e.Order)
                     }
                 }
            }
         }else{
             Sleep(10*1000)
         }
     }
}

Relacionados

Mais.