avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Erstellt in: 2024-06-28 09:08:29, aktualisiert am: 2024-11-01 10:08:12
comments   12
hits   2055

[TOC]

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Vorwort

Die Inventor Quantitative Trading Platform hat 9 Jahre technologischer Iterationen durchlaufen und wurde viele Male umgestaltet, obwohl wir als Benutzer dies möglicherweise nicht bemerkt haben. In den letzten zwei Jahren wurden an der Plattform viele Optimierungen und Verbesserungen im Hinblick auf die Benutzererfahrung vorgenommen, darunter eine umfassende Aktualisierung der Benutzeroberfläche, die Erweiterung häufig verwendeter quantitativer Handelstools und die Hinzufügung weiterer Unterstützung für Backtesting-Daten.

Um die Strategiegestaltung komfortabler, die Handelslogik klarer und Anfängern den Einstieg zu erleichtern, hat die Plattform die von der Strategie verwendete API-Schnittstelle aktualisiert. Verwenden Sie die neueste Version Ihres Hosts, um diese neuen Funktionen zu aktivieren. Die Plattform bleibt dabei weitestgehend kompatibel zum Aufruf alter Schnittstellen. Informationen zu neuen Funktionen der API-Schnittstelle wurden in der API-Dokumentation der Inventor Quantitative Trading Platform aktualisiert:

Werfen wir also einen kurzen Blick darauf, welche Schnittstellen aktualisiert wurden und welche Änderungen erforderlich sind, um alte Strategien mit der aktuellen API kompatibel zu machen.

1. Neue API-Schnittstelle

exchange.GetTickers-Funktion

Zur Entwicklung vielfältiger Strategien und Strategien zur umfassenden Überwachung der Marktlage. Diese aggregierte Marktschnittstelle ist wichtig, um die Entwicklung von Strategien zu vereinfachen und zu vermeiden, dass das Rad neu erfunden werden muss. Die quantitative Handelsplattform des Erfinders kapselt solche APIs von Börsen.

Wenn die Vermittlungsstelle diese Schnittstelle nicht besitzt (Einzelvermittlungsstellen), rufen Sieexchange.GetTickers()Es wird eine Fehlermeldung gemeldet: Nicht unterstützt.

Diese Funktion hat keine Parameter und gibt die Echtzeit-Marktdaten aller Varianten in der aggregierten Marktschnittstelle der Börse zurück. Es kann einfach so verstanden werden:

exchange.GetTickers()Die Funktion istexchange.GetTicker()Die vollständige Version der Funktion (der Unterschied zwischen den beiden Funktionsnamen ist Singular und Plural).

Zum Testen verwenden wir die OKX-Spot-Simulationsumgebung:

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
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Funktion „exchange.CreateOrder“

Neuexchange.CreateOrder()Bei diesem Upgrade stehen die Funktionen im Mittelpunkt.exchange.CreateOrder()Die wichtigste Funktion der Funktion besteht darin, Art und Richtung der Reihenfolge direkt in den Parametern der Funktion anzugeben. Somit ist man nicht mehr abhängig von den aktuellen Systemeinstellungen wie Handelspaaren, Kontraktcodes, Handelsrichtungen etc.

Die Designkomplexität wird in Szenarien mit Handelsaufträgen für mehrere Produkte und in gleichzeitigen Szenarien erheblich reduziert.exchange.CreateOrder()Die vier Parameter der Funktion sindsymbolsidepriceamount

Test mit der 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)
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Das dauerte nur 3 Malexchange.CreateOrder()Der Funktionsaufruf platziert drei Futures-Orders unterschiedlicher Art und Richtung.

Funktion „exchange.GetHistoryOrders“

Neuexchange.GetHistoryOrders()Die Funktion dient dazu, die historischen Transaktionsaufträge eines bestimmten Produkts abzurufen. Auch diese Funktion erfordert die Unterstützung der Börsenschnittstelle.

Für die Abfrage historischer Aufträge sind an den verschiedenen Börsen sehr unterschiedliche Schnittstellen implementiert:

  • Einige unterstützen paginierte Abfragen, andere nicht.
  • Einige Börsen haben ein Abfragefenster, d. h. Bestellungen, die älter als N Tage sind, können nicht abgefragt werden.
  • Die meisten Börsen unterstützen Abfragen zu einem bestimmten Zeitpunkt, einige jedoch nicht.

