[TOC]

La plateforme de trading quantitative Inventor a subi 9 années d’itération technologique et a été reconstruite à de nombreuses reprises, même si, en tant qu’utilisateurs, nous ne l’avons peut-être pas remarqué. Au cours des deux dernières années, la plateforme a réalisé de nombreuses optimisations et mises à niveau en termes d’expérience utilisateur, notamment une mise à niveau complète de l’interface utilisateur, l’enrichissement des outils de trading quantitatif couramment utilisés et l’ajout d’une prise en charge supplémentaire des données de backtesting.
Afin de rendre la conception de stratégie plus pratique, la logique de trading plus claire et plus facile à démarrer pour les débutants, la plateforme a mis à niveau l’interface API utilisée par la stratégie. Utilisez la dernière version de votre hôte pour activer ces nouvelles fonctionnalités. La plateforme reste compatible avec les appels vers les anciennes interfaces dans la mesure du possible. Les informations sur les nouvelles fonctionnalités de l’interface API ont été mises à jour dans la documentation API de la plateforme de trading quantitatif Inventor :
Voyons maintenant rapidement quelles interfaces ont été mises à niveau et quels changements sont nécessaires pour rendre les anciennes stratégies compatibles avec l’API actuelle.
Pour concevoir des stratégies multivariées et des stratégies de suivi complet de la situation du marché. Cette interface de marché agrégée est essentielle pour faciliter l’élaboration de stratégies et éviter de réinventer la roue. La plateforme de trading quantitative de l’inventeur encapsule de telles API d’échanges.
Si l’échange ne dispose pas de cette interface (échanges individuels), appelezexchange.GetTickers()Un message d’erreur sera signalé : Non pris en charge.
Cette fonction n’a aucun paramètre et renverra les données de marché en temps réel de toutes les variétés dans l’interface de marché agrégée de la bourse. Cela peut être simplement compris comme :
exchange.GetTickers()La fonction estexchange.GetTicker()La version complète de la fonction (la différence entre les deux noms de fonction est le singulier et le pluriel).
Nous utilisons l’environnement de simulation spot OKX pour les tests :
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
}

Nouveauexchange.CreateOrder()Les fonctions sont au centre de cette mise à niveau.exchange.CreateOrder()La fonction la plus importante de la fonction est de spécifier directement le type et la direction de la commande dans les paramètres de la fonction. De cette façon, il ne dépend plus des paramètres actuels du système tels que les paires de trading, les codes de contrat, les directions de trading, etc.
La complexité de conception est considérablement réduite dans les scénarios d’ordres commerciaux multi-produits et les scénarios simultanés.exchange.CreateOrder()Les quatre paramètres de la fonction sontsymbol、side、price、amount。
Test utilisant l’environnement de simulation de contrats à 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)
}

Cela n’a pris que 3 foisexchange.CreateOrder()L’appel de fonction place trois ordres futurs de différentes variétés et directions.
Nouveauexchange.GetHistoryOrders()Cette fonction permet d’obtenir l’historique des ordres de transaction d’un produit donné. Cette fonction nécessite également la prise en charge de l’interface d’échange.
Pour interroger les commandes historiques, les interfaces implémentées par les différentes bourses varient considérablement :
Ces interfaces sont encapsulées avec le plus haut degré de compatibilité et, lors de leur utilisation réelle, il convient de vérifier si elles répondent aux exigences et aux attentes de la stratégie.
La description détaillée de la fonction n’est pas répétée ici, vous pouvez vous référer au manuel de syntaxe dans la documentation de l’API :
https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders
Testé à l’aide de l’environnement de trading spot de Binance :
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) + "`")
}

