Les ressources ont été chargées... Je charge...

Mise à niveau de l'API de la plateforme de négociation quantitative des inventeurs: améliorer l'expérience de conception stratégique

Auteur:L'inventeur de la quantification - un petit rêve, Créé: 2024-06-28 09:08:29, Mis à jour: 2024-11-01 10:08:12

[TOC] Je vous en prie.

img

Préambule

La plate-forme de trading quantitatif a été restructurée à plusieurs reprises après neuf années d'innovations technologiques, bien que nous, les utilisateurs, ne l'ayons peut-être pas remarqué. Au cours des deux dernières années, la plate-forme a subi de nombreuses améliorations et mises à niveau en termes d'expérience utilisateur, notamment une interface utilisateur entièrement améliorée, de nombreux outils de trading quantitatif couramment utilisés et une meilleure prise en charge des données de retouche.

Pour faciliter la conception des stratégies, rendre la logique de transaction plus claire et faciliter la tâche des débutants, la plateforme a mis à niveau l'API utilisée par les stratégies. Les nouvelles fonctionnalités peuvent être activées par les hôtes utilisant les dernières versions. La plateforme est toujours compatible au maximum avec les appels à l'ancienne interface.

Dans cet article, nous allons voir quelles sont les mises à jour de l'interface et quelles sont les modifications nécessaires pour que les anciennes stratégies soient compatibles avec l'API actuelle.

Une nouvelle interface d'API

exchange.GetTickers函数

Cette interface de marché agrégé est indispensable pour concevoir des stratégies multiculturelles, des stratégies de surveillance des marchés à l'échelle du marché.

Si l'échange n'a pas cette interface (exchange individuel), appelerexchange.GetTickers()Il y a une erreur dans les rapports: pas de soutien.

La fonction n'a aucun paramètre et renvoie des données de marché en temps réel de toutes les variétés dans l'interface de marché.

exchange.GetTickers()La fonction estexchange.GetTicker()La variété complète des versions demandées de fonctions (attention, la différence entre les deux noms de fonctions est un simple nombre multiple) ‒

Nous avons testé les environnements avec OKX Live Simulation Disks:

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函数

Une nouvelle augmentationexchange.CreateOrder()Les fonctions peuvent être considérées comme l'élément clé de cette mise à niveau.exchange.CreateOrder()La fonction la plus importante est de spécifier directement dans les paramètres de la fonction la variété, la direction de l'ordre. Ainsi, il n'est plus nécessaire de dépendre des paires de transactions, du code de contrat, de la direction de transaction, etc. actuellement définies par le système.

Dans les scénarios de transaction multi-variété, la complexité de la conception est considérablement réduite dans les scénarios de synchronisation.exchange.CreateOrder()Les quatre paramètres de la fonction sont:symbolsidepriceamount

Tests environnementaux en utilisant le simulateur de disque à terme OKX:

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

C'est juste trois fois.exchange.CreateOrder()L'appel à la fonction a déclenché trois sortes d'ordres à terme, dans différentes directions.

exchange.GetHistoryOrders函数

Une nouvelle augmentationexchange.GetHistoryOrders()La fonction est utilisée pour obtenir des ordres historiques de transaction d'une certaine variété, qui nécessite également le support d'une interface d'échange.

Les interfaces mises en œuvre par les échanges sont très différentes pour la recherche d'ordres historiques:

  • Certains prennent en charge les requêtes partagées, d'autres non.
  • Certaines transactions ne peuvent être consultées pendant toute la période de la fenêtre de consultation, c'est-à-dire que les commandes de plus de N jours ne peuvent pas être consultées.
  • La plupart des plateformes supportent la demande d'heure spécifique, mais certaines ne le font pas.

Pour que ce type d'interface soit enveloppé avec le plus grand degré de compatibilité, il est nécessaire de veiller à ce qu'il réponde aux besoins et aux attentes de la stratégie.

Pour plus de détails sur les fonctions, consultez le manuel de syntaxe de l'API:

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

Les tests sont effectués dans des environnements de disque en direct en binaire:

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函数

L'ancienne version de la fonction d'accès aux données stockées étaitexchange.GetPosition()Cette mise à niveau a ajouté une nouvelle fonction d'acquisition de stockage pour mieux convenir à la syntaxe de la dénomination des fonctions:exchange.GetPositions()│ tout en restant compatible/amélioré avec la fonction GetPosition│