Solche Schnittstellen werden mit höchster Kompatibilität gekapselt und es ist im tatsächlichen Einsatz darauf zu achten, ob sie den Anforderungen und Erwartungen der Strategie entsprechen.

Die detaillierte Funktionsbeschreibung wird hier nicht wiederholt. Sie können das Syntaxhandbuch in der API-Dokumentation zu Rate ziehen:

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

Getestet mit der Binance-Spot-Trading-Umgebung:

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

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Funktion „exchange.GetPositions“

Die alte Version der Funktion zur Positionsdatenerfassung lautet:exchange.GetPosition(). Um die Semantik der Funktionsbenennung besser anzupassen, fügt dieses Upgrade eine neue Funktion zum Abrufen von Positionen hinzu:exchange.GetPositions(). Gleichzeitig ist es weiterhin mit der GetPosition-Funktion kompatibel/aktualisiert.

Beachten Sie, dass sich die beiden Funktionsnamen nur durch das abschließende s unterscheiden. Da GetPositions semantisch korrekter ist, wird empfohlen, in Zukunft GetPositions zu verwenden.

exchange.GetPositions()Es gibt drei Formen von Funktionsaufrufen:

  • exchange.GetPositions() Wenn keine Parameter übergeben werden, wird der aktuelleHandelspaare / VertragscodeFordern Sie die Positionsdaten aller Sorten in der aktuellen Dimension an.

  • exchange.GetPositions(“ETH_USDT.swap”) Wenn Sie spezifische Produktinformationen angeben (das Format ETH_USDT.swap wird durch die FMZ-Plattform definiert), fordern Sie die Positionsdaten des spezifischen Produkts an. Beispiel:BTC_USD.swapETH_USDT.swapETH_USDT.quarterWarten. BTC_USD.swap: Währungsbasierter unbefristeter Vertrag von BTC. ETH_USDT.swap: U-basierter unbefristeter Vertrag von ETH. ETH_USDC.swap: Unbefristeter Vertrag mit USDC-Marge für ETH. (Neben USDT können Sie auch andere Kurswährungen angeben, die hier nicht wiederholt werden.) ETH_USDT.quarter: U-basierter vierteljährlicher Liefervertrag von ETH. BTC_USD.BTC-USD-201226-24250-C: Optionsvertrag mit BTC-Coin-Margin.

  • exchange.GetPositions(“USDT.swap”) Positionsdaten aller Symbole entsprechend des angegebenen Dimensionsbereichs anfordern. USDT.swap: U-basierter unbefristeter Vertragsbereich. USDT.futures: Angebot an U-basierten Lieferverträgen. USDC.swap: Unbefristeter Kontraktbereich mit USDC-Marge. (Neben USDT können Sie auch andere Kurswährungen angeben, die hier nicht wiederholt werden.) USDC.futures: Angebot an Futures-Kontrakten mit USDC-Margin. USD.swap: Währungsbasierter unbefristeter Vertragsbereich. USD.futures: Angebot an währungsbasierten Terminkontrakten. USDT.option: U-basierter Optionskontraktbereich. USD.option: Währungsbasierter Optionskontraktbereich.

Einige spezielle Aufteilungen der Austauschkontraktdimensionen: USDT.futures_combo: CFD-Kombination der Futures_Deribit-Börse. USD.futures_ff: Futures_Mixed-Margin-Liefervertrag der Börse Craken. USD.swap_pf: Futures_Ein unbefristeter Hybrid-Margin-Vertrag an der Kraken-Börse.

Bei Dimensionen, die von der Exchange-API-Schnittstelle nicht unterstützt werden, wird ein Fehler gemeldet und beim Aufruf ein Nullwert zurückgegeben.

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

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Bei eingehendenexchange.GetPositions()Die Parameter der Funktion sindETH_USDT.swapWenn Sie den unbefristeten Vertrag auf ETH-U-Basis verwenden, können Sie die Positionsdaten des unbefristeten Vertrags auf ETH-U-Basis abrufen.

