[TOC]
Nach 9 Jahren technischer Iteration wurde die FMZ Quant Trading Platform mehrmals umgebaut, obwohl wir als Nutzer es vielleicht nicht bemerkt haben. In den letzten zwei Jahren hat die Plattform viele Optimierungen und Upgrades in Bezug auf die Benutzererfahrung vorgenommen, einschließlich eines umfassenden Upgrades der Benutzeroberfläche, der Bereicherung häufig verwendeter quantitativer Handelswerkzeuge und der Hinzufügung von mehr Backtesting-Datenunterstützung.
Um das Strategie-Design komfortabler, die Handelslogik klarer und für Anfänger einfacher zu gestalten, hat die Plattform die von der Strategie verwendete API-Schnittstelle aktualisiert. Docker, die die neueste Version verwenden, können diese neuen Funktionen aktivieren. Die Plattform ist weiterhin weitgehend mit den alten Schnittstellenanrufen kompatibel. Informationen zu den neuen Funktionen der API-Schnittstelle wurden in der API-Dokumentation der FMZ Quant Trading Platform aktualisiert:
Syntaxführer:https://www.fmz.com/syntax-guideBenutzerhandbuch:https://www.fmz.com/user-guide
Lassen Sie uns also schnell einen Blick darauf werfen, welche Schnittstellen aktualisiert wurden und welche Änderungen erforderlich sind, um alte Strategien zu verwenden, um sie mit der aktuellen API kompatibel zu machen.
Für die Entwicklung von Multi-Produkt-Strategien und vollständigen Marktüberwachungsstrategien ist die aggregierte Marktoberfläche unerlässlich.
Wenn die Börse nicht über diese Schnittstelle verfügt (individuelle Börsen),exchange.GetTickers()
, wird eine Fehlermeldung angezeigt: Nicht unterstützt.
Diese Funktion hat keine Parameter und gibt die Echtzeit-Marktdaten aller Varianten in der aggregierten Marktoberfläche der Börse zurück.
exchange.GetTickers()
Funktion ist die voll ausgestattete Anforderungsversion desexchange.GetTicker()
Funktion (sieh genau hin, der Unterschied zwischen diesen beiden Funktionsnamen ist nur Singular und Plural).
Wir verwenden die OKX-Spot-Simulationsumgebung zum Testen:
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
}
Die neu hinzugefügtenexchange.CreateOrder()
Die größte Funktion vonexchange.CreateOrder()
Der Auftrag kann in den Funktionsparametern direkt den Typ und die Richtung des Auftrags angeben, so dass er nicht mehr von dem aktuellen Handelspar, dem Vertragskode, der Handelsrichtung und anderen Einstellungen des Systems abhängt.
Bei Szenarien mit mehreren Handelssorten und bei gleichzeitigen Szenarien wird die Konstruktionskomplexität erheblich reduziert.exchange.CreateOrder()
Funktion sindsymbol
, side
, price
, amount
.
Test mit OKX-Futures-Simulationsumgebung:
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)
}
Auf diese Weise werden nur dreiexchange.CreateOrder()
Funktionsaufrufe wurden verwendet, um drei Futures-Orders unterschiedlicher Sorten und Richtungen zu platzieren.
Die neu hinzugefügtenexchange.GetHistoryOrders()
Diese Funktion erfordert auch die Unterstützung der Austauschoberfläche.
Für die Abfrage historischer Aufträge variieren die von verschiedenen Börsen implementierten Schnittstellen stark:
Die detaillierte Funktionsbeschreibung wird hier nicht wiederholt, Sie können sich auf das Syntax-Handbuch in der API-Dokumentation beziehen:
https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders
Geprüft mit Hilfe der Binance-Spot-Handelsumgebung:
function main() {
var orders = exchange.GetHistoryOrders("ETH_USDT")
// Write to chart
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) + "`")
}
Die alte Version der Positionsdatenerfassung istexchange.GetPosition()
. Dieses Upgrade fügt eine neue Positionserfassungsfunktion hinzu, die besser mit der Funktionsnamenssemantik übereinstimmt:exchange.GetPositions()
. Gleichzeitig ist es mit der GetPosition-Funktion noch kompatibel/upgraded.
Beachten Sie, dass sich die beiden Funktionsnamen nur durch den letzten S unterscheiden. Da GetPositions semantischer korrekt ist, wird empfohlen, GetPositions in Zukunft zu verwenden.
Dieexchange.GetPositions()
Funktion hat drei Anrufformen:
Erhalten Sie Positionen. Wenn keine Parameter übergeben werden, werden die Positionsdaten aller Sorten in der aktuellen Dimension gemäß den Einstellungen des aktuellenHandelspaar / Vertragskode.
Der Wert der Vermögenswerte wird auf der Basis der Vermögenswerte der Vermögenswerte der Vermögenswerte berechnet.
Bei der Angabe spezifischer Produktinformationen (das Format von ETH_USDT.swap wird von der FMZ-Plattform definiert) werden die Positionsdaten des spezifischen Produkts angefordert.
Zum Beispiel:BTC_USD.swap
, ETH_USDT.swap
, ETH_USDT.quarter
, usw.
BTC_USD.swap: BTC
Der Ausgleichsbetrag für die Ausgleichszahlungen wird von der Kommission berechnet. Anfordern Sie Positionsdaten für alle Produkte gemäß dem angegebenen Abmessungsbereich. USDT.swap: U-basierter Dauervertragsspanne. USDT.Futures: Liefervertragsspanne auf Basis von U. USD.swap: auf Münzen basierender perpetual contract range. USD.futures: Bereich der auf Münzen basierenden Lieferverträge. USDT.option: U-basierte Optionskontrakt-Bereich. USD.option: Münzbasierte Optionskontraktbereiche.
Einige spezielle Abteilungen der Dimension von Tauschverträgen:
USDT.futures_combo: Futures_Deribit exchange
Test mit OKX-Futures-Simulationsumgebung:
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) + "`")
}
Wenn der Parameter an dieexchange.GetPositions()
Funktion istETH_USDT.swap
, können die Positionsdaten von ETH
Wenn die Parameter derexchange.GetPositions()
Wenn die Funktionen nicht weitergegeben werden, können die Positionsdaten aller auf der Börse aufgeführten U-basierten Perpetual Contracts erhalten werden (weil das aktuelle Handelspaar BTC_USDT ist und der Vertrag Swap ist, basiert die Anfrage auf dem aktuellen Handelspaar und dem Dimensionsbereich des Vertrags).exchange.GetPositions("USDT.swap")
und die Angabe eines Anforderungsbereichs.
Die wichtigste Modernisierung der Marktfunktionexchange.GetTicker()
Dies ermöglicht es der Funktion, Marktdaten direkt nach den vom Parameter angegebenen Produktinformationen ohne das aktuelle Handelspaar und den Vertragskode anzufordern. Es vereinfacht den Code-Schreibprozess. Gleichzeitig ist es immer noch mit der Call-Methode kompatibel, ohne Parameter zu übergeben, und ist in größtem Umfang mit der alten Plattformstrategie kompatibel.
Der Parametersymbol
hat verschiedene Formaten für Spot-/Futures für das Tauschobjektexchange
:
AAA_BBB
, AAA steht für Basiswährung, d.h. Handelswährung, und BBB steht für Quotewährung, d.h. Preiswährung.
Zum Beispiel: BTC_USDT-Spot-Handelspaar.AAA_BBB.XXX
, AAA steht für Basiswährung, d.h. Handelswährung, BBB steht für QuoteWährung, d.h. Preiswährung, und XXX steht für Vertragscode, wie z.B. perpetual contract swap.
Zum Beispiel: BTC_USDT.swap, BTCvar 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
}
Die Anforderung einer Reihe von Marktdaten für ein bestimmtes Symbol ist viel einfacher geworden.
Ähnlich wie bei der GetTicker-Funktionexchange.GetDepth()
Funktion fügt auch einen Symbolparameter hinzu. Dies ermöglicht es uns, das Symbol direkt anzugeben, wenn Tiefendaten angefordert werden.
Getestet unter Verwendung der Binance Futures Live-Umgebung:
function main() {
exchange.SetCurrency("LTC_USD")
exchange.SetContractType("swap")
Log(exchange.GetDepth())
Log(exchange.GetDepth("ETH_USDT.quarter"))
Log(exchange.GetDepth("BTC_USD.swap"))
}
Ähnlich wie bei der GetTicker-Funktionexchange.GetTrades()
Diese Funktion erlaubt es uns, das Symbol direkt bei der Anforderung von Markttransaktionsdaten anzugeben.
Getestet unter Verwendung der Binance Futures Live-Umgebung:
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) + "`")
}
Dieses Upgrade ist auch mit dem Symbolparameter kompatibel, der durch dieexchange.Go()
Funktion, wenn die Plattform-API-Schnittstelle gleichzeitig aufgerufen wird.
Die GetRecords-Funktion wurde diesmal stark angepasst. Zusätzlich zur Unterstützung des Symbolparameters zur direkten Angabe der Typinformationen der angeforderten K-Zeilendaten wird der ursprüngliche Periodenparameter beibehalten, um die K-Zeilende anzugeben, und ein Grenzparameter wird hinzugefügt, um die erwartete K-Zeilende bei der Anfrage anzugeben. Gleichzeitig ist es auch mit der alten Version der GetRecords-Funktion kompatibel, die nur in den Periodenparameter übergeht.
Die Anrufmethode vonexchange.GetRecords()
Funktion ist:
Getestet unter Verwendung der Binance Futures Live-Umgebung:
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 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}
Die GetOrders-Funktion fügt auchsymbol
Parameter, die verwendet werden können, um ein bestimmtes Symbol anzugeben und die unvollendeten Aufträge (ausstehenden Aufträge) dieses Symbols abzufragen; es unterstützt auch die Abfrage der unvollendeten Aufträge (ausstehenden Aufträge) aller Symbole im angegebenen Dimensionsbereich.
Dieexchange.GetOrders()
Funktion kann auf folgende Weise aufgerufen werden:
Test mit OKX-Futures-Simulationsumgebung:
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
// Write to chart
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) + "`")
}
Wenn keine Parameter übermittelt werden, werden unvollendete Aufträge (aufstehende Aufträge) aller Sorten im Dimensionsbereich des aktuellen Handelspaares (BTC_USDT) und des Vertragscodes (Swap) angefordert.
Wenn der ParameterETH_USDT.swap
Es werden unvollendete Aufträge (aufstehende Aufträge) von ETH
Wenn die Schnur"USDT.swap"
Wenn die Bestellung übergeben wird, werden die unvollendeten Aufträge (aufstehende Aufträge) aller USDT-basierten Daueraufträge angefordert.
Es ist immer noch kompatibel mit der alten Positionserfassung Funktion Naming, und fügt auch den Symbolparameter, die die Art der Informationen der spezifischen angeforderten Positionsdaten angeben können.
Die Verwendung dieser Funktion ist genau die gleiche wieexchange.GetPositions()
.
Fürexchange.IO("api", ...)
Funktionsanrufe, alle Exchange-Objekte wurden aktualisiert, um die direkte Übermittlung vollständiger Anfrageadressen zu unterstützen.
Wenn Sie beispielsweise die OKX-Schnittstelle aufrufen möchten:
// GEThttps://www.okx.com/api/v5/Konto/maximale Auszahlungszeit: BTC
Unterstützt das direkte Schreiben an die Basisadressehttps://www.okx.com
ohne zuerst die Basisadresse wechseln und dann die IO-Funktion aufrufen zu müssen.
Test mit OKX-Futures-Simulationsumgebung:
function main() {
exchange.IO("simulate", true)
return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}
Dieses Upgrade betrifft hauptsächlich den Parameterid
derexchange.GetOrder(id)
Der ID-Parameter wird von der ursprünglichen Exchange-Order-ID in ein Zeichenfolgeformat geändert, das das Handelsprodukt enthält.
Alle in die FMZ-Plattform eingekapselten Auftrags-IDs sind in diesem Format.
Zum Beispiel:
123456
Vor diesem Upgrade, wenn Sie die GetOrder-Funktion aufrufen möchten, ist die Order-ID in übergeben123456
.BTC-USDT
- Ich weiß.
Beachten Sie, dass dies auf den von der Börse benannten Handelsproduktcode und nicht auf das von der FMZ-Plattform definierte Handelspaar bezieht.Nach diesem Upgrade wird das Format der Parameter-ID, die in dieexchange.GetOrder(id)
Die Funktion wird so eingestellt:BTC-USDT,123456
.
Zunächst möchte ich erklären, warum dieses Design gemacht wurde: Da die CreateOrder-Funktion aktualisiert wurde, um die Art der Bestellung direkt anzugeben (die Art der platzierten Bestellung kann sich von der aktuell festgelegten Handelspaare und Vertragskode unterscheiden). Wenn die zurückgegebene Order-ID nicht die Typ-Informationen enthält, dann wird diese Order-ID unbrauchbar sein. Weil wir beim Überprüfen der Bestellung nicht wissen, für welchen Typ (Vertrag) der Auftrag bestimmt ist. Die meisten Börsen erfordern die Angabe von Parametern, die den Typcode beim Überprüfen und Stornieren von Aufträgen beschreiben.
Wie kann man mit diesem Aufprall kompatibel sein: Wenn Sie dieexchange.IODer zurückgegebene Wert enthält in der Regel das ursprüngliche Symbol (Produktcode) und die ursprüngliche Bestell-ID der Börse. Dann werden die beiden mit englischen Kommas verknüpft, um die Bestell-ID zu erhalten, die der Definition der FMZ-Plattform entspricht. Ähnlich, wenn Sie die FMZ-Plattform kapselte Bestelloberfläche verwenden, um eine Bestellung zu platzieren, da der Anfang der Order-ID der Handelsproduktcode ist, wenn Sie die ursprüngliche Bestell-ID verwenden müssen, löschen Sie einfach den Produktcode und das Komma.
Die Auswirkungen dieses Upgrades auf dieexchange.CancelOrder()
Funktion ist die gleiche wie dieexchange.GetOrder()
function.
Die Auswirkungen dieses Upgrades auf dieexchange.Buy()
Funktion ist die gleiche wie dieexchange.GetOrder()
Funktion.
Die von derexchange.Buy()
Funktion ist eine neue Struktur, z. B. die ID, die bei der Platzierung einer Futures-Order an der OKX-Börse zurückgegeben wird, ist:LTC-USDT-SWAP,1578360858053058560
.
Die Auswirkungen dieses Upgrades auf dieexchange.Sell()
Funktion ist die gleiche wie dieexchange.GetOrder()
Funktion.
Die von derexchange.Sell()
Funktion ist eine neue Struktur, z. B. die ID, die bei der Platzierung einer Futures-Order an der OKX-Börse zurückgegeben wird, ist:ETH-USDT-SWAP,1578360832820125696
.
Nur Futures-Austauschobjekte unterstützen diese Funktion. Für die Exchange.GetPosition() Funktion zum Erhalt von Positionsdaten wird ein neuer Exchange.GetPositions() Name hinzugefügt, und die beiden Verhaltensweisen sind genau gleich.
Alte Definition: exchange.GetPosition() Funktion, wenn sie ohne Angabe von Parametern aufgerufen wird, erhält die Positionsdaten des spezifischen Vertrags, der durch das aktuelle Handelspaar und den Vertragskode festgelegt wurde. Nach Anpassung und Änderung erhält die neue Definition: exchange.GetPosition() Funktion, wenn sie ohne Angabe von Parametern aufgerufen wird, die Positionen aller Sorten im Dimensionsbereich, der durch das aktuelle gesetzte Handelspaar und den Vertragskode bestimmt wird.
Zum Beispiel ist das aktuelle Handelspaar BTC_USDT und der Vertragscode ist Swap.
exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")
Diese Funktion wird die Positionsdaten von U-basierten Perpetual Contracts aller Währungen anfordern.
Alte Definition: exchange.GetOrders() Funktion, wenn sie ohne Angabe von Parametern aufgerufen wird, erhält alle unvollendeten Aufträge des aktuellen Handelspares. Nach Anpassung und Änderung ist die neue Definition: exchange.GetOrders() Funktion, wenn sie ohne Angabe von Parametern aufgerufen wird, erhält die unvollendeten Aufträge aller Spot-Handelspaare.
Alte Definition: exchange.GetOrders() Funktion, wenn sie aufgerufen wird, ohne Parameter anzugeben, erhält alle unvollendeten Aufträge des spezifischen Vertrags, der vom aktuellen Handelspaar und Vertragskode festgelegt wurde. Nach Anpassung und Änderung lautet die neue Definition: exchange.GetOrders() Funktion, wenn sie ohne Angabe von Parametern aufgerufen wird, erhält alle unvollendeten Aufträge des Dimensionsbereichs, der durch das aktuelle Handelspaar und den Vertragskode bestimmt wird.
Zum Beispiel ist das aktuelle Handelspaar BTC_USD und der Vertragskode ist Viertel.
exchange.GetOrders() // Equivalent to calling exchange.GetOrders("USD.futures")
Diese Funktion wird die ausstehenden Auftragsdaten aller Münz-basierten Futures-Kontrakte anfordern.
Mit diesem Update wird dem Ticker-System ein Symbol-Feld hinzugefügt, das die Marktinformationen der aktuellen Ticker-Struktur erfasst.
Das Format dieses Feldes ist genau das gleiche wie das Format des Symbolparameters desexchange.GetTicker()
function.
Dieses Update fügt ein Symbolfeld zur Orderstruktur hinzu, und das Format dieses Feldes ist genau das gleiche wie das Symbolparameterformat desexchange.GetTicker()
Funktion.
Diese Aktualisierung ändert auch das Feld ID der Bestellstruktur, indem die Produktinformationen und die ursprünglichen Bestellinformationen im neuen Bestell-ID-Format aufgezeichnet werden.exchange.GetOrder()
Die Kommission ist der Ansicht, daß die Kommission in diesem Bereich eine wichtige Rolle spielen muß.
Dieses Update fügt dem Symbolfeld das Format des Symbolparameter-Formats der Positionstruktur hinzu.exchange.GetTicker()
function.
Gemäß der Plattformstrategie API-Schnittstellen-Upgrade wurde das Backtesting-System der Plattform synchron aktualisiert; Zusätzlich hat das Backtesting-System Unterstützung für:
Die Felder derAccount
Struktur zurückgegeben durch dieGetAccount
Die Funktion des Futures-Austauschobjekts wurde erweitert.
Eigenkapital Das Gesamtkapital der aktuellen Margin-Vermögenswährung. Außer für einige Futures-Börsen, die dieses Feld nicht unterstützen, unterstützen die meisten Börsen dieses Feld. Es wird hauptsächlich zur Berechnung des Echtzeit-Konto-Margin-Gewinns und -Verlustes verwendet.
UPnL Der unrealisierte Gewinn und Verlust aller Positionen, die in der aktuellen Margin-Vermögenswährung gehalten werden.
Die Mitgliederfunktion SetMarginLevel des Futures Exchange-Objekts wurde aktualisiert und das Parameter-Symbol hinzugefügt.
Prüfbeispiel:
function main() {
exchange.SetCurrency("ETH_USDT")
exchange.SetContractType("swap")
// The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
exchange.SetMarginLevel(10)
// Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
exchange.SetMarginLevel("BTC_USDT.swap", 20)
}
Das FeldCtValCcy
Die Wert-Einheit eines Vertrages kann sein: BTC, USD, ETH usw.
Das FeldCtVal
Der Wert des Handelsprodukts wird an der Börse erfasst, und die Einheit ist die Währung, die in derCtValCcy
Das ist ein Beispiel:CtVal
ist 0,01 undCtValCcy
ist