Notez que les deux noms de fonctions ne diffèrent que par un s terminé, car GetPositions est plus sémantique, il est donc recommandé d'utiliser GetPositions pour les suivantes.

exchange.GetPositions()Les fonctions sont appelées de trois façons:

  • Je ne peux pas le faire. Si aucun paramètre n'est transmis, il est utilisé selon les paramètres actuels.Les échanges / Le code du contratLe paramètre qui demande les données de stockage de toutes les variétés de la dimension actuelle.

  • Le prix de l'échange.GetPositions est le prix de l'échange. Lorsque vous spécifiez des informations sur une variété spécifique (ETH_USDT.swap, tel que défini par la plate-forme FMZ), les données de stockage pour une variété spécifique sont demandées. Par exemple:BTC_USD.swapETH_USDT.swapETH_USDT.quarterJe ne sais pas. BTC_USD.swap: Un contrat permanent sur le prix de la monnaie BTC. ETH_USDT.swap: Le contrat de perpétuité en U-bit de l'ETH. ETH_USDC.swap:Contract de perpétuité à USDC de l'ETH. (en plus de USDT, vous pouvez spécifier une autre monnaie de quotation, sans détail) ETH_USDT.quarter: Le taux d'échange de l'ETH en U par trimestre est d'environ BTC_USD.BTC-USD-201226-24250-C: Contrats d'options sur le lieu de dépôt de BTC.

  • Les options de change sont les suivantes: Les données de stockage de toutes les variétés sont demandées selon la gamme de dimensions spécifiée. USDT.swap: U est la portée du contrat permanent. USDT.futures: U est le taux d'échange approximatif. USDC.swap: portée du contrat permanent USDC local. (en plus de USDT, vous pouvez spécifier une autre devises de devises, sans plus de précisions) USDC.futures: le taux de change USDC est approximatif. USD.swap: portée des contrats permanents sur le prix de la monnaie. USD.futures: le taux d'échange de la devise est approximatif. USDT.option: U est la portée du contrat d'options. USD.option: le champ d'application des contrats d'options sur le marché monétaire.

    Il y a des échanges spéciaux dans lesquels les contrats sont divisés en dimensions: USDT.futures_combo:Futures_Deribit est une bourse américaine. USD.futures_ff: Le taux de change des futures_Kraken est approximatif. USD.swap_pf:Futures_Kraken est une bourse américaine de titres mixtes.

    Pour les dimensions qui ne sont pas prises en charge par l'API de l'échange, l'erreur est de retourner une valeur nulle lors de l'appel.

Tests environnementaux en utilisant le simulateur de disque à terme OKX:

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

Lorsque vous entrezexchange.GetPositions()Le paramètre de la fonction estETH_USDT.swapIl est possible d'obtenir des données de détention de contrats permanents U-bit de l'ETH.

Ne pas entrerexchange.GetPositions()Les paramètres de la fonction permettent d'obtenir les données de détention de tous les contrats perpétuels U-bit mis en ligne sur l'échange (parce que la paire de transactions actuelle est BTC_USDT, le contrat est un swap, selon la paire de transactions actuelle, la demande de portée du contrat), ce qui équivaut à un appel.exchange.GetPositions("USDT.swap"), spécifier une plage de requêtes.

exchange.GetFundings函数

La nouvelle fonction GetFundings permet d'obtenir le taux de financement des contrats à terme sur les marchés à terme. La fonction a un symbole de paramètre. La fonction renvoie une structure de financement.

  • Paramètres de symbole spécifiés: Retour d'un ensemble de structure d'information sur le taux de financement de la variété spécifiée (Arrêts de financement), les paramètres de symbole peuvent être définis dans une plage similaire à celle des paramètres de symbole de la fonction GetOrders/GetPositions.
  • Pas de paramètre de symbole spécifié: selon la paire de transactions en cours, la dimension dans laquelle le code de contrat est situé renvoie toutes les variétés de données de la dimension en cours, mécanismes tels que les fonctions GetOrders/GetPositions.
  • Si l'échange doit spécifier une variété spécifique, il doit transmettre des paramètres de symbole, c'est-à-dire le code de la variété spécifique, par exemple:BTC_USDT.swapLes paramètres symboliques ne sont pas pris en charge.