Wenn nicht importiertexchange.GetPositions()Wenn die Funktion als Parameter verwendet wird, können die Positionsdaten aller an der Börse notierten U-Margin-Perpetual-Verträge abgerufen werden (da das aktuelle Handelspaar BTC_USDT und der Vertrag ein Swap ist, basiert die Anfrage auf dem aktuellen Handelspaar und Vertragsdimensionsbereich). Dies entspricht dem Aufrufexchange.GetPositions("USDT.swap"), geben Sie einen Anforderungsbereich an.

Funktion „exchange.GetFundings“

Mit der neu hinzugefügten Funktion „GetFundings“ lässt sich der Finanzierungssatz unbefristeter Kontrakte an Terminbörsen ermitteln. Die Funktion akzeptiert ein Parametersymbol. Die Funktion gibt ein Array von Finanzierungsstrukturen zurück.

  • Geben Sie den Symbolparameter an: Gibt das Array mit der Finanzierungszinsinformationsstruktur (Funding-Array) des angegebenen Produkts zurück. Der Symbolparameter kann auf einen Bereich eingestellt werden, ähnlich dem Symbolparameter der Funktion GetOrders/GetPositions.
  • Ohne Angabe des Symbolparameters: Gibt alle Produktdaten der aktuellen Dimension gemäß der Dimension zurück, in der sich das aktuelle Handelspaar und der Vertragscode befinden. Der Mechanismus ist derselbe wie bei der Funktion GetOrders/GetPositions.
  • Wenn die Börse ein bestimmtes Produkt angeben muss, muss der Symbolparameter übergeben werden, d. h. der Code des bestimmten Produkts, zum Beispiel:BTC_USDT.swap. Wenn keine Parameter übergeben werden oder ein Bereich an die Funktion übergeben wird, wird eine Fehlermeldung angezeigt, die besagt, dass der Symbolparameter nicht unterstützt wird.

2. Upgrade der API-Schnittstelle

exchange.GetTicker-Funktion

Marktfunktionexchange.GetTicker()Dieses Upgrade fügt hauptsächlich Symbolparameter hinzu. Mit dieser Funktion können Marktdaten direkt entsprechend der durch die Parameter vorgegebenen Produktinformationen abgefragt werden, unabhängig vom aktuellen Handelspaar und Kontraktcode. Vereinfacht den Code-Schreibprozess. Gleichzeitig ist es weiterhin mit der aufrufenden Methode ohne Parameterübergabe kompatibel und weitgehend mit den alten Plattformstrategien kompatibel.

ParametersymbolFür TauschobjekteexchangeEs gibt verschiedene Formate für Spot/Futures:

  • Spot-Austauschobjekte Das Format ist:AAA_BBBAAA steht für baseCurrency, also die Transaktionswährung, und BBB steht für quoteCurrency, also die Preiswährung. Alle Währungsnamen sind in Großbuchstaben. Beispiel: BTC_USDT Spot-Handelspaar.
  • Terminbörsenobjekte Das Format ist:AAA_BBB.XXX, AAA steht für baseCurrency, also die Transaktionswährung, BBB steht für quoteCurrency, also die Preiswährung, und XXX steht für den Vertragscode, z. B. den unbefristeten Vertragsswap. Die Währungsnamen sind alle in Großbuchstaben und die Vertragscodes in Kleinbuchstaben. Beispiel: BTC_USDT.swap, der U-basierte unbefristete Vertrag von BTC.

Getestet mit der Live-Umgebung von 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
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Das Anfordern eines Stapels Marktdaten für ein bestimmtes Symbol ist viel einfacher geworden.

exchange.GetDepth-Funktion

Entspricht der Funktion GetTickerexchange.GetDepth()Die Funktion fügt diesmal auch einen Symbolparameter hinzu. Es besteht die Möglichkeit, den Typ direkt bei der Anforderung von Tiefendaten anzugeben.

Getestet mit der Live-Umgebung von 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"))
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Funktion „exchange.GetTrades“

Entspricht der Funktion GetTickerexchange.GetTrades()Die Funktion fügt diesmal auch einen Symbolparameter hinzu. Bei der Abfrage von Markttransaktionsdaten besteht die Möglichkeit, das Produkt direkt anzugeben.

Getestet mit der Live-Umgebung von 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) +  "`")
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Dieses Upgrade ist auch kompatibel mitexchange.Go()Wenn die Funktion gleichzeitig die Plattform-API-Schnittstelle aufruft, wird der Symbolparameter übergeben, um die Produktinformationen anzugeben.

Funktion „exchange.GetRecords“