L’ancienne version de la fonction d’acquisition des données de position est :exchange.GetPosition(). Afin de mieux correspondre à la sémantique de dénomination des fonctions, cette mise à niveau ajoute une nouvelle fonction pour obtenir des positions :exchange.GetPositions(). En même temps, il est toujours compatible/mis à niveau avec la fonction GetPosition.
Notez que les deux noms de fonction ne diffèrent que par le s final. Étant donné que GetPositions est plus correct d’un point de vue sémantique, il est recommandé d’utiliser GetPositions à l’avenir.
exchange.GetPositions()Il existe trois formes d’appels de fonction :
exchange.GetPositions() Lorsqu’aucun paramètre n’est passé, le courantPaires de trading / Code des contratsDemander les données de position de toutes les variétés dans la dimension actuelle.
exchange.GetPositions(“ETH_USDT.swap”)
Lors de la spécification d’informations spécifiques sur un produit (le format ETH_USDT.swap est défini par la plateforme FMZ), demandez les données de position du produit spécifique.
Exemple:BTC_USD.swap、ETH_USDT.swap、ETH_USDT.quarterattendez.
BTC_USD.swap : contrat perpétuel basé sur la devise BTC.
ETH_USDT.swap : contrat perpétuel basé sur U d’ETH.
ETH_USDC.swap : contrat perpétuel à marge USDC pour ETH. (En plus de l’USDT, vous pouvez également spécifier une devise de cotation différente, qui ne sera pas répétée ici)
ETH_USDT.quarter : contrat de livraison trimestriel basé sur U d’ETH.
BTC_USD.BTC-USD-201226-24250-C : contrat d’option sur marge en pièces BTC.
exchange.GetPositions(“USDT.swap”) Demander des données de position pour tous les symboles en fonction de la plage de dimensions spécifiée. USDT.swap : plage de contrats perpétuels basée sur U. USDT.futures : Gamme de contrats de livraison libellés en U. USDC.swap : fourchette de contrats perpétuels sur marge USDC. (En plus de l’USDT, vous pouvez également spécifier une devise de cotation différente, qui ne sera pas répétée ici) USDC.futures : Gamme de contrats à terme sur marge USDC. USD.swap : Gamme de contrats perpétuels basés sur des devises. USD.futures : Gamme de contrats à terme basés sur des devises. USDT.option : plage de contrats d’options basée sur U. USD.option : Plage de contrats d’options basés sur des devises.
Quelques divisions de dimension de contrat d’échange spécial : USDT.futures_combo : combinaison de CFD de la bourse Futures_Deribit. USD.futures_ff : contrat de livraison sur marge mixte de la bourse Futures_Craken. USD.swap_pf : Futures_Un contrat perpétuel à marge hybride sur la bourse Kraken.
Pour les dimensions qui ne sont pas prises en charge par l’interface API Exchange, une erreur sera signalée et une valeur nulle sera renvoyée lors de l’appel.
Test utilisant l’environnement de simulation de contrats à 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) + "`")
}

Lors de l’arrivéeexchange.GetPositions()Les paramètres de la fonction sontETH_USDT.swapLorsque vous utilisez le contrat perpétuel basé sur ETH U, vous pouvez obtenir les données de position du contrat perpétuel basé sur ETH U.
Lorsqu’il n’est pas importéexchange.GetPositions()Lorsque la fonction est utilisée comme paramètre, les données de position de tous les contrats perpétuels à marge U cotés en bourse peuvent être obtenues (car la paire de négociation actuelle est BTC_USDT et le contrat est un swap, la demande est basée sur la paire de négociation actuelle et plage de dimensions du contrat). Cela équivaut à appelerexchange.GetPositions("USDT.swap"), spécifiez une portée de demande.
La fonction GetFundings nouvellement ajoutée permet d’obtenir le taux de financement des contrats perpétuels sur les bourses à terme. La fonction prend un symbole de paramètre. La fonction renvoie un tableau de structures de financement.
BTC_USDT.swap. Si aucun paramètre n’est passé ou si une plage est passée à la fonction, un message d’erreur s’affiche indiquant que le paramètre de symbole n’est pas pris en charge.Fonction de marchéexchange.GetTicker()Cette mise à niveau ajoute principalement des paramètres de symbole. Cette fonction peut être utilisée pour demander des données de marché directement en fonction des informations sur le produit spécifiées par les paramètres, quelle que soit la paire de trading actuelle et le code du contrat. Simplifie le processus d’écriture de code. Dans le même temps, il est toujours compatible avec la méthode d’appel sans passer de paramètres et est compatible dans toute la mesure du possible avec les anciennes stratégies de plate-forme.
paramètresymbolPour les objets d’échangeexchangeIl existe différents formats pour les spot/futures :
AAA_BBBAAA représente baseCurrency, c’est-à-dire la devise de transaction, et BBB représente quoteCurrency, c’est-à-dire la devise de tarification. Les noms des devises sont tous en majuscules.
Par exemple : paire de trading spot BTC_USDT.AAA_BBB.XXXAAA représente baseCurrency, c’est-à-dire la devise de transaction, BBB représente quoteCurrency, c’est-à-dire la devise de tarification, et XXX représente le code du contrat, tel que le swap de contrat perpétuel. Les noms des devises sont tous en majuscules et les codes des contrats sont en minuscules.
Par exemple : BTC_USDT.swap, le contrat perpétuel basé sur U du BTC.Testé à l’aide de l’environnement réel de Binance Futures :
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
}

