O recurso está a ser carregado... Carregamento...

Inventor de plataforma de negociação quantitativa API de atualização: melhorar a experiência de design estratégico

Autora:Inventor quantificado - sonho pequeno, Criado: 2024-06-28 09:08:29, Atualizado: 2024-11-01 10:08:12

[TOC]

img

Prefácio

A plataforma de negociação quantitativa foi reformulada várias vezes após nove anos de inovações tecnológicas, embora nós, usuários, talvez não tenhamos percebido. Nos últimos dois anos, a plataforma fez uma série de otimizações e atualizações na experiência do usuário, incluindo uma interface de interface totalmente atualizada, ferramentas de negociação quantitativa mais comuns e mais suporte a dados de retorno.

Para facilitar o design da política, a lógica de negociação é mais clara e mais fácil de usar para iniciantes, a plataforma atualizou a interface API usada pela política. Usando a versão mais recente, os administradores podem ativar essas novas funções. A plataforma ainda é compatível com as chamadas da interface antiga.

Então, este artigo mostra quais as atualizações de atualizações de interface e quais as mudanças necessárias para usar as políticas antigas para ser compatível com a API atual.

1 A nova interface de API

exchange.GetTickers函数

Esta interface de mercado agregado é indispensável para a concepção de estratégias multi-variedades, estratégias de monitoramento de mercados globais. Para tornar as estratégias mais fáceis de desenvolver e evitar a duplicação de rodas.

Se a bolsa não tiver essa interface (exchanges separados), a chamadaexchange.GetTickers()O blogueiro também escreveu sobre o assunto:

A função não possui nenhum parâmetro e retorna dados de mercado em tempo real de todas as variedades agregadas na interface de mercado. Pode ser simplesmente entendida como:

exchange.GetTickers()A função éexchange.GetTicker()A variedade completa de versões solicitadas de funções ((olhe com atenção, a diferença entre os nomes das funções é apenas o único múltiplo) ).

A partir daí, o projeto foi lançado no Brasil.

function main() {
    exchange.IO("simulate", true)

    var tickers = exchange.GetTickers()
    if (!tickers) {
        throw "tickers error"
    }

    var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var i in tickers) {
        var ticker = tickers[i]
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return tickers.length
}

img

exchange.CreateOrder函数

Novo aumentoexchange.CreateOrder()A função é o foco desta atualização.exchange.CreateOrder()A maior função da função é especificar diretamente no parâmetro da função a variedade, a direção, etc. do pedido. Assim, não depende mais da configuração atual do sistema de pares de transações, código de contrato, direção de transações, etc.

Em cenários de negociação múltipla, a complexidade do projeto é muito reduzida em cenários de conexão.exchange.CreateOrder()Os quatro parâmetros da função são:symbolsidepriceamount

Testes de ambiente com o OKX Futures Simulator:

function main() {
    exchange.IO("simulate", true)

    var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
    var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
    var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)

    Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}

img

Isso só foi feito três vezes.exchange.CreateOrder()A chamada de função é feita para três tipos diferentes de ordens de futuros, em diferentes direções.

exchange.GetHistoryOrders函数

Novo aumentoexchange.GetHistoryOrders()A função é usada para obter ordens de transação históricas de uma variedade, que também requer suporte de interface de câmbio.

Para consultar os pedidos históricos, as interfaces implementadas por cada exchange são muito diferentes:

  • Alguns suportam consultas separadas, outros não.
  • Algumas transações não podem ser consultadas durante todo o período da janela de consulta, ou seja, ordens com mais de N dias;
  • A maioria das casas de câmbio suporta consultas de horário específico, mas algumas não.

Para que essas interfaces sejam embaladas com o maior grau de compatibilidade, é necessário considerar se elas estão de acordo com as necessidades e expectativas da estratégia.

Para mais informações sobre funções, consulte o manual de gramática do API:

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

Testes em ambiente real de caixa de dinheiro:

function main() {
    var orders = exchange.GetHistoryOrders("ETH_USDT")

    // 写入图表
    var tbl = {type: "table", title: "test GetHistoryOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
    for (var order of orders) {
        tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
    }
    
    LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) +  "`")
}

img

exchange.GetPositions函数

A função de captura de dados de armazenamento da versão antiga éexchange.GetPosition()A atualização acrescenta uma nova função de aquisição de armazenamento para melhor se adequar à semântica do nome da função:exchange.GetPositions()Não é uma função que não seja compatível com o sistema operacional.

Observe que os dois nomes de função só diferem por um final de s, pois o GetPositions é mais semântico, por isso é recomendado que todos os sucessos usem o GetPositions.

exchange.GetPositions()A função tem três formas de ser chamada:

  • exchange.GetPositions (em inglês) Quando nenhum parâmetro é transmitidoNegociação / Código do contratoA configuração de armazém de dados de todas as variedades da dimensão atual é solicitada.

  • exchange.GetPositions ((ETH_USDT.swap botão) Quando se especifica a informação de uma variedade específica (um formato como o ETH_USDT.swap é definido pela plataforma FMZ), os dados de armazenamento de uma variedade específica são solicitados. Exemplos:BTC_USD.swapETH_USDT.swapETH_USDT.quarterE assim por diante. BTC_USD.swap: Contrato de permanência do BTC. ETH_USDT.swap: Contrato de permanência de U-bit do ETH. ETH_USDC.swap: contrato permanente de USDC baseado no ETH. (além do USDT, pode-se especificar uma moeda de cotação diferente, sem mais detalhes) ETH_USDT.quarter: O índice de troca trimestral de U bits do ETH é de aproximadamente. BTC_USD. BTC-USD-201226-24250-C: Contratos de opções binárias em BTC.

  • exchange.GetPositions (USDT.swap) Os dados de armazenamento de todas as variedades são solicitados de acordo com a faixa de dimensões especificada. USDT.swap: Escala de contrato permanente de Ubit. USDT.futures: U é a taxa de troca de bits aproximada. USDC.swap: USDC local de contratação permanente. (além de USDT, pode ser especificado uma moeda de citação diferente, sem mais detalhes) USDC.futures: Rango aproximado da taxa de câmbio local USDC. USD.swap: Escala de contratos permanentes em moeda local. USD.futures: Rango aproximado do índice de troca de moedas. USDT.option: Escala do contrato de opções binárias. USD.option: escopo do contrato de opções binárias.

    A divisão de dimensões de contratos de algumas bolsas especiais: USDT.futures_combo:Futures_Deribit é um contrato de parceria de preços. USD.futures_ff:Futures_Kraken é uma bolsa de valores de câmbio de fundos de investimento. USD.swap_pf:Futures_Kraken é um contrato de garantia de longo prazo de fundos mistas.

    Para as dimensões que não são suportadas pela interface API da bolsa, a chamada retornará um valor em branco.

Testes de ambiente com o OKX Futures Simulator:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    var p1 = exchange.GetPositions()
    var p2 = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    for (var positions of [p1, p2]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

Quando se transmiteexchange.GetPositions()O parâmetro da função éETH_USDT.swapA partir de agora, é possível obter dados sobre a posse de contratos permanentes de U-bit do ETH.

Quando não entrarexchange.GetPositions()Quando os parâmetros da função são obtidos, é possível obter dados de todos os contratos de permanência em U-bit lançados no mercado (como o par de transações atual é BTC_USDT, o contrato é um swap, de acordo com o par de transações atual, o pedido de escopo de contrato), que equivale a uma chamada.exchange.GetPositions("USDT.swap"), especifique um escopo de solicitação.

exchange.GetFundings函数

A nova função GetFundings permite obter taxas de capital de contratos permanentes em mercados de futuros. A função tem um símbolo de parâmetro. A função retorna um conjunto de estruturas de financiamento.

  • Especifique o parâmetro do símbolo: Retorna o parâmetro do parâmetro do parâmetro do parâmetro do parâmetro do parâmetro do parâmetro do parâmetro do parâmetro do parâmetro do parâmetro.
  • Parâmetros de símbolo não especificados: retorna dados de todas as variedades de dimensões atuais de acordo com o par de transações atual, onde o código de contrato está, mecanismos como a função GetOrders/GetPositions.
  • Se o exchange tiver que especificar uma variedade específica, deve transmitir o parâmetro do símbolo, ou seja, o código da variedade específica, por exemplo:BTC_USDT.swapNão transmitir parâmetros ou a função de alcance de transmissão dará um erro.

2o, atualização da interface API

exchange.GetTicker函数

Funções de campoexchange.GetTicker()A atualização inclui um parâmetro de símbolo; permite que a função se desprenda do par de transações atuais; solicita informações de variedade do código do contrato diretamente de acordo com os parâmetros indicados; simplifica o processo de codificação; e ainda é compatível com o modo de chamada não-transmissível, o mais compatível com as políticas antigas da plataforma.

ParâmetrossymbolPara os objetos da bolsaexchangeO que é o mercado de ações?

  • Objetos de câmbio O formato é:AAA_BBBA AAA representa a base de moeda, a BBB representa a quota de moeda e os nomes das moedas são em maiúsculas. Por exemplo: BTC_USDT par de negociação em tempo real.
  • Objetos de câmbio de futuros O formato é:AAA_BBB.XXXAAA representa a moeda base, BBB representa a moeda de preço, e XXX representa o código do contrato, como o swap de contratos permanentes. Os nomes das moedas são em maiúsculas e o código do contrato em minúsculas. Por exemplo: BTC_USDT.swap, um contrato de permanência de U-bit do BTC.

Testes em ambientes reais de câmbio de câmbio:

var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]

function main() {
    exchange.SetCurrency("ETH_USD")
    exchange.SetContractType("swap")

    var arr = []
    var t = exchange.GetTicker()
    arr.push(t)

    for (var symbol of symbols) {
        var ticker = exchange.GetTicker(symbol)
        arr.push(ticker)
    }

    var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of arr) {
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return arr
}

img

O design de dados de mercado para um grupo de variedades especificadas é mais simples.

exchange.GetDepth函数

A função GetTicker é a mesmaexchange.GetDepth()A função também adiciona um parâmetro de símbolo. Pode ser implementado para especificar diretamente a variedade ao solicitar dados de profundidade.

Testes em ambientes reais de câmbio de câmbio:

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

img

exchange.GetTrades函数

A função GetTicker é a mesmaexchange.GetTrades()A função também adiciona um parâmetro de símbolo. Pode-se especificar diretamente a variedade ao solicitar dados de transações no mercado.

Testes em ambientes reais de câmbio de câmbio:

function main() {
    var arr = []
    var arrR = []
    var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]    

    for (var symbol of symbols) {
        var r = exchange.Go("GetTrades", symbol)
        arrR.push(r)
    }

    for (var r of arrR) {
        arr.push(r.wait())
    }
    
    var tbls = []
    for (var i = 0; i < arr.length; i++) {
        var trades = arr[i]
        var symbol = symbols[i]

        var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
        for (var trade of trades) {
            tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
        }

        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

A atualização também é compatível com a aprovação.exchange.Go()As funções são chamadas simultaneamente pela API da plataforma para transmitir informações sobre a variedade especificada pelo parâmetro de símbolo.

exchange.GetRecords函数

A função GetRecords fez uma grande modificação nesta vez, além de suportar informações de variedade de dados de linha K que o parâmetro do símbolo especifica diretamente para a solicitação. Preserva o parâmetro period original para especificar o período da linha K, e adiciona um parâmetro limit para especificar o comprimento da linha K desejado para o período da solicitação.

exchange.GetRecords()Como chamar funções:

  • exchange.GetRecords (em inglês) Quando não se especifica nenhum parâmetro para solicitar dados de linha K da variedade correspondente ao par de transações/código de contrato atual, o ciclo de linha K é o ciclo de linha K padrão definido na interface de revisão de estratégia ou no tempo real.
  • exchange.GetRecords ((60 * 15) Quando se especifica apenas o parâmetro do ciclo da linha K, os dados da linha K da variedade correspondente ao código do par de transações/contratos atual são solicitados.
  • exchange.GetRecords (http://www.exchange.getRecords.com/) Quando apenas a informação da variedade é especificada, os dados da linha K da variedade são solicitados, e o ciclo da linha K é o ciclo da linha K padrão definido na interface de retrospecção da estratégia ou no disco real.
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60)) Especificar informações de variedade, especificar um ciclo específico de linha K para solicitar dados de linha K.
  • exchange.GetRecords (( BTC_USDT.swap, 60, 1000) Especificar informações de variedades, especificar um ciclo específico de linha K, referir o comprimento de linha K que se espera obter regularmente e solicitar dados de linha K. Observe que quando o parâmetro limite excede o comprimento máximo de uma solicitação feita pela bolsa, é gerado um pedido de divisão de página (ou seja, várias chamadas para a interface da linha K da bolsa).

Testes em ambientes reais de câmbio de câmbio:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    var r1 = exchange.GetRecords()
    var r2 = exchange.GetRecords(60 * 60)
    var r3 = exchange.GetRecords("BTC_USDT.swap")
    var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
    var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)

    Log("r1相邻Bar时间差值:", r1[1].Time - r1[0].Time, "毫秒, Bar长度:", r1.length)
    Log("r2相邻Bar时间差值:", r2[1].Time - r2[0].Time, "毫秒, Bar长度:", r2.length)
    Log("r3相邻Bar时间差值:", r3[1].Time - r3[0].Time, "毫秒, Bar长度:", r3.length)
    Log("r4相邻Bar时间差值:", r4[1].Time - r4[0].Time, "毫秒, Bar长度:", r4.length)
    Log("r5相邻Bar时间差值:", r5[1].Time - r5[0].Time, "毫秒, Bar长度:", r5.length)
}

img

exchange.GetOrders函数

A função GetOrders também foi adicionada.symbolParâmetros que permitem especificar uma variedade específica e consultar pedidos incompletos dessa variedade; também suportam a consulta de pedidos incompletos de todas as variedades no intervalo de dimensões especificado.

exchange.GetOrders()A função pode ser chamada da seguinte forma:

  • exchange.GetOrders (em inglês) Para a troca de futuros: quando não transmitir nenhum parâmetro, baseia-se no atualNegociação / Código do contratoA configuração de "Lista pendente" solicita todas as encomendas pendentes de todas as variedades da faixa de dimensões atual.
    Para as bolsas de caixa: quando não se transmitem nenhum parâmetro, solicita-se uma ordem não concluída para todas as variedades de caixa (ou "encomendas pendentes").
  • exchange.GetOrders (BTC_USDT.swap) ou exchange.GetOrders (BTC_USDT) Para a troca de futuros: exchange.GetOrders ( BTC_USDT.swap), consulte todas as ordens pendentes ( pendentes) de contratos permanentes em USDT da BTC. Para o exchange.GetOrders, pesquise todos os pedidos pendentes do par de transações BTC_USDT.
  • Suporte apenas para exchanges de futuros exchange.GetOrders (USDT.swap) especifique o alcance de dimensional para solicitar todas as variedades de pedidos pendentes (pending orders) O intervalo de divisão de dimensões corresponde ao intervalo na função GetPositions. Por exemplo: exchange.GetOrders (USDT.swap) solicita ordens pendentes de todas as variedades da gama de contratos permanentes da Ubit.

Testes de ambiente com o OKX Futures Simulator:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // 写入图表
    var tbls = []
    for (var symbol of ["null", "ETH_USDT.swap", "USDT.swap"]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }

        tbls.push(tbl)
    }
    
    LogStatus("`" + JSON.stringify(tbls) +  "`")
}
  • Quando o parâmetro não é transmitido, solicita-se uma ordem pendente de todas as variedades da gama de dimensões do par de transações atual (BTC_USDT), do código do contrato (swap).
  • Especificar parâmetrosETH_USDT.swapQuando o parâmetro é solicitado, a ordem não concluída do contrato permanente USDT local do ETH ("lista pendente") é indicada.
  • Transmitir uma string"USDT.swap"O pedido de todas as encomendas pendentes de contratos permanentes da USDT foi feito em uma mensagem enviada pelo Twitter.