Die GetRecords-Funktion wurde dieses Mal erheblich angepasst und unterstützt zusätzlich den Symbolparameter, um die Typinformationen der angeforderten K-Line-Daten direkt anzugeben. Der ursprüngliche Periodenparameter wird beibehalten, um die K-Line-Periode anzugeben, und ein Grenzparameter wird hinzugefügt, um bei der Anforderung die erwartete K-Line-Länge anzugeben. Es ist auch mit der alten Version der GetRecords-Funktion kompatibel, die nur den Zeitraumparameter übergibt.

exchange.GetRecords()So rufen Sie die Funktion auf:

  • exchange.GetRecords() Wenn keine Parameter angegeben werden, werden die K-Line-Daten des Produkts angefordert, das dem aktuellen Handelspaar/Vertragscode entspricht. Der K-Line-Zeitraum ist der Standard-K-Line-Zeitraum, der in der Strategie-Backtesting-Schnittstelle oder im realen Handel festgelegt wurde.
  • exchange.GetRecords(60 * 15) Wenn nur der K-Line-Periodenparameter angegeben ist, werden die K-Line-Daten des Produkts angefordert, die dem aktuellen Handelspaar/Vertragscode entsprechen.
  • exchange.GetRecords(“BTC_USDT.swap”) Wenn nur die Produktinformationen angegeben werden, werden die K-Line-Daten des angegebenen Produkts angefordert. Der K-Line-Zeitraum ist der Standard-K-Line-Zeitraum, der in der Strategie-Backtesting-Schnittstelle oder im realen Handel festgelegt ist.
  • exchange.GetRecords(“BTC_USDT.swap”, 60 * 60) Geben Sie die Produktinformationen und den spezifischen K-Line-Zeitraum an, um K-Line-Daten anzufordern.
  • exchange.GetRecords(“BTC_USDT.swap”, 60, 1000) Geben Sie die Produktinformationen, den spezifischen K-Line-Zeitraum und die gewünschte K-Line-Länge an, um K-Line-Daten anzufordern. Beachten Sie, dass eine Paging-Anforderung generiert wird (d. h. mehrere Aufrufe der K-Line-Schnittstelle der Vermittlungsstelle), wenn der Grenzwertparameter die maximale Länge einer einzelnen Anforderung von der Vermittlungsstelle überschreitet.

Getestet mit der Live-Umgebung von 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)
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

Funktion „exchange.GetOrders“

Die Funktion GetOrders fügt außerdemsymbolParameter, Sie können ein bestimmtes Produkt angeben und die nicht abgeschlossenen Bestellungen (ausstehenden Bestellungen) des Produkts abfragen; Sie können auch die nicht abgeschlossenen Bestellungen (ausstehenden Bestellungen) aller Produkte im angegebenen Dimensionsbereich abfragen.

exchange.GetOrders()Die Funktion kann auf folgende Arten aufgerufen werden:

  • exchange.GetOrders() Für Terminbörsen: Wenn keine Parameter übergeben werden, wird der aktuelleHandelspaare / VertragscodeFordern Sie alle offenen Aufträge (Pending Orders) für alle Symbole im aktuellen Dimensionsbereich an.
    Für Spotbörsen: Wenn keine Parameter übergeben werden, werden Anfragen für alle ausstehenden Aufträge (Pending Orders) aller Spotprodukte gestellt.
  • exchange.GetOrders(“BTC_USDT.swap”) oder exchange.GetOrders(“BTC_USDT”) Für Terminbörsen: exchange.GetOrders(“BTC_USDT.swap”) zum Abfragen aller nicht abgeschlossenen Aufträge (ausstehende Aufträge) für den unbefristeten Vertrag mit USDT-Marge von BTC. Für Spot-Börsen: exchange.GetOrders(“BTC_USDT”), fragt alle nicht abgeschlossenen Aufträge (ausstehende Aufträge) für das Spot-Handelspaar BTC_USDT ab.
  • Wird nur für Terminbörsen unterstützt: exchange.GetOrders(“USDT.swap”) Anfrage nach offenen Aufträgen (Pending Orders) aller Art in einem angegebenen Dimensionsbereich Der Dimensionsunterteilungsbereich stimmt mit dem Bereich in der Funktion GetPositions überein. Beispiel: exchange.GetOrders(“USDT.swap”) fordert alle nicht erfüllten Aufträge (ausstehende Aufträge) aller Art im Bereich der unbefristeten Kontrakte mit USDT-Marge an.