2, mise à niveau de l'API

exchange.GetTicker函数

Fonction de champexchange.GetTicker()Cette mise à niveau est principalement due à l'ajout de paramètres de symbole. Cela permet à la fonction de se détacher de la paire de transactions actuelle, de demander des informations de variété directement selon le code de contrat spécifié par le paramètre, de demander des données de marché.

ParamètressymbolPour les objets de l'échangeexchangeIl existe différents formats de titres en espèces/futures:

  • Objets des bourses Le format est le suivant:AAA_BBBL'AAA est la monnaie de base, la BBB est la monnaie de devises. Les noms des devises sont en majuscules. Par exemple: BTC_USDT, une paire de transactions instantanées.
  • Objets des marchés à terme Le format est le suivant:AAA_BBB.XXXAAA représente la monnaie de base, BBB représente la monnaie de devises, XXX représente le code du contrat, par exemple le swap de contrat permanent. Par exemple: BTC_USDT.swap, un contrat à durée indéterminée en U de BTC.

Tests en milieu réel à l'aide d'un disque de devises binaires:

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

La demande d'un ensemble de données de marché pour les variétés spécifiées est devenue plus simple.

exchange.GetDepth函数

C'est la même chose que la fonction GetTicker.exchange.GetDepth()La fonction a également ajouté un paramètre symbole.

Tests en milieu réel à l'aide d'un disque de devises binaires:

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函数

C'est la même chose que la fonction GetTicker.exchange.GetTrades()La fonction a également ajouté le paramètre symbole.

Tests en milieu réel à l'aide d'un disque de devises binaires:

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

Cette mise à niveau est également compatible avec le passage.exchange.Go()Les fonctions sont appelées simultanément à l'API de la plate-forme pour transmettre des informations sur les variétés spécifiées par les paramètres de symbole.

exchange.GetRecords函数

La fonction GetRecords a apporté des modifications majeures, en plus de prendre en charge l'information de la variété des données de ligne K spécifiées directement par les paramètres de symbole. Elle a conservé les paramètres de période d'origine pour spécifier les périodes de ligne K et a ajouté un paramètre limit pour spécifier la longueur de ligne K souhaitée pour la période de demande.

exchange.GetRecords()Comment appeler une fonction:

  • Exchange.GetRecords (en anglais seulement) Lorsqu'aucun paramètre n'est spécifié pour demander les données de ligne K de la variété correspondant à la paire de transactions / code de contrat en cours, le cycle de ligne K est le cycle de ligne K par défaut défini lors de l'interface de résumé stratégique ou de la table de bord.
  • Le nombre d'exemplaires est le nombre de fois que le nombre d'exemplaires est égal à 60 Lorsqu'un paramètre de cycle de ligne K est spécifié uniquement, les données de ligne K de la variété correspondant à la paire de transactions / code de contrat en cours sont demandées.
  • Le site de l'échange.GetRecords (en anglais seulement) Lorsqu'on spécifie uniquement l'information de la variété, on demande des données de ligne K pour spécifier la variété, la période de ligne K étant la période de ligne K par défaut définie lors de l'interface de retouche stratégique ou de la disquette.
  • Le taux d'intérêt de l'échange.GetRecords est de 60*60 Indiquer les informations de la variété, spécifier les cycles spécifiques de la ligne K pour demander les données de la ligne K.
  • Le site de l'échange.GetRecords (en anglais seulement) Indiquez les informations de la variété, spécifiez les cycles spécifiques de la ligne K, indiquez la longueur de la ligne K souhaitée pour obtenir régulièrement les données de la ligne K demandées. Notez que des demandes de page séparée (c'est-à-dire plusieurs appels à l'interface de ligne K de l'échange) sont générées lorsque le paramètre limite dépasse la longueur maximale de la demande d'un échange.

Tests en milieu réel à l'aide d'un disque de devises binaires:

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函数

La fonction GetOrders a été ajoutée.symbolParamètres permettant de spécifier une variété spécifique et de rechercher des commandes inachevées pour cette variété (listes en suspens); mais aussi de rechercher des commandes inachevées pour toutes les variétés dans une plage de dimensions spécifiée (listes en suspens).