exchange.GetPosition函数

Ainda é compatível com o antigo nome de função de captação de armazenamento, e também adicionou um parâmetro de símbolo para especificar informações de variedade de dados de armazenamento solicitados especificamente.exchange.GetPositions()O que você está fazendo é errado.

exchange.IO函数

Paraexchange.IO("api", ...)O modo de invocação de funções, que foi atualizado para todos os objetos da bolsa, oferece suporte ao endereço de solicitação completo.

Por exemplo, se você quiser chamar a interface OKX:

GEThttps://www.okx.com/api/v5/conta/max-withdrawal ccy: BTC

Suporte para escrever endereços de base diretamentehttps://www.okx.comNão é necessário mudar o endereço da base e chamar a função IO novamente.

Testes de ambiente com o OKX Futures Simulator:

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

img

3 Impacto das interfaces API

exchange.GetOrder函数

A escalada afetou principalmente:exchange.GetOrder(id)Parâmetros da funçãoidO parâmetro id foi alterado do id original das ordens de câmbio para um formato de string que contém a variedade de transações. Todos os pacotes de ordens no FMZ são para esse formato.

Por exemplo:

  • O ID da ordem original da bolsa, definida na ordem da bolsa, é:123456Antes desta atualização, para chamar a função GetOrder, o ID de ordem enviado era:123456
  • O código do produto com o nome da bolsa definido na ordem da bolsa:BTC-USDTNão, não é. Observe que se trata de um código de variedade de transações nomeado pela bolsa, e não de um par de transações definido pela plataforma FMZ.