Test mit der OKX-Futures-Simulationsumgebung:

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) +  "`")
}
  • Wenn keine Parameter übergeben werden, werden die nicht abgeschlossenen Aufträge (Pending Orders) aller Sorten im Dimensionsbereich des aktuellen Handelspaares (BTC_USDT) und Vertragscodes (Swap) angefordert.
  • Parameter angebenETH_USDT.swapParameter, fordern Sie die nicht ausgeführten Aufträge (ausstehende Aufträge) des mit USDT-Marge versehenen unbefristeten Vertrags von ETH an.
  • Übergeben einer Zeichenfolge"USDT.swap"Fordern Sie alle ausstehenden Aufträge (ausstehende Aufträge) von unbefristeten Verträgen mit USDT-Marge an.

exchange.GetPosition-Funktion

Es ist weiterhin mit der alten Benennung der Positionserfassungsfunktion kompatibel und fügt außerdem den Symbolparameter hinzu, der die Typinformationen der spezifischen angeforderten Positionsdaten angeben kann. Funktionsnutzung undexchange.GetPositions()Absolut stimmig.

exchange.IO-Funktion

fürexchange.IO("api", ...)Die Methode des Funktionsaufrufs wurde erweitert, um die direkte Übergabe der vollständigen Anforderungsadresse für alle Austauschobjekte zu unterstützen.

Wenn Sie beispielsweise die OKX-Schnittstelle aufrufen möchten:

GET https://www.okx.com /api/v5/account/max-withdrawal ccy: BTC

Unterstützt direktes Schreiben an die Basisadressehttps://www.okx.com, es ist nicht erforderlich, die Basisadresse vor dem Aufruf der IO-Funktion zu wechseln.

Test mit der 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")
}

Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung

3. Auswirkungen auf die API-Schnittstelle

exchange.GetOrder-Funktion

Dieses Upgrade betrifft vor allemexchange.GetOrder(id)FunktionsparameteridDer ID-Parameter wird von der ursprünglichen Umtauschauftrags-ID in ein Zeichenfolgenformat geändert, das die Handelsvariante enthält. Alle verpackten Bestell-IDs auf der FMZ-Plattform liegen in diesem Format vor.

Zum Beispiel:

  • Die im Umtauschauftrag definierte ursprüngliche Umtauschauftrags-ID lautet:123456 Wenn Sie vor diesem Upgrade die Funktion GetOrder aufrufen möchten, lautet die übergebene Bestell-ID123456
  • Das im Börsenauftrag definierte börsenbenannte Produktsymbol:BTC-USDT。 Bitte beachten Sie, dass es sich hier um den von der Börse benannten Handelsproduktcode handelt und nicht um das von der FMZ-Plattform definierte Handelspaar.

Nach diesem Upgradeexchange.GetOrder(id)Das Format der Parameter-ID, die die Funktion übergeben muss, wird wie folgt angepasst:BTC-USDT,123456

  • Lassen Sie mich zunächst erklären, warum dieses Design erstellt wurde: Denn die Funktion CreateOrder wurde dieses Mal aktualisiert, um das Produkt für die Bestellung direkt anzugeben (das bestellte Produkt kann sich vom aktuell festgelegten Handelspaar und Vertragscode unterscheiden), wenn die zurückgegebene Bestell-ID die Produktinformationen nicht enthält. Dann ist diese Bestellnummer nicht verwendbar. Denn bei der Prüfung der Bestellung ist Ihnen nicht bekannt, um welchen Typ (Vertrag) es sich handelt. Die meisten Börsen verlangen beim Prüfen und Stornieren von Bestellungen die Angabe von Parametern, die den Produktcode beschreiben.

  • So berücksichtigen Sie diesen Effekt: Wenn Sie die Funktion exchange.IO verwenden, um die Bestellschnittstelle der Börse direkt aufzurufen und eine Bestellung aufzugeben, enthält der Rückgabewert im Allgemeinen das ursprüngliche Symbol (Produktcode) der Börse und die ursprüngliche Bestell-ID. Durch anschließendes Verknüpfen der beiden mit englischen Kommas erhalten Sie die von der FMZ-Plattform definierte Bestell-ID. Wenn Sie die von der FMZ-Plattform gekapselte Bestellschnittstelle verwenden, um eine Bestellung aufzugeben, müssen Sie, da der Anfang der Bestell-ID der Handelsproduktcode ist, nur den Produktcode löschen, wenn Sie die ursprüngliche Bestell-ID verwenden müssen. Komma.