Demander un lot de données de marché pour un symbole spécifique est devenu beaucoup plus simple.
Identique à la fonction GetTickerexchange.GetDepth()La fonction ajoute également un paramètre de symbole cette fois. Il est possible de spécifier le type directement lors de la demande de données de profondeur.
Testé à l’aide de l’environnement réel de Binance Futures :
function main() {
exchange.SetCurrency("LTC_USD")
exchange.SetContractType("swap")
Log(exchange.GetDepth())
Log(exchange.GetDepth("ETH_USDT.quarter"))
Log(exchange.GetDepth("BTC_USD.swap"))
}

Identique à la fonction GetTickerexchange.GetTrades()La fonction ajoute également un paramètre de symbole cette fois. Il est possible de spécifier directement le produit lors de la demande de données de transaction de marché.
Testé à l’aide de l’environnement réel de Binance Futures :
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) + "`")
}

Cette mise à niveau est également compatible avecexchange.Go()Lorsque la fonction appelle simultanément l’interface API de la plateforme, le paramètre symbole est transmis pour spécifier les informations sur le produit.
La fonction GetRecords a été considérablement ajustée cette fois-ci, en plus de prendre en charge le paramètre de symbole pour spécifier directement les informations de type des données de ligne K demandées. Le paramètre de période d’origine est conservé pour spécifier la période de la ligne K, et un paramètre de limite est ajouté pour spécifier la longueur de la ligne K attendue lors de la demande. Il est également compatible avec l’ancienne version de la fonction GetRecords qui ne transmet que le paramètre de période.
exchange.GetRecords()Comment appeler la fonction :
Testé à l’aide de l’environnement réel de Binance Futures :
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)
}