A partir daí, a empresa começou a trabalhar com o Google.exchange.GetOrder(id)O formato do parâmetro id que a função precisa transmitir é ajustado para:BTC-USDT,123456

  • A primeira coisa que eu quero dizer é: Uma vez que a função CreateOrder foi atualizada para especificar diretamente a variedade do pedido (a variedade do pedido e o par de transações atualmente configurados, o código do contrato podem ser diferentes), se o ID do pedido retornado não conter informações sobre a variedade, o ID do pedido não será usado.

  • Como combinar esse impacto: Se a ordem de compra é feita usando a função exchange.IO, que chama diretamente a interface de compra do exchange para fazer a compra, o valor de retorno geralmente inclui o símbolo original (código de variedade) do exchange e o id original do pedido. Então, juntar os dois com um ponto em inglês é o Id de pedido definido pela plataforma FMZ. Da mesma forma, se for usado um interface de sub-ordem embalado pela plataforma FMZ, basta remover o código de variedade e o ponto de viragem se for necessário usar o ID original do pedido, já que a parte inicial do ID do pedido é o código de variedade.

exchange.CancelOrder函数

A escalada foi feita paraexchange.CancelOrder()Efeito das funçõesexchange.GetOrder()A função é a mesma.

exchange.Buy函数

A escalada foi feita paraexchange.Buy()Efeito das funçõesexchange.GetOrder()A função é a mesma.exchange.Buy()A função retorna o Id da ordem para uma nova estrutura, por exemplo, o Id que retorna quando a ordem é colocada em um futuro da OKX:LTC-USDT-SWAP,1578360858053058560