Funktion „exchange.CancelOrder“

Dieses Upgrade ist fürexchange.CancelOrder()Der Einfluss von Funktionen undexchange.GetOrder()Die Funktionen sind die gleichen.

Exchange.Buy-Funktion

Dieses Upgrade ist fürexchange.Buy()Der Einfluss von Funktionen undexchange.GetOrder()Die Funktionen sind die gleichen.exchange.Buy()Die von der Funktion zurückgegebene Auftrags-ID weist eine neue Struktur auf, beispielsweise die ID, die beim Platzieren einer Futures-Order an der OKX-Börse zurückgegeben wird:LTC-USDT-SWAP,1578360858053058560

exchange.Sell Funktion

Dieses Upgrade ist fürexchange.Sell()Der Einfluss von Funktionen undexchange.GetOrder()Die Funktionen sind die gleichen.exchange.Sell()Die von der Funktion zurückgegebene Auftrags-ID weist eine neue Struktur auf, beispielsweise die ID, die beim Platzieren einer Futures-Order an der OKX-Börse zurückgegeben wird:ETH-USDT-SWAP,1578360832820125696

exchange.GetPosition-Funktion

Nur Futures-Börsenobjekte unterstützen diese Funktion. Für die Funktion „exchange.GetPosition()“ zum Abrufen von Positionsdaten wird der neue Name „exchange.GetPositions()“ hinzugefügt, und ihr Verhalten ist genau gleich.

Alte Definition: Funktion „exchange.GetPosition()“. Wenn sie ohne Angabe von Parametern aufgerufen wird, erhält sie die Positionsdaten des spezifischen Kontrakts, der durch das aktuelle Handelspaar und den Kontraktcode festgelegt ist.

Nach der Anpassung und Änderung lautet die neue Definition: Funktion „exchange.GetPosition()“. Wenn sie ohne Angabe von Parametern aufgerufen wird, erhält sie die Positionen aller Varianten im Dimensionsbereich, der durch das aktuell festgelegte Handelspaar und den Vertragscode bestimmt wird.

Beispielsweise ist das aktuelle Handelspaar BTC_USDT und der Vertragscode ist Swap. Rufen Sie zu dieser Zeit an:

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

Diese Funktion fordert die Positionsdaten von U-Margin-Perpetual-Kontrakten aller Währungen an.

Funktion „exchange.GetOrders“

  1. Für Spotbörsen:

Alte Definition: Funktion „exchange.GetOrders()“. Wenn sie ohne Angabe von Parametern aufgerufen wird, ruft sie alle offenen Aufträge für das aktuelle Handelspaar ab.

Nach der Anpassung und Änderung lautet die neue Definition: Funktion „exchange.GetOrders()“. Wenn sie ohne Angabe von Parametern aufgerufen wird, erhält sie die nicht abgeschlossenen Aufträge aller Spot-Handelspaare.

  1. Für Terminbörsen:

Alte Definition: Funktion „exchange.GetOrders()“. Wenn sie ohne Angabe von Parametern aufgerufen wird, ruft sie alle nicht abgeschlossenen Aufträge des spezifischen Vertrags ab, der durch das aktuelle Handelspaar und den Vertragscode festgelegt wurde.

Nach der Anpassung und Änderung lautet die neue Definition: Funktion „exchange.GetOrders()“. Wenn sie ohne Angabe von Parametern aufgerufen wird, ruft sie alle nicht abgeschlossenen Aufträge im Dimensionsbereich ab, der durch das aktuell festgelegte Handelspaar und den Vertragscode bestimmt wird.

Beispielsweise ist das aktuelle Handelspaar BTC_USD und der Vertragscode ist „Quartal“. Rufen Sie zu dieser Zeit an:

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

Diese Funktion fordert die ausstehenden Auftragsdaten aller Coin-Margined-Futures-Kontrakte an.

4. Strukturelle Anpassung

Tickerstruktur