La fonction GetOrders ajoute égalementsymbolParamètres, vous pouvez spécifier un produit spécifique et interroger les commandes inachevées (commandes en attente) du produit ; vous pouvez également interroger les commandes inachevées (commandes en attente) de tous les produits dans la plage de dimensions spécifiée.
exchange.GetOrders()La fonction peut être appelée des manières suivantes :
Test utilisant l’environnement de simulation de contrats à 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) + "`")
}
ETH_USDT.swapParamètre, demande les ordres non exécutés (ordres en attente) du contrat perpétuel à marge USDT d’ETH."USDT.swap"Demandez toutes les commandes en attente (commandes en attente) de contrats perpétuels à marge USDT.Il est toujours compatible avec l’ancienne dénomination de la fonction d’acquisition de position et ajoute également le paramètre de symbole, qui peut spécifier les informations de type des données de position spécifiques demandées. Utilisation des fonctions etexchange.GetPositions()Tout à fait cohérent.
pourexchange.IO("api", ...)La méthode d’appel de fonction a été mise à niveau pour prendre en charge la transmission directe de l’adresse de demande complète pour tous les objets d’échange.
Par exemple, si vous souhaitez appeler l’interface OKX :
GET https://www.okx.com /api/v5/account/max-withdrawal ccy: BTC
Prise en charge de l’écriture directe vers l’adresse de basehttps://www.okx.com, il n’est pas nécessaire de changer l’adresse de base avant d’appeler la fonction IO.
Test utilisant l’environnement de simulation de contrats à terme OKX :
function main() {
exchange.IO("simulate", true)
return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

Cette mise à niveau affecte principalementexchange.GetOrder(id)Paramètres de fonctionidLe paramètre id est modifié de l’identifiant de l’ordre d’échange d’origine à un format de chaîne contenant la variété commerciale. Tous les identifiants de commandes emballés sur la plateforme FMZ sont dans ce format.
Par exemple:
123456
Avant cette mise à niveau, si vous souhaitez appeler la fonction GetOrder, l’ID de commande transmis est123456。BTC-USDT。
Veuillez noter que ce qui est mentionné ici est le code du produit de trading nommé par la bourse, et non la paire de trading définie par la plateforme FMZ.Après cette mise à niveau,exchange.GetOrder(id)Le format de l’ID de paramètre que la fonction doit transmettre est ajusté à :BTC-USDT,123456。
Laissez-moi d’abord vous expliquer pourquoi cette conception est réalisée : Étant donné que la fonction CreateOrder a été mise à niveau cette fois-ci pour spécifier directement le produit pour lequel passer une commande (le produit commandé peut être différent de la paire de trading et du code de contrat actuellement définis), si l’ID de commande renvoyé ne contient pas les informations sur le produit. Alors cet identifiant de commande ne sera pas disponible. Parce que lorsque vous vérifiez la commande, vous ne savez pas de quel type (de contrat) il s’agit. La plupart des échanges nécessitent de spécifier des paramètres décrivant le code produit lors de la vérification et de l’annulation des commandes.
Comment gérer cet effet : Si vous utilisez la fonction exchange.IO pour appeler directement l’interface de commande de la bourse pour passer une commande, la valeur de retour contient généralement le symbole d’origine de la bourse (code produit) et l’ID de commande d’origine. En concaténant ensuite les deux avec des virgules anglaises, vous obtiendrez l’ID de commande défini par la plateforme FMZ. De même, si vous utilisez l’interface de commande encapsulée par la plateforme FMZ pour passer une commande, étant donné que le début de l’ID de commande est le code du produit de trading, si vous devez utiliser l’ID de commande d’origine, il vous suffit de supprimer le code du produit et virgule.
Cette mise à niveau est pourexchange.CancelOrder()L’impact des fonctions etexchange.GetOrder()Les fonctions sont les mêmes.
Cette mise à niveau est pourexchange.Buy()L’impact des fonctions etexchange.GetOrder()Les fonctions sont les mêmes.exchange.Buy()L’ID de commande renvoyé par la fonction est une nouvelle structure, par exemple, l’ID renvoyé lors du placement d’un ordre à terme sur la bourse OKX :LTC-USDT-SWAP,1578360858053058560。
Cette mise à niveau est pourexchange.Sell()L’impact des fonctions etexchange.GetOrder()Les fonctions sont les mêmes.exchange.Sell()L’ID de commande renvoyé par la fonction est une nouvelle structure, par exemple, l’ID renvoyé lors du placement d’un ordre à terme sur la bourse OKX :ETH-USDT-SWAP,1578360832820125696。
Seuls les objets d’échange de contrats à terme prennent en charge cette fonction. Pour la fonction exchange.GetPosition() permettant d’obtenir des données de position, un nouveau nom exchange.GetPositions() est ajouté et leurs comportements sont exactement les mêmes.
Ancienne définition : fonction exchange.GetPosition(). Lorsqu’elle est appelée sans spécifier de paramètres, elle obtient les données de position du contrat spécifique défini par la paire de négociation actuelle et le code du contrat.
Après ajustement et modification, la nouvelle définition est la suivante : fonction exchange.GetPosition(). Lorsqu’elle est appelée sans spécifier de paramètres, elle obtient les positions de toutes les variétés dans la plage de dimensions déterminée par la paire de négociation et le code de contrat actuellement définis.
Par exemple, la paire de trading actuelle est BTC_USDT et le code du contrat est swap. À ce moment, appelez :
exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")
Cette fonction demandera les données de position des contrats perpétuels à marge U de toutes les devises.
Ancienne définition : fonction exchange.GetOrders(). Lorsqu’elle est appelée sans spécifier de paramètres, elle récupère tous les ordres en attente pour la paire de trading actuelle.
Après ajustement et modification, la nouvelle définition est la suivante : fonction exchange.GetOrders(). Lorsqu’elle est appelée sans spécifier de paramètres, elle obtient les ordres non exécutés de toutes les paires de trading spot.
Ancienne définition : fonction exchange.GetOrders(). Lorsqu’elle est appelée sans spécifier de paramètres, elle récupère tous les ordres non terminés du contrat spécifique défini par la paire de négociation actuelle et le code du contrat.
Après ajustement et modification, la nouvelle définition est la suivante : fonction exchange.GetOrders(). Lorsqu’elle est appelée sans spécifier de paramètres, elle obtient tous les ordres non terminés dans la plage de dimensions déterminée par la paire de négociation et le code de contrat actuellement définis.
Par exemple, la paire de trading actuelle est BTC_USD et le code du contrat est trimestre. À ce moment, appelez :
exchange.GetOrders() // 等价于调用 exchange.GetOrders("USD.futures")
Cette fonction demandera les données de commande en cours de tous les contrats à terme sur marge de pièces.
Cette mise à jour ajoute un champ Symbole à la structure Ticker, qui enregistre les informations de marché du produit de la structure Ticker actuelle. Le format de ce champ estexchange.GetTicker()Le format du paramètre symbole de la fonction est exactement le même.
Cette mise à jour ajoute un champ Symbole à la structure de commande. Le format de ce champ est le même queexchange.GetTicker()Le format du paramètre symbole de la fonction est exactement le même. Cette mise à jour modifie également le champ ID de la structure de commande pour enregistrer les informations sur le produit et les informations de la commande d’origine dans le nouveau format d’ID de commande. se référer àexchange.GetOrder()La description de l’ID de commande dans la fonction ne sera pas répétée ici.
Cette mise à jour ajoute un champ Symbole à la structure Position. Le format de ce champ est le même queexchange.GetTicker()Le format du paramètre symbole de la fonction est exactement le même.
La fonction GetFundings renvoie un tableau de structures de financement.
{
"Info": {...}, // 交易所资金费率接口原始应答数据
"Symbol": "BTC_USDT.swap", // FMZ平台定义的品种名称
"Interval": 28800000, // 8小时间隔,单位毫秒
"Time": 1729728000000, // 本期资金费率收取时间
"Rate": 0.0001, // 资金费率,即 0.01 %
}
Afin de répondre aux besoins des utilisateurs, cette mise à niveau sera d’abord compatible avec le marché réel, et le système de backtesting sera adapté d’ici une semaine. Si des codes de stratégie individuels sont concernés, veuillez suivre les instructions de cet article pour effectuer des modifications et des adaptations
Conformément à la stratégie de mise à niveau de l’interface API de la plateforme, les interfaces API du système de backtesting de la plateforme ont été mises à jour de manière synchrone ; en outre, le système de backtesting a ajouté la prise en charge de :
Fonctions membres pour les objets d’échange à termeGetAccountRetourAccountLa structure a été élargie avec des champs.
La fonction membre SetMarginLevel de l’objet d’échange à terme a été mise à niveau pour ajouter le paramètre symbole.
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)
}
CtValCcyEnregistrez l’unité de valeur d’un contrat. L’unité de valeur d’un contrat peut être : BTC, USD, ETH, etc.CtValEnregistrez la valeur d’un contrat de ce produit commercial en bourse, en unités deCtValCcyLa devise de l’enregistrement de terrain. Par exemple:CtValest de 0,01,CtValCcy« BTC » signifie qu’un contrat vaut 0,01 BTC.