exchange.GetOrders()Les fonctions peuvent être appelées de la façon suivante:

  • Exchange.GetOrders (en anglais seulement) Pour les marchés à terme: si aucun paramètre n'est transmis, selon la situation actuelleLes échanges / Le code du contratLe paramètre qui demande toutes les commandes en suspens pour toutes les variétés de la gamme de dimensions actuelle.
    Pour les bourses de change: demandez des commandes non terminées pour toutes les variétés de change lorsque aucun paramètre n'est transmis.
  • L'option est utilisée par les utilisateurs pour obtenir des informations sur les commandes et les commandes. Pour l'échange de futures: exchange.GetOrders, consultez tous les ordres en suspens pour les contrats permanents USDT sur BTC. Pour l'échange sur place: exchange.GetOrders, consultez toutes les commandes en suspens de la paire de transactions sur place BTC_USDT.
  • Supports uniquement pour les échanges à terme exchange.GetOrders (USDT.swap) spécifier une gamme de dimensions de requêtes pour toutes les variétés d'ordres en suspens (Pending Lists) La plage de dimension est la même que celle de la fonction GetPositions. Par exemple: exchange.GetOrders (USDT.swap) demande des ordres en suspens pour toutes les variétés de la gamme de contrats permanents U.

Tests environnementaux en utilisant le simulateur de disque à terme OKX:

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) +  "`")
}
  • Lorsqu'un paramètre n'est pas transmis, une demande est faite pour toutes les variétés d'ordres non terminés dans la gamme de dimensions de la paire de transactions courante (BTC_USDT), du code de contrat (swap) et de l'ordre en attente.
  • Paramètres spécifiésETH_USDT.swapLorsque le paramètre est utilisé, l'ordre inachevé (" ordre suspendu ") de l'USDT pour le contrat permanent demandé par l'ETH.
  • Envoyer une chaîne"USDT.swap"Les commandes en suspens sont demandées pour toutes les commandes en suspens de l'USDT.

exchange.GetPosition函数

Il est toujours compatible avec l'ancien nom de la fonction d'acquisition de stockage, et a également ajouté un paramètre de symbole permettant de spécifier des informations sur la variété des données de stockage demandées.exchange.GetPositions()Je suis très heureux de vous voir.

exchange.IO函数

Pourexchange.IO("api", ...)L'appel des fonctions, qui a été mis à niveau pour tous les objets de l'échange, prend en charge une fonctionnalité d'adresse de demande complète pour le transfert direct.

Par exemple, si vous souhaitez appeler l'interface OKX:

GEThttps://www.okx.com/api/v5/compte/max-retrait ccy: BTC

Prise en charge de l'écriture directe des adresses de basehttps://www.okx.comVous n'avez pas besoin de changer d'adresse de base pour appeler la fonction IO.

Tests environnementaux en utilisant le simulateur de disque à terme OKX:

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

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

img

3 Les effets de l'API

exchange.GetOrder函数

L'amélioration a eu un impact majeur sur lesexchange.GetOrder(id)Paramètres de la fonctionidLe paramètre id a été modifié à partir de l'id d'ordre de l'échange original pour un format de chaîne contenant la variété de transactions.

Par exemple:

  • L'ID de l'ordre original de l'échange est défini dans l'ordre de l'échange:123456Avant cette mise à niveau, pour appeler la fonction GetOrder, l'ID de l'ordre est:123456
  • Le code de produit défini par l'échange dans l'ordre:BTC-USDTJe ne sais pas. Notez qu'il s'agit d'un code de la variété de transactions nommé par l'échange et non d'une paire de transactions définie par la plate-forme FMZ.

Il y a eu une augmentation du nombre de personnes qui ont été vaccinées.exchange.GetOrder(id)Le format de l'id du paramètre que la fonction doit transmettre est ajusté à:BTC-USDT,123456

  • Il y a un peu de temps, j'ai commencé à écrire des articles sur la façon dont les gens se comportaient. Cette fois, la fonction CreateOrder a été améliorée pour spécifier directement la variété de l'ordre d'achat (la variété de l'ordre d'achat et la paire de transactions actuellement configurée, le code de contrat peut être différent), si l'ID de l'ordre retourné ne contient pas d'informations sur la variété.

  • Comment concilier cette influence: Si l'ordre est envoyé directement par l'interface de commande de l'échange. Si la commande est envoyée directement par l'interface de commande de l'échange. Si la commande est envoyée par l'intermédiaire de l'interface de commande de l'échange. De même, si vous utilisez l'interface de sous-commande enveloppée dans la plate-forme FMZ, il suffit de supprimer le code de la variété et les virgules si vous avez besoin d'utiliser l'ID original de l'ordre, car la partie initiale de l'ordre Id est le code de la variété de transaction.

