Type/to search
8
Follow
1364
Followers
Detaillierte Erläuterung des API-Upgrades der Inventor Quantitative Trading Platform: Verbesserung der Strategiedesignerfahrung
Original
Created 2024-06-28 09:08:29  Updated 2024-11-01 10:08:12
 12
 2568

img

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:

javascript
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

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:

javascript
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

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:

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

img

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:

javascript
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

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:

javascript
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

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:

javascript
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

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:

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

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

img

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:

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

javascript
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

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:

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

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

javascript
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.
Comment
All comments (12)

    我说我新开的机器人怎么回事,返回ID还带交易对名称,研究了好久,还有下单后缀的log信息现在不显示了,也是因为托管者更新的缘故吗?

    2 years ago

    您好,订单ID这个是迫不得已的改动,因为升级了直接指定品种下单,订单ID中就必须包含品种信息,否则无法确定这个订单是哪个品种的,在撤单的时候无法调用(因为大多数交易所撤单的时候需要指定品种,并且指定ID)。
    您说的下单后缀信息不显示,是指:exchange.Buy(price, amount, extMsg1, extMsg2)调用时,extMsg1, extMsg2 不在日志上显示吗?

    2 years ago

    对的,extMsg1, extMsg2不显示了。

    2 years ago

    好的,这边测试下看下。感谢您提出问题。这边会尽快处理。

    2 years ago

    好UwU

    2 years ago

    img

    请问这个问题是这次接口更新导致的吗?

    2 years ago

    您好,您发下当前的交易所设置、交易对、合约代码设置。

    2 years ago

    请详细发送测试代码与配置到工单,工程师会在第一时间回复您

    2 years ago

    希望exchange.Buy函数能增加开止损单的功能。。

    2 years ago

    交易所的条件单机制等差别有些大,支持程度各不相同,这个这边调研下看是否可行。

    2 years ago

    前排围观

    2 years ago

    感谢支持,如果有使用问题,发工单或留言都可以。

    2 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)