Dieses Update fügt der Tickerstruktur ein Symbolfeld hinzu, das die Marktinformationen des Produkts der aktuellen Tickerstruktur aufzeichnet. Das Format dieses Feldes istexchange.GetTicker()Das Symbolparameterformat der Funktion ist genau dasselbe.

Auftragsstruktur

Dieses Update fügt der Order-Struktur ein Symbolfeld hinzu. Das Format dieses Felds ist das gleiche wieexchange.GetTicker()Das Symbolparameterformat der Funktion ist genau dasselbe. Dieses Update ändert auch das ID-Feld der Bestellstruktur, um Produktinformationen und ursprüngliche Bestellinformationen im neuen Bestell-ID-Format aufzuzeichnen. sieheexchange.GetOrder()Auf die Beschreibung der Bestell-ID in der Funktion wird hier nicht nochmal eingegangen.

Stellenstruktur

Dieses Update fügt der Positionsstruktur ein Symbolfeld hinzu. Das Format dieses Felds ist das gleiche wieexchange.GetTicker()Das Symbolparameterformat der Funktion ist genau dasselbe.

Finanzierungsstruktur

Die Funktion GetFundings gibt ein Array von Finanzierungsstrukturen zurück.

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

5. Backtesting-System

Um den Bedürfnissen der Benutzer gerecht zu werden, wird dieses Upgrade zunächst mit dem realen Markt kompatibel sein und das Backtesting-System wird innerhalb einer Woche angepasst. Wenn einzelne Strategiecodes betroffen sind, folgen Sie bitte den Anweisungen in diesem Artikel, um Änderungen und Anpassungen vorzunehmen.

Gemäß dem Upgrade der API-Schnittstelle der Plattformstrategie wurden die API-Schnittstellen im Backtesting-System der Plattform synchron aktualisiert. Darüber hinaus wurde im Backtesting-System Unterstützung für Folgendes hinzugefügt:

  • Unterstützt mehr Backtesting-Daten zum Austausch.
  • Unterstützt Backtesting-Daten aller Arten von Börsen.
  • Gemischter Handel mit U-basierten, währungsbasierten Liefer- und unbefristeten Kontrakten.
  • Terminbörsenobjekte unterstützen das Wechseln von Handelspaaren während des Backtests.
  • Das Backtesting-System unterstützt zusätzlich neue Funktionen wie die GetTickers- und die GetMarkets-Funktion.

Ergänzende Updates

1. Felder „Equity“ und „UPnL“ zur Kontostruktur hinzugefügt

Memberfunktionen für TerminbörsenobjekteGetAccountZurückkehrenAccountDie Struktur wurde um Felder erweitert.

  • Equity Das Gesamtkapital der aktuellen Margin-Asset-Währung. Mit Ausnahme einiger Terminbörsen, die dieses Feld nicht unterstützen, unterstützen die meisten Börsen dieses Feld. Wird hauptsächlich verwendet, um Gewinn und Verlust der Kontomarge in Echtzeit zu berechnen.
  • UPnL Der nicht realisierte Gewinn und Verlust aller Positionen, die in der aktuellen Margin-Asset-Währung gehalten werden. Die meisten Terminbörsen unterstützen dieses Feld, einige wenige jedoch nicht.

2. Die Funktion SetMarginLevel erweitert die Unterstützung von Symbolparametern

Die Memberfunktion SetMarginLevel des Terminbörsenobjekts wurde um das Parametersymbol erweitert.

Testbeispiel:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // 当前交易对为ETH_USDT,合约代码为swap,设置杠杆值为10
    exchange.SetMarginLevel(10)
    
    // 直接指定交易对BTC_USDT,合约代码swap,设置杠杆值20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3. Fügen Sie das Feld CtValCcy zur Marktstruktur hinzu, die von der Funktion GetMarkets zurückgegeben wird

  • FelderCtValCcyNotieren Sie die Werteinheit eines Vertrags. Die Werteinheit eines Vertrags kann sein: BTC, USD, ETH usw.
  • FelderCtValNotieren Sie den Wert eines Kontrakts dieses Handelsprodukts an der Börse in Einheiten vonCtValCcyDie Währung des Felddatensatzes. Zum Beispiel:CtValbeträgt 0,01,CtValCcy„BTC“ bedeutet, dass ein Vertrag 0,01 BTC wert ist.