exchange.CancelOrder函数

Cette mise à niveau est une bonne chose.exchange.CancelOrder()L'influence des fonctionsexchange.GetOrder()La fonction est la même.

exchange.Buy函数

Cette mise à niveau est une bonne chose.exchange.Buy()L'influence des fonctionsexchange.GetOrder()La fonction est la même.exchange.Buy()L'Id de l'ordre retourné par la fonction est une nouvelle structure, comme celle retournée lors de la souscription d'un ordre à terme sur l'échange OKX:LTC-USDT-SWAP,1578360858053058560

exchange.Sell函数

Cette mise à niveau est une bonne chose.exchange.Sell()L'influence des fonctionsexchange.GetOrder()La fonction est la même.exchange.Sell()L'Id de l'ordre retourné par la fonction est une nouvelle structure, comme celle retournée lors de la souscription d'un ordre à terme sur l'échange OKX:ETH-USDT-SWAP,1578360832820125696

exchange.GetPosition函数

Seuls les objets de l'échange de contrats à terme supportent cette fonction, et les deux fonctionnalités sont parfaitement compatibles.

L'ancienne définition: exchange.GetPosition () fonction, sans spécifier de paramètres, est appelée pour obtenir les données de détention de la paire de transactions en cours.

Modification de la définition de la fonction: exchange.GetPosition ((), qui ne spécifie aucun paramètre et qui obtient une position pour toutes les variétés de paires de transactions, dans la gamme de dimensions définies par le code du contrat.

Par exemple, la paire en cours est BTC_USDT et le code du contrat est swap.

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

La fonction demande les données de stockage des contrats permanents en U-bit pour toutes les devises.

exchange.GetOrders函数

1° Pour les bourses en espèces:

L'ancienne définition: exchange.GetOrders (), qui n'a pas spécifié de paramètres, est appelée pour obtenir toutes les commandes non terminées de la paire de transactions en cours.

Modification de la définition de la fonction: exchange.GetOrders (), qui n'a pas spécifié de paramètres.

Pour les marchés à terme:

L'ancienne définition: exchange.GetOrders (), sans spécifier de paramètres, est appelée pour obtenir toutes les commandes non terminées de la paire de transactions en cours, selon le contrat.

Modification de la nouvelle définition de la fonction: exchange.GetOrders, qui récupère toutes les commandes non terminées dans la gamme de dimensions définies par le code du contrat.

Par exemple, la paire en cours est BTC_USD et le code du contrat est quarter.

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

Cette fonction demande des données sur les commandes non terminées pour toutes les devises.

4, ajustement de la structure

Structure du ticker

Cette mise à jour a ajouté un champ Symbol à la structure de Ticker, qui enregistre les informations relatives à la variété de la structure actuelle de Ticker.exchange.GetTicker()Le format des paramètres de symbole de la fonction est parfaitement identique.

Structure de l'ordre

Cette mise à jour a ajouté un champ Symbol à la structure Order, qui est formaté avec les paramètres suivants:exchange.GetTicker()Le format des paramètres de symbole de la fonction est parfaitement cohérent. Cette mise à jour modifie également le champ Id de la structure Order pour enregistrer les informations de variété, les informations d'ordre d'origine et les informations d'ordre d'ordre.exchange.GetOrder()Les instructions de l'ordre Id dans la fonction ne sont plus décrites ici.

Structure de position

Cette mise à jour a ajouté un champ Symbol au constructeur Position, qui est formaté avec le format de la page de destination.exchange.GetTicker()Le format des paramètres de symbole de la fonction est parfaitement identique.

Structures de financement

La fonction GetFundings renvoie un ensemble de structures de financement.

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

5, le système de retouche

Pour répondre aux besoins des utilisateurs, la mise à niveau est effectuée sur le disque virtuel et la mise à jour du système de retouche sera terminée dans une semaine. Si le code de la politique individuelle est affecté, veuillez modifier la mise à jour en suivant les instructions de cet article.

La mise à niveau de l'API de la plate-forme a permis de mettre à jour simultanément les interfaces API des systèmes de retouche de la plate-forme.

  • Il est également possible de télécharger des vidéos sur les réseaux sociaux et les réseaux sociaux.
  • Il est également possible de télécharger des fichiers de test de toutes sortes sur les plateformes d'échange.
  • Les négociations sont basées sur des transactions en U-Bits, des transactions en Bitcoins et des transactions mixtes de contrats permanents.
  • Les objets de l'échange de marchandises au cours de la période de réévaluation ont soutenu les paires de transactions de changement.
  • Le système de retouche ajoute la prise en charge de nouvelles fonctions telles que les fonctions GetTickers et GetMarkets.

Mise à jour complémentaire

1, nouvelle structure de champs d'Equity, UPnL

Fonctions membres pour les objets d'échanges à termeGetAccountRetourAccountLa structure a été étendue.

  • équité La majorité des titres d'actifs de garantie, à l'exception de certains marchés à terme, supportent ce champ. Il est principalement utilisé pour calculer les gains et les pertes de garantie en temps réel.
  • L'UPnL Les gains et pertes non réalisés de toutes les positions actuellement détenues dans les actifs de garantie monétaires, à l'exception de certains échanges à terme, sont majoritairement favorables au secteur.

2, Fonction de mise à niveau de la marge au niveau de la fonction

La fonction membre SetMarginLevel pour les objets de l'échange à terme a été améliorée en ajoutant le symbole des paramètres.

Voici un exemple de test:

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, l'ajout du champ CtValCcy à la structure du marché renvoyée par la fonction GetMarkets

  • Les champsCtValCcyL'unité de valeur d'un contrat peut être: BTC, USD, ETH, etc.
  • Les champsCtValEnregistre la valeur correspondante d'un contrat sur une bourse de la même variété de transactions, en unitésCtValCcyLa monnaie dans laquelle le champ est enregistré.CtValIl y a un autre problème.CtValCcyLe terme "BTC" désigne un contrat d'une valeur de 0,01 BTC.

Plus de

Je suis désolée.J'ai demandé ce qui s'était passé avec mon nouveau robot, et le retour d'ID avec le nom de la transaction, j'ai étudié pendant longtemps, et les informations du journal après la commande ne s'affichent plus maintenant, aussi à cause de la mise à jour de l'administrateur?

Je ne peux pas le faire.Je ne peux pas vous dire ce que je fais. Le problème a-t-il été causé par cette mise à jour?

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

Nom de la sociétéVue de l'avant

Je suis désolée.Ça va.

L'inventeur de la quantification - un petit rêveBien, essayez-le sur ce site. Merci de poser votre question. Nous allons le traiter au plus vite.

Je suis désolée.Oui, extMsg1, extMsg2 n'est pas affiché.

L'inventeur de la quantification - un petit rêveBonjour, l'ID de l'ordre est une modification impérative, car une mise à niveau de l'ordre spécifiant directement la variété doit inclure des informations sur la variété dans l'ID de l'ordre, sinon il n'est pas possible de déterminer quelle est la variété de l'ordre et ne peut pas être appelé lors du retrait (car la plupart des bourses doivent spécifier la variété et spécifier l'ID lors du retrait). Vous avez dit que le message après la commande ne s'affiche pas, c'est-à-dire: exchange.Buy ((price, amount, extMsg1, extMsg2), est-ce que extMsg1, extMsg2 ne s'affichent pas dans les journaux lors de l'appel?

L'inventeur de la quantification - un petit rêveBonjour, vous pouvez télécharger les paramètres actuels de l'échange, des paires de transactions et des codes de contrats.

Inventeur de la quantificationS'il vous plaît envoyer les détails du code de test et de la configuration sur le formulaire, l'ingénieur vous répondra au premier moment.

L'inventeur de la quantification - un petit rêveLes échanges ont des différences importantes, comme le mécanisme de conditionnalisation, et le niveau de soutien varie, et nous allons voir si cela est possible.

L'inventeur de la quantification - un petit rêveMerci pour votre soutien, et si vous avez des problèmes, envoyez-nous un formulaire ou un message.