exchange.Sell函数

A escalada foi feita paraexchange.Sell()Efeito das funçõesexchange.GetOrder()A função é a mesma.exchange.Sell()A função retorna o Id da ordem para uma nova estrutura, por exemplo, o Id que retorna quando a ordem é colocada em um futuro da OKX:ETH-USDT-SWAP,1578360832820125696

exchange.GetPosition函数

Somente os objetos de câmbio de futuros suportam essa função, sendo que a função para obter dados de armazenamento é chamada de exchange.GetPosition (), e a nova função é chamada de exchange.GetPositions ().

A função exchange.GetPosition () não especifica nenhum parâmetro e obtém os dados de posicionamento de um contrato específico definido no código do contrato.

Modificação, nova definição: exchange.GetPosition (()) função, que obtém a posição de todas as variedades do conjunto de transações atualmente configuradas, em um intervalo de dimensões definido pelo código do contrato, sem especificar nenhum parâmetro de chamada.

Por exemplo, o par de negociação atual é BTC_USDT e o código do contrato é swap.

exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")

A função solicita dados de armazenamento de contratos permanentes em bits U de todas as moedas.

exchange.GetOrders函数

A primeira é para as bolsas de valores:

A função exchange.GetOrders () não especifica nenhum parâmetro para ser chamada e obtém todas as ordens não concluídas do par de transações atual.

