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-09-20 08:52:30

[TOC]

img

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.

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: BTCs währungsbasierter Dauervertrag. ETH_USDT.swap: ETH ist ein U-basierter Perpetual Contract. ETH_USDT.quarter: ETHs vierteljährlicher Liefervertrag auf U-Basis. BTC_USD.BTC-USD-201226-24250-C: Optionsvertrag auf Basis von BTC-Münzen.

  • 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 exchanges Spread-Kombinationsvertrag. USD.futures_ff: Futures_Kraken exchanges gemischte Margin-Liefervertrag. USD.swap_pf: Futures_Kraken exchange's perpetual mixed margin contract. Für Dimensionen, die nicht von der Exchange-API-Schnittstelle unterstützt werden, wird ein Fehler gemeldet und ein Nullwert bei Aufruf zurückgegeben.

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

img

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

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.

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 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:

  • - Ich bin nicht hier. Für Futures-Börsen: Wenn keine Parameter übermittelt werden, werden alle ausstehenden Aufträge (Pending Orders) für alle Instrumente im aktuellen Dimensionsbereich gemäß dem aktuellenHandelspaar / VertragskodeEinstellungen. Für Spot-Börsen: Wenn keine Parameter übermittelt werden, werden Anfragen für alle ausstehenden Aufträge (Pending Orders) aller Spot-Produkte gestellt.
  • exchange.GetOrders ((BTC_USDT.swap) oder exchange.GetOrders ((BTC_USDT) Für Futures-Börsen: exchange.GetOrders ((BTC_USDT.swap), abfragen Sie alle ausstehenden Aufträge (ausstehenden Aufträge) für BTCs USDT-basierte Daueraufträge. Für Spot-Börsen: exchange.GetOrders(BTC_USDT), abfragen Sie alle ausstehenden Aufträge (ausstehende Aufträge) für das BTC_USDT-Spot-Handelspaar.
  • Nur für Futures-Börsen unterstützt exchange.GetOrders ((USDT.swap) gibt den Dimensionsbereich an, um ausstehende Aufträge (aufstehende Aufträge) für alle Sorten anzufordern Der Dimensionsbereich entspricht dem Bereich in der Funktion GetPositions. Zum Beispiel: exchange.GetOrders ((USDT.swap) fordert alle ausstehenden Aufträge (Pending Orders) aller Sorten im U-basierten Perpetual Contract-Bereich an.

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.swapEs werden unvollendete Aufträge (aufstehende Aufträge) von ETHs USDT-basierten Dauerkontrakten angefordert.

Wenn die Schnur"USDT.swap"Wenn die Bestellung übergeben wird, werden die unvollendeten Aufträge (aufstehende Aufträge) aller USDT-basierten Daueraufträge angefordert.

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.

Beeinflusst die Funktion Exchange.GetPosition

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.

Beeinflusst die Exchange.GetOrders-Funktion

  1. Für Spotbörsen:

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.

  1. Für Futuresbörsen:

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.

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

Gemäß der Plattformstrategie API-Schnittstellen-Upgrade wurde das Backtesting-System der Plattform synchron aktualisiert; Zusätzlich hat das Backtesting-System Unterstützung für:

  • Unterstützt mehr Austausch von Backtestdaten.
  • Unterstützt Backtesting-Daten für alle Arten von Börsen.
  • Mischhandel für U-basierte, Währungsbasierte Lieferung und dauerhaften Vertrag.
  • Futures-Austauschobjekte unterstützen das Wechseln von Handelsparen während des Backtestings.

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

3. Die von der Funktion GetMarkets zurückgegebene Marktstruktur fügt das Feld CtValCcy hinzu

Das FeldCtValCcyDie Wert-Einheit eines Vertrages kann sein: BTC, USD, ETH usw. Das FeldCtValDer Wert des Handelsprodukts wird an der Börse erfasst, und die Einheit ist die Währung, die in derCtValCcyDas ist ein Beispiel:CtValist 0,01 undCtValCcyist BTC, was bedeutet, dass ein Vertrag 0,01 BTC wert ist.


Mehr