Die Ressourcen sind geladen. Beförderung...

Detaillierte Erläuterung der FMZ Quant API-Upgrade: Verbesserung der Strategieentwurferfahrung

Schriftsteller:FMZ~Lydia, Erstellt: 2024-07-05 09:44:08, aktualisiert: 2024-07-25 15:15:03

[TOC]

img

Detaillierte Erläuterung der FMZ Quant API-Upgrade: Verbesserung der Strategieentwurferfahrung

Vorwort

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.

1. Neue API-Schnittstelle

Hinzugefügt Exchange.GetTickers Funktion

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
}

img

Hinzugefügt Exchange.CreateOrder Funktion

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)
}

img

Auf diese Weise werden nur dreiexchange.CreateOrder()Funktionsaufrufe wurden verwendet, um drei Futures-Orders unterschiedlicher Sorten und Richtungen zu platzieren.

Hinzugefügt Exchange.GetHistoryOrders Funktion

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:

  • Einige unterstützen abgegrenzte Abfragen, andere nicht.
  • Einige Börsen haben eine Abfragefensterzeit, d. h. Aufträge, die älter als N Tage sind, können nicht abfragt werden.
  • Die meisten Börsen unterstützen Abfragen zu einem bestimmten Zeitpunkt, einige nicht. Diese Schnittstellen sind mit dem höchsten Kompatibilitätsgrad eingekapselt, und bei der tatsächlichen Nutzung sollte darauf geachtet werden, ob sie den Anforderungen und Erwartungen der Strategie entsprechen.

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) +  "`")
}

img

Hinzugefügt Exchange.GetPositions Funktion

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.

Dieexchange.GetPositions()Funktion hat drei Anrufformen:

  • Erhalten Sie Positionen. Wenn keine Parameter übermittelt werden, werden Positionsdaten auf der Grundlage der aktuellen Einstellungen des Handelspaares/Kontraktcodes angefordert.
  • 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.
  • - Ich bin nicht derjenige. Anfordern Sie die Schnittstelle für die Wechselposition, um alle aktuellen Dimensionen der Positionsdaten zu erhalten. 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("")

    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

Wenn der Parameter an dieexchange.GetPositions()Funktion istETH_USDT.swap, können die Positionsdaten von ETHs U-basierten Dauerverträgen erhoben werden.

img

Wenn der Parameter an dieexchange.GetPositions()Die Funktion ist eine leere Zeichenfolge , die Positionsdaten aller U-basierten Verträge können erhalten werden.

2. Upgrade der API-Schnittstelle

Aktualisieren von Exchange.GetTicker

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 Parametersymbolhat verschiedene Formaten für Spot-/Futures für das Tauschobjektexchange:

  • Gegenstand des Spot-Austauschs Das Format lautet: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.
  • Objekt des Futures-Austauschs Das Format lautet: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, BTCs U-basierter Dauervertrag. Getestet unter Verwendung der Binance Futures Live-Umgebung:
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

Die Anforderung einer Reihe von Marktdaten für ein bestimmtes Symbol ist viel einfacher geworden.

Aktualisieren der Funktion GetDepth

Ä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"))
}

img

Aktualisierung der Exchange.GetTrades-Funktion

Ä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) +  "`")
}

img

Dieses Upgrade ist auch mit dem Symbolparameter kompatibel, der durch dieexchange.Go()Funktion, wenn die Plattform-API-Schnittstelle gleichzeitig aufgerufen wird.

Aktualisieren der Funktion GetRecords

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:

  • - Ich bin nicht derjenige, der das Problem hat. Wenn keine Parameter angegeben werden, werden die K-Liniendaten des Produkts angefordert, die dem aktuellen Handelspaar/Kontraktcode entsprechen.
  • - Das ist nicht wahr. Wenn nur der Parameter K-Zeile angegeben ist, werden die K-Zeilendaten des Produkts angefordert, die dem aktuellen Handelspaar/Kontraktcode entsprechen.
  • (BTC_USDT.swap) Wenn nur die Produktinformationen angegeben werden, werden die K-Liniendaten des angegebenen Produkts angefordert.
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60) Angabe der Produktinformationen und des spezifischen K-Zeilenabschnitts für die Anforderung von K-Zeilendaten.
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) Spezifizieren Sie die Produktinformationen, die spezifische K-Linienperiode und die erwartete K-Linienlänge, um K-Liniendaten anzufordern. Beachten Sie, dass, wenn der Grenzparameter die maximale Länge einer einzigen Anfrage von der Börse überschreitet, eine Paging-Anfrage generiert wird (d. h. mehrere Anrufe an die K-Line-Schnittstelle der Börse).

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)
}