A função exchange.GetOrders () foi modificada para não especificar nenhum parâmetro e obter ordens não concluídas de todas as transações no momento.

2 - Para as bolsas de futuros:

A função exchange.GetOrders () não especifica nenhum parâmetro e obtém todas as ordens não concluídas do contrato específico definido no código do contrato.

Modificação, nova definição: exchange.GetOrders (), que, sem especificar nenhum parâmetro, obtém todas as ordens não concluídas no intervalo de dimensões definido pelo código do contrato.

Por exemplo, o par de negociação atual é BTC_USD e o código do contrato é quarter.

exchange.GetOrders()   // 等价于调用 exchange.GetOrders("USD.futures")

A função solicita dados de pedidos incompletos sobre o índice de troca de moedas de todas as moedas.

4. Ajuste estrutural

Estrutura do ticker

A atualização adicionou um campo de símbolo para a estrutura do Ticker, que registra informações sobre a variedade da atual estrutura do Ticker.exchange.GetTicker()O formato dos parâmetros do símbolo da função é perfeitamente uniforme.

Estruturas de ordem

Esta atualização para o estruturador de Orders adiciona o campo Symbol, que é formatado com o formato de um campo.exchange.GetTicker()O formato do parâmetro de símbolo da função é totalmente uniforme. Esta atualização também modificou o campo Id da estrutura Order para registrar informações de espécies, informações de ordens originais e informações de ordens em um novo formato de ordem.exchange.GetOrder()Descrição do ID da ordem na função, não mais aqui.

Estruturas de posição

Esta atualização para a estrutura de posição adicionou o campo de símbolo, que é formatado com o padrão de padrão de padrão.exchange.GetTicker()O formato dos parâmetros do símbolo da função é perfeitamente uniforme.

Estruturas de financiamento

A função GetFundings retorna uma matriz de estruturas de Funding.

{
    "Info": {...},               // 交易所资金费率接口原始应答数据
    "Symbol": "BTC_USDT.swap",   // FMZ平台定义的品种名称
    "Interval": 28800000,        // 8小时间隔,单位毫秒
    "Time": 1729728000000,       // 本期资金费率收取时间
    "Rate": 0.0001,              // 资金费率,即 0.01 %
}

5o Sistema de Retrospecção

A atualização é feita para atender às necessidades dos usuários, com compatibilidade com o disco físico, e o sistema de retrospecção será adaptado em uma semana. Se o código de políticas individuais for afetado, faça a adaptação da mudança conforme descrito neste artigo.

De acordo com a estratégia de atualização da interface API da plataforma, as interfaces de API do sistema de retorno da plataforma foram atualizadas em simultâneo; Além disso, o sistema de retorno também oferece suporte a:

  • A plataforma também oferece suporte para mais exchanges de dados de retestes.
  • Suporte para toda a variedade de dados de retestes de exchanges.
  • O U-bit, a entrega de moeda, a negociação mista de contratos permanentes.
  • Os objetos das bolsas de commodities no período de reavaliação apoiam os pares de transações de comutação.
  • O sistema de retrospecção acrescenta suporte a funções novas como GetTickers, GetMarkets e outras.

Atualizações adicionais

1 Account Estrutura de novos campos Equity UPnL

Funções de membros para objetos de câmbio de futurosGetAccountVoltouAccountA estrutura foi ampliada em campos.

  • Equidade O total de direitos de propriedade dos ativos de garantia atuais, com exceção de mercados de futuros muito específicos, não é suportado, mas a maioria suporta o campo.
  • UPnL Os ganhos não realizados de todas as posições atualmente mantidas em moedas de ativos garantidos, com exceção de trocas de futuros muito específicas, não são suportados.

2, Função de SetMarginLevel suporte para parâmetros de símbolos de atualização

A função SetMarginLevel, membro do objeto do mercado de futuros, foi atualizada com o aumento do símbolo do parâmetro.

Exemplo de teste:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // 当前交易对为ETH_USDT,合约代码为swap,设置杠杆值为10
    exchange.SetMarginLevel(10)
    
    // 直接指定交易对BTC_USDT,合约代码swap,设置杠杆值20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3, a função GetMarkets retorna a estrutura do mercado adicionando o campo CtValCcy

  • QuadroCtValCcyA unidade de valor de um contrato pode ser: BTC, USD, ETH, etc.
  • QuadroCtValRegistre o valor correspondente a um contrato da variedade transacionada na bolsa, em unidadesCtValCcyA moeda registrada no campo; por exemplo:CtValO número de pessoas que morreram foi de 0,01CtValCcyPara "BTC" significa um contrato com um valor de 0,01 BTC.

Mais.

- O quê?Eu perguntei o que aconteceu com o meu novo robô, o ID de retorno também tinha o nome do transação, pesquisei por muito tempo, e a informação do log depois de fazer o pedido não está sendo exibida agora, também por causa da atualização do administrador?

O que é isso?/upload/asset/2ffc0f961149326b78aed.png O problema foi causado pela atualização da interface?

ecnemuse 希望exchange.Buy函数能增加开止损单的功能。。

NanSegGlossário da linha da frente

- O quê?Muito bem.

Inventor quantificado - sonho pequenoMuito bem, veja aqui. Obrigado pela pergunta.

- O quê?Sim, extMsg1, extMsg2 não está exibido.

Inventor quantificado - sonho pequenoOlá, o ID do pedido é uma mudança imperativa, porque a atualização do pedido de especificar diretamente a variedade, o ID do pedido deve incluir informações sobre a variedade, caso contrário, não é possível determinar qual a variedade do pedido e não pode ser invocado no momento da revogação (porque a maioria das bolsas precisa especificar a variedade e especificar o ID). O que você disse que não aparece no botão de comando, é: exchange.Buy ((price, amount, extMsg1, extMsg2) quando o extMsg1, extMsg2 não aparecem no log?

Inventor quantificado - sonho pequenoOlá, você enviou as configurações atuais do mercado, pares de negócios, configurações de código de contrato.

Inventor de quantificaçãoEnvie os detalhes do código de teste e configuração para o formulário e o engenheiro responderá logo.

Inventor quantificado - sonho pequenoA diferença entre os mecanismos de condicionalidade e de suporte variam muito, e vamos ver se isso é possível.

Inventor quantificado - sonho pequenoSe você tiver algum problema, envie um formulário ou deixe um comentário.