[TOC]
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.
O manual de gramática:https://www.fmz.com/syntax-guideManual do usuário:https://www.fmz.com/user-guide
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.
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
}
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:symbol
、side
、price
、amount
。
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)
}
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.
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:
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) + "`")
}
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.
exchange.GetPositions()
A função tem três formas de ser chamada:
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("")
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) + "`")
}
Quando se transmiteexchange.GetPositions()
O parâmetro da função éETH_USDT.swap
A partir de agora, é possível obter dados sobre a posse de contratos permanentes de U-bit do ETH.
Quando se transmiteexchange.GetPositions()
Os parâmetros da função são strings vazios.""
A partir de agora, você pode obter dados de todos os contratos do U.
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âmetrossymbol
Para os objetos da bolsaexchange
O que é o mercado de ações?
AAA_BBB
A 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.AAA_BBB.XXX
AAA 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
}
O design de dados de mercado para um grupo de variedades especificadas é mais simples.
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"))
}
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) + "`")
}
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.
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:
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)
}
A função GetOrders também foi adicionada.symbol
Parâmetros que permitem especificar diretamente a variedade da consulta que está pendente; também suporta a consulta de todas as listas pendentes; é compatível com o modo de chamada original.
exchange.GetOrders()
A função pode ser chamada da seguinte forma:
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", ""]) {
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, o padrão solicita o atual par de transações BTC_USDT, todos os pendentes não concluídos de contratos permanentes de swap.
Especificar parâmetrosETH_USDT.swap
Quando o parâmetro é solicitado, todos os contratos permanentes pendentes não concluídos do par de negociações ETH_USDT são solicitados.
Introdução de strings em branco""
A partir de agora, o servidor poderá solicitar todos os contratos locais do USDT e todas as listas pendentes não concluídas.
Ainda é compatível com o nome da função de captação de armazenamento antiga, e também adicionou um parâmetro de símbolo para especificar informações de variedade de dados de armazenamento solicitados especificamente.
Funções de usoexchange.GetPositions()
O que você está fazendo é errado.
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.com
Nã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")
}
A escalada afetou principalmente:exchange.GetOrder(id)
Parâmetros da funçãoid
O parâmetro id foi alterado do id original da ordem do exchange para um formato de string que contém uma variedade de transações.
Todos os IDs de encomendas na plataforma FMZ são para este formato.
Por exemplo:
123456
Antes desta atualização, para chamar a função GetOrder, o ID de ordem enviado era:123456
。BTC-USDT
Nã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.
A escalada foi feita paraexchange.CancelOrder()
Efeito das funçõesexchange.GetOrder()
A função é a mesma.
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
。
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
。
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.
O formato do campo éexchange.GetTicker()
O formato dos parâmetros do símbolo da função é perfeitamente uniforme.
Esta atualização para o estruturador de Orders adiciona o campo Symbol, que é formatado com o formato de um campo.exchange.GetTicker()
O formato dos parâmetros do símbolo da função é perfeitamente uniforme.
A atualização também alterou o campo Id da estrutura Order para registrar informações de variedades, informações de pedidos originais e referências em um novo formato de ordem Id.exchange.GetOrder()
Descrição do ID da ordem na função, não mais aqui.
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.
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.
Funções de membros para objetos de câmbio de futurosGetAccount
VoltouAccount
A 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.
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)
}
- 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.