img

Aktualisieren der Exchange.GetOrders-Funktion

Die GetOrders-Funktion fügt auchsymbolParameter, die den Typ der aktuell noch nicht abgeschlossenen Aufträge (Pending Orders) angeben können, die direkt abfragt werden sollen; es unterstützt auch die Abfrage aller ausstehenden Aufträge (unabhängig vom Typ) und ist mit der ursprünglichen Aufrufmethode kompatibel.

Dieexchange.GetOrders()Funktion kann auf folgende Weise aufgerufen werden:

  • - Ich bin nicht hier. Abfrage aller nicht abgeschlossenen Aufträge für das aktuelle Handelspaar/den aktuellen Vertragskode.
  • (BTC_USDT.swap) Abfrage aller ausstehenden Aufträge für USDT-marginalierte Daueraufträge auf BTC.
  • - Ich bin nicht derjenige. Abfrage aller unvollendeten Aufträge in der aktuellen Dimension des Austauschs (nach der Dimension der Austausch-API-Schnittstelle aufgeteilt).

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", ""]) {
        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) +  "`")
}

img

Wenn keine Parameter übergeben werden, ist die Standardanfrage für alle unvollendeten ausstehenden Aufträge des aktuellen BTC_USDT-Handelspaares und des Swap-Perpetual-Kontrakts.

img

Wenn dieETH_USDT.swapWenn der Parameter angegeben ist, werden alle ausstehenden ausstehenden Aufträge des Perpetual Contracts des ETH_USDT-Handelspaares angefordert.

img

Wenn eine leere Zeichenfolge""Die Anforderung wird an alle noch nicht abgeschlossenen Aufträge aller USDT-Margin-Kontrakte gerichtet.

Aktualisierung der Funktion Exchange.GetPosition

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().

Aktualisierungexchange.IOFunktion

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.comohne 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")
}

img

3. Auswirkungen auf die API-Schnittstelle

Beeinflusst die Exchange.GetOrder-Funktion

Dieses Upgrade betrifft hauptsächlich den Parameteridderexchange.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:

  • Die ursprüngliche Bestell-Id des in der Bestellung definierten Austauschs ist:123456Vor diesem Upgrade, wenn Sie die GetOrder-Funktion aufrufen möchten, ist die Order-ID in übergeben123456.
  • Der Produktcode, der von der in der Umtauschanordnung definierten Börse benannt wurde: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.

Wirkt sich auf den Austausch aus.

Die Auswirkungen dieses Upgrades auf dieexchange.CancelOrder()Funktion ist die gleiche wie dieexchange.GetOrder() function.

Beeinflusst den Austausch.Kauffunktion

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.

Wirkt sich auf den Austausch aus.

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.

4. Strukturelle Anpassung

Tick-Struktur

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.

Aufsichtsstruktur

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ß.

Positionsstruktur

Dieses Update fügt dem Symbolfeld das Format des Symbolparameter-Formats der Positionstruktur hinzu.exchange.GetTicker() function.

5. Backtestsystem

Um den Bedürfnissen der Nutzer gerecht zu werden, wird dieses Upgrade zunächst mit dem Live-Handel kompatibel sein und das Backtesting-System innerhalb einer Woche angepasst.

Zusätzliche Informationen

1. Neue Bereiche Eigenkapital und UPnL in der Kontostruktur

Die Felder derAccountStruktur zurückgegeben durch dieGetAccountDie 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.

2. Die Funktion SetMarginLevel wurde aktualisiert, um Symbolparameter zu unterstützen

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)
}

Mehr