Die Ressourcen sind geladen. Beförderung...

Erfinder Quantitative Handelsplattform-API-Upgrade: Erhöhung der strategischen Design-Erfahrung

Schriftsteller:Die Erfinder quantifizieren - Kleine Träume, Erstellt: 2024-06-28 09:08:29, aktualisiert: 2024-11-01 10:08:12

[TOC]

img

Vorwort

Die Erfinder der Quantitative-Trading-Plattform haben sich nach neun Jahren technischer Inbetriebnahme mehrmals umgebaut, obwohl wir als Nutzer es vielleicht nicht bemerkt haben. In den letzten zwei Jahren wurden die Plattformen in Bezug auf die Benutzererfahrung erheblich optimiert und verbessert, einschließlich einer umfassenden Upgrade der Benutzeroberfläche, einer Vielzahl von häufig verwendeten Quantitative-Trading-Tools und der Hinzufügung von mehr Retweet-Daten-Unterstützung.

Um die Konstruktion von Strategien zu erleichtern, die Transaktionslogik zu klären und für Anfänger einfacher zu handhaben, wurde die API-Schnittstelle für die Strategien aktualisiert. Die neuen Funktionen können mit den neuesten Versionen der Administratoren aktiviert werden. Die Plattform ist weiterhin maximal kompatibel mit den Anrufen der alten Schnittstellen.

Lassen Sie uns in diesem Artikel einen Überblick darüber geben, welche Upgrades für die Interface verfügbar sind und welche Änderungen an den alten Strategien erforderlich sind, um die aktuelle API zu unterstützen.

1. Neue API-Schnittstelle

exchange.GetTickers函数

Eine solche aggregierte Markt-Interface ist unerlässlich, um Strategien leichter zu entwickeln und zu vermeiden, dass sich die Räder wiederholen.

Wenn eine Börse keine solche Schnittstelle hat (eine einzelne Börse), rufen Sieexchange.GetTickers()Ich habe das Gefühl, dass ich das nicht kann.

Die Funktion hat keine Parameter und liefert Echtzeit-Marktdaten für alle Arten von Anwendungen in der Anwendungs-Interface zurück.

exchange.GetTickers()Die Funktion istexchange.GetTicker()Eine vollständige Version der Funktion wird angefordert (siehe genau, die Unterscheidung zwischen den beiden Funktionsnamen ist nur ein einziger Komplex).

Wir testen die Umgebung mit OKX Live Simulation:

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

exchange.CreateOrder函数

Neueexchange.CreateOrder()Die Funktion ist ein Schwerpunkt des Upgrades.exchange.CreateOrder()Die größte Funktion der Funktion ist es, die Art und Richtung der Bestellung direkt in den Parametern der Funktion anzugeben. So hängt die Einstellung nicht mehr von den aktuellen Einstellungen des Systems ab.

In den Szenarien mit einer Vielzahl von Transaktionen reduziert sich die Designkomplexität in den Szenarien mit einer Reihe von Synchronisationen erheblich.exchange.CreateOrder()Die vier Parameter der Funktion sind:symbolsidepriceamount

Tests mit OKX Futures Simulator:

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 ist nur drei Mal.exchange.CreateOrder()Die Funktionsanrufe führen zu drei verschiedenen Futures-Orders, die in verschiedene Richtungen verlaufen.

exchange.GetHistoryOrders函数

Neueexchange.GetHistoryOrders()Eine Funktion, die verwendet wird, um historische Transaktionsorders einer bestimmten Art zu erhalten, die auch von der Exchange-Schnittstelle unterstützt werden muss.

Für die Suche nach historischen Aufträgen gibt es große Unterschiede in den Interfaces, die von den verschiedenen Börsen implementiert werden:

  • Einige unterstützen Split-Queries, andere nicht.
  • Einige Transaktionen haben keine Abfrage für alle Abfragefensterzeiten, d.h. keine Abfrage für Bestellungen über N Tage.
  • Die meisten Anbieter unterstützen eine genaue Uhrzeit, andere nicht.

Für die Verpackung dieser Art von Interfaces mit der größtmöglichen Kompatibilität ist in der Praxis darauf zu achten, ob sie den Bedürfnissen und Erwartungen der Strategie entsprechen.

Die Funktionsbeschreibung ist hier nicht mehr beschrieben. Sie können sich die Syntax-Handbuch in der API-Dokumentation ansehen:

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

Bei der Erprobung in einer realen Umgebung mit Binance Cash:

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

exchange.GetPositions函数

Die alte Version der Datenspeicherfunktion heißtexchange.GetPosition()In diesem Upgrade wurde eine neue Akquisitions-Holding-Funktion hinzugefügt, um die Funktionsnamen semantischer anzupassen:exchange.GetPositions()Und zwar mit GetPosition-Funktionen.

Beachten Sie, dass die beiden Funktionsnamen nur einen s-endenden Unterschied aufweisen, da GetPositions eher semantisch übereinstimmen.

exchange.GetPositions()Die Funktion kann in drei Formen aufgerufen werden:

  • exchange.GetPositions (WEB Wenn keine Parameter übertragen werden, wird die Datenbasis nach dem aktuellenDie Transaktion stimmt / VertragskodeDie Einstellung, die alle Sorten der aktuellen Dimension anfordert.

  • exchange.GetPositions ((ETH_USDT.swap) Bei der Angabe von Spezies-Informationen ("ETH_USDT.swap" ist ein Format, das von der FMZ-Plattform definiert wird) werden die Lagerdaten für die Spezies angefordert. Ein Beispiel:BTC_USD.swapETH_USDT.swapETH_USDT.quarterUnd so weiter. BTC_USD.swap: Eine dauerhafte Währung für BTC. ETH_USDT.swap: Ein dauerhaftes U-Bit-Kontrakt für ETH. ETH_USDC.swap: USDC-basierte dauerhafte Kontrakte für ETH. (Außer USDT können verschiedene Quote-Währungen angegeben werden, weiter unten) ETH_USDT.quarter: Der U-Bits-Quartals-Transaktionsanteil von ETH beträgt ca. BTC_USD.BTC-USD-201226-24250-C: Einheitliche Währungsoptionskontrakte für BTC.

  • exchange.GetPositions (siehe USDT.swap) Nach dem angegebenen Dimensionsbereich werden die Lagerdaten für alle Sorten angefordert. USDT.swap: U-Bit-Dauerhafte Vertragsschwerpunkt. USDT.futures: U-Bits Wechselkurs-Schnittbereich. USDC.swap: USDC-Standort für dauerhafte Verträge. (Außer USDT können verschiedene Quote-Währungen angegeben werden, weiter unten) USDC.futures: USDC-Standort-Austauschquote in etwa. USD.swap: Dauervertragsgrenze für Währungsinvestitionen. USD.futures: Umfang der Wechselkurse für die Währung. USDT.option:U-Bits-Option-Kontraktsumfang. USD.option: Umfang der Optionskontrakte für die Währung.

    Einige spezifische Abgrenzungen zwischen den Kontraktdimensionen der Börsen sind: USDT.futures_combo:Futures_Deribit ist ein Differenz-Portfolio-Kontrakt der Börse. USD.Futures_ff:Futures_Kraken ist ein Anbieter von Mixed-Back-Funds-Transaktionen. USD.swap_pf:Futures_Kraken ist ein Mixed-Security-Permanent-Kontrakt der Börse.

    Für Dimensionen, die von der Exchange API nicht unterstützt werden, wird ein Fehler beim Aufruf zurückgegeben.

Tests mit OKX Futures Simulator:

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 es kommtexchange.GetPositions()Die Parameter der Funktion sind:ETH_USDT.swapIn diesem Fall können Sie die Lagerdaten von ETH-U-Bit-Permanenten-Kontrakten abrufen.

Wenn es nicht gehtexchange.GetPositions()Die Parameter der Funktion ermöglichen es, alle U-Bit-Holdings von dauerhaften Aufträgen, die an der Börse online gestellt wurden, zu erhalten (da das aktuelle Handelspärchen BTC_USDT ist, der Vertrag ist ein Swap, entsprechend dem aktuellen Handelspärchen, der Anforderung an die Dimension des Vertrages).exchange.GetPositions("USDT.swap"), geben Sie einen Anforderungsbereich an.

exchange.GetFundings函数

Die neue GetFundings-Funktion erlaubt es, die Kapitalraten für dauerhafte Futures-Kontrakte zu erhalten. Die Funktion hat ein Parameter-Symbol. Die Funktion gibt eine Funding-Struktur zurück.

  • Geben Sie Symbolparameter an: Die Finanzierungs-Informationsstruktur der angegebenen Sorte (Funding-Array) wird zurückgegeben. Die Symbolparameter können in einem Bereich festgelegt werden, ähnlich wie die Symbolparameter der Funktion GetOrders/GetPositions.
  • Nicht angegebene Symbolparameter: Nach der Dimension des aktuellen Transaktionspaares, in dem sich der Vertragskode befindet, werden alle Daten der aktuellen Dimension zurückgegeben, wie z. B. die Funktion GetOrders/GetPositions.
  • Wenn eine Börse eine spezifische Sorte angeben muss, müssen Symbolparameter, also Codes für die spezifische Sorte, übermittelt werden, z. B.:BTC_USDT.swap│ Nicht übertragen von Parametern oder die Übertragung der Funktion der Reichweite gibt eine Fehlermeldung. Symbol-Parameter werden nicht unterstützt.

2. Upgrade der API-Schnittstelle

exchange.GetTicker函数

Funktionenexchange.GetTicker()Das Upgrade besteht hauptsächlich aus der Erweiterung der Symbol-Parameter. Die Funktion kann sich von den aktuellen Handelsparen lösen, die Art der Informationen, die der Vertragskode direkt nach den Parametern angegeben wird, anfordern und Marktdaten anfordern. Der Code-Schreibprozess wird vereinfacht.

ParametersymbolGegenstand der BörseexchangeEs gibt verschiedene Formate für Bargeld/Futures:

  • Gegenstand der Börse Das Format lautet:AAA_BBBDie Basiswährung wird von AAA angegeben, die Währung wird von BBB angegeben. Ein Beispiel: BTC_USDT ist ein Bargeld-Paar.
  • Gegenstand der Futures-Börse Das Format lautet:AAA_BBB.XXXAAA steht für die Basiswährung, BBB für die Quotewährung, und XXX für den Vertragscode, z. B. für den dauerhaften Vertragsswap. Beispiel: BTC_USDT.swap, ein dauerhaftes U-Bit-Kontrakt für BTC.

Tests in einer realen Umgebung mit 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
}

img

Die Anforderung einer Reihe von Markendaten für bestimmte Sorten wird einfacher.

exchange.GetDepth函数

Dies ist die gleiche Funktion wie bei GetTicker.exchange.GetDepth()Die Funktion hat auch die Symbol-Parameter hinzugefügt. Es ist möglich, die Sorte direkt bei der Anfrage von Tiefendaten anzugeben.

Tests in einer realen Umgebung mit 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"))
}

img

exchange.GetTrades函数

Dies ist die gleiche Funktion wie bei GetTicker.exchange.GetTrades()Die Funktion hat auch Symbol-Parameter hinzugefügt. Es ist möglich, die Sorte direkt bei der Anfrage von Markttransaktionsdaten anzugeben.

Tests in einer realen Umgebung mit 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) +  "`")
}

img

Das Upgrade ist ebenfalls kompatibel.exchange.Go()Die Funktion wird gleichzeitig von der Plattform-API aufgerufen, um Symbol-Parameter zur Spezifikation der Spezies zu übermitteln.

exchange.GetRecords函数

Die GetRecords-Funktion unterstützt nicht nur die Art der Informationen für die K-Strängendaten, die die Symbol-Parameter direkt für die Anfrage angeben. Die ursprüngliche Period-Parameter, die für die Angabe der K-Strängenzyklen verwendet werden, werden beibehalten. Ein Limit-Parameter wird hinzugefügt, um die gewünschte K-Strängengradlänge für die Anfrageperiode anzugeben.

exchange.GetRecords()Funktionen können aufgerufen werden:

  • exchange.GetRecords Bei der Anfrage der aktuellen Handelspaare/Kontraktcodes ohne Angabe von Parametern ist die K-Linien-Daten-Sorte die K-Linien-Zyklus, die bei der Strategie-Rückruf-Schnittstelle oder bei der Echtzeit gesetzt wird.
  • exchange.GetRecords ((60 * 15) Wenn nur die K-Linien-Zyklusparameter angegeben werden, werden die K-Linien-Daten der aktuellen Handelspaare/Kontraktcodes angefordert.
  • exchange.GetRecords (((BTC_USDT.swap) Wenn nur Sorteninformationen angegeben werden, werden die K-Leinendaten für die Sorte angefordert. Die K-Leinzeit ist die Standard-K-Leinzeit, die für die Strategie-Rückrufoberfläche oder die Festplatte festgelegt wird.
  • exchange.GetRecords ((( BTC_USDT.swap, 60 * 60)) Spezifizieren Sie die Sorteninformationen, spezifizieren Sie die spezifischen K-Linien-Zyklen und fordern Sie die K-Linien-Daten an.
  • exchange.GetRecords (((BTC_USDT.swap, 60, 1000) Spezifizieren Sie die Sorteninformationen, spezifizieren Sie die spezifischen K-Linienzyklen, beziehen Sie sich auf die K-Linienlänge, die Sie regelmäßig erhalten möchten, und fordern Sie die K-Liniendaten an. Beachten Sie, dass eine Abspaltungsanfrage (d. h. mehrere Anrufe an die K-Line-Schnittstelle der Börse) erzeugt wird, wenn die Limit-Parameter die maximale Länge überschreiten, die die Börse einmal angefordert hat.

Tests in einer realen Umgebung mit 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)
}

img

exchange.GetOrders函数

Die GetOrders-Funktion wurde ebenfalls hinzugefügt.symbolParameter, mit denen eine bestimmte Sorte angegeben werden kann, um unvollendete Bestellungen für diese Sorte zu abfragen; unterstützt auch das Abfragen von unvollendeten Bestellungen für alle Sorten im angegebenen Dimensionsbereich.

exchange.GetOrders()Die Funktion kann folgendermaßen aufgerufen werden:

  • exchange.GetOrders (siehe unten) Für Futures-Börsen: Wenn keine Parameter übertragen werden, wird der Wert nach dem aktuellen Wert angepasst.Die Transaktion stimmt / VertragskodeDie Einstellung, die alle unvollendeten Bestellungen ("Hanging List") für die gesamte Sorte im aktuellen Dimensionsbereich anfordert.
    Für Bargeldbörsen: Bei Nichtübermittlung von Parametern werden unvollendete Bestellungen für alle Bargeldvarianten angefordert.
  • exchange.GetOrders ((BTC_USDT.swap) oder exchange.GetOrders ((BTC_USDT) Für die Futures-Börse: exchange.GetOrders (BTC_USDT.swap) finden Sie alle ausstehenden Aufträge (Pending Orders) für USDT-Permanente-Kontrakte in BTC. Für die Bargeldbörse: exchange.GetOrders (BTC_USDT) suchen Sie nach allen unvollendeten Bestellungen (Pending Orders) für das Bargeldpaar BTC_USDT.
  • Nur für Futures-Börsen unterstützt exchange.GetOrders (USDT.swap) Spezifizieren Sie die Dimension der Anfrage für alle Sorten von ausstehenden Aufträgen (Pending List) Die Dimensionsabgrenzung stimmt mit der in der GetPositions-Funktion überein. Beispielsweise: exchange.GetOrders (USDT.swap) Anfordern von U für alle Varietäten des dauerhaften Vertragsbereichs (Pending Orders).

Tests mit OKX Futures Simulator:

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 übermittelt werden, werden unvollendete Bestellungen für alle Sorten des Dimensionsbereichs des aktuellen Handelspaares (BTC_USDT), des Vertragscodes (Swap) angefordert.
  • Angabe der ParameterETH_USDT.swapBei Parametern werden USDT-Standorte für dauerhafte Verträge ("Pending Orders") angefordert, bei denen ETH benötigt wird.
  • String übertragen"USDT.swap"Die USDT-Funktion wird von den US-amerikanischen Behörden eingesetzt, um alle nicht abgeschlossenen Bestellungen ("Pending Orders") zu beantragen, für die USDT einen permanenten Vertrag hat.

exchange.GetPosition函数

Es ist weiterhin kompatibel mit den alten Funktionsnamen für die Speicherung und wurde auch ein Symbol-Parameter hinzugefügt, mit dem die Art der Informationen für die Speicherdaten, die speziell angefordert werden, angegeben werden können.exchange.GetPositions()Ich bin der Meinung, dass das nicht wahr ist.

exchange.IO函数

Fürexchange.IO("api", ...)Funktionsanrufe, die für alle Austauschobjekte aktualisiert wurden, unterstützen die direkte Übermittlung der vollständigen Anfrageadresse.

Zum Beispiel, wenn Sie die OKX-Schnittstelle aufrufen möchten:

GEThttps://www.okx.com/api/v5/Konto/maximale Auszahlungszeit: BTC

Unterstützt die direkte Eingabe von Adressenhttps://www.okx.com, ohne dass man die Basisadresse wechseln muss, um die IO-Funktion wieder aufzurufen.

Tests mit OKX Futures Simulator:

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 der API-Schnittstellen

exchange.GetOrder函数

Das Ergebnis war ein starker Aufschwung.exchange.GetOrder(id)Parameter der FunktionidDie,id-Parameter wurden von der ursprünglichen Börsen-Order-id in ein Stringformat geändert, das die Handelsart enthält. Alle gepackten Orders auf der FMZ-Plattform werden in diesem Format ausgeführt.

Zum Beispiel:

  • Die ursprüngliche Börse-Order-Id, die in einem Austausch-Auftrag definiert wird, ist:123456Vor diesem Upgrade sollte die GetOrder-Funktion mit der Order-Id ausgeliefert werden, die123456
  • Der Produktcode, den der Name der Börse in einem Börsengeschäft definiert:BTC-USDTDas ist nicht wahr. Beachten Sie, dass hier die Code für die Handelssorten genannt werden, die von den Börsen benannt werden, und nicht die Paare, die von der FMZ-Plattform definiert werden.

Ich bin der Ansicht, dass es eine gute Idee ist.exchange.GetOrder(id)Das Format der Parameter-id, die die Funktion übermitteln soll, wird angepasst:BTC-USDT,123456

  • Ich möchte erst einmal erklären, warum ich es so gestaltet habe: Da die CreateOrder-Funktion in diesem Fall aktualisiert wurde, um die Sorte des Auftrags direkt anzugeben (die Sorte des Auftrags und das derzeit eingestellte Transaktionspaar, der Vertragskode kann unterschiedlich sein), kann die Order-Id nicht verwendet werden, wenn die zurückgegebene Order-Id keine Sorteninformationen enthält.

  • Wie lässt sich dieser Einfluss kombinieren: Wenn die Auftragserstellung mit der exchange.IO-Funktion durchgeführt wird, die die Auftragserstellungsschnittstelle der Börse direkt aufruft, werden im Allgemeinen die ursprünglichen Symbole der Börse (Variantecode) und die ursprüngliche Auftragsid zurückgegeben. Wenn die beiden mit einem Komma zusammengefügt werden, entspricht die Auftragsid der FMZ-Plattform. Auch wenn die Unterordnungsoberfläche, die mit der FMZ-Plattform verpackt ist, verwendet wird, kann der Unterordnungscode und die Kommas entfernt werden, wenn die ursprüngliche Id der Bestellung verwendet werden muss, da der Anfang der OrderId der Transaktionsvarietätcode ist.

exchange.CancelOrder函数

Die Erweiterungexchange.CancelOrder()Einfluss der Funktion aufexchange.GetOrder()Die Funktion ist die gleiche.

exchange.Buy函数

Die Erweiterungexchange.Buy()Einfluss der Funktion aufexchange.GetOrder()Die Funktion ist die gleiche.exchange.Buy()Die Funktion liefert eine neue Struktur an, z. B. die ID, die beim Auftragen von Futures auf der OKX-Börse zurückgegeben wird:LTC-USDT-SWAP,1578360858053058560

exchange.Sell函数

Die Erweiterungexchange.Sell()Einfluss der Funktion aufexchange.GetOrder()Die Funktion ist die gleiche.exchange.Sell()Die Funktion liefert eine neue Struktur an, z. B. die ID, die beim Auftragen von Futures auf der OKX-Börse zurückgegeben wird:ETH-USDT-SWAP,1578360832820125696

exchange.GetPosition函数

Nur Futures-Exchange-Objekte unterstützen diese Funktion, die für die Akquisition von Lagerdaten die Funktion exchange.GetPosition ((() und die neue Exchange.GetPositions ((() benannt sind.

Die alte Definition: exchange.GetPosition ((() Funktion, die ohne Angabe von Parametern aufgerufen wird, erhält die Haltedaten des aktuellen Handelspares, der spezifischen Vertrag, der in der Kontraktcode-Einstellung festgelegt ist.

Anpassung, Änderung, Neudefinition: exchange.GetPosition (()) Funktion, die ohne Angabe von Parametern aufgerufen wird, um alle Sorten der aktuell eingestellten Transaktionspaare, die in der Dimensionsspanne des Vertragscodes festgelegt sind, zu erhalten.

Zum Beispiel wird das aktuelle Handelspaar BTC_USDT und der Vertragskode swap genannt.

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

Die Funktion bittet um die Lagerdaten für U-Bit-Permanente-Kontrakte aller Währungen.

exchange.GetOrders函数

1. Für die Börse:

Die alte Definition: exchange.GetOrders() Funktion, die keine Parameter angegeben hat und bei einem Aufruf alle noch nicht abgeschlossenen Aufträge des aktuellen Transaktionspaares erhält.

Anpassung, Änderung, Neudefinition: exchange.GetOrders() Funktion, bei der keine Parameter angegeben werden.

2. Für Futures-Börsen:

Die alte Definition: exchange.GetOrders() Funktion, die keine Parameter angegeben hat, wird aufgerufen, um alle noch nicht abgeschlossenen Aufträge für die aktuellen Transaktionspaare und die spezifischen Kontrakte zu erhalten, die in der Kontraktcode-Einstellung festgelegt wurden.

Die Funktion "Exchange.GetOrders" wurde geändert, um alle noch nicht abgeschlossenen Aufträge ohne Angabe von Parametern abzurufen.

Zum Beispiel ist das aktuelle Handelspaar BTC_USD und der Vertragskode ist quarter.

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

Die Funktion bittet um Daten zu unvollendeten Bestellungen, die den Wechselkurs für alle Währungen angeben.

4. Anpassung der Struktur

Ticker-Struktur

Die Aktualisierung des Ticker-Strukturs ergänzt das Symbol-Feld, das Marktinformationen über die Art der aktuellen Ticker-Struktur aufzeichnet.exchange.GetTicker()Die Symbolparameter der Funktion sind vollständig übereinstimmend.

Ordnungsstrukturen

Dieses Update für den Order-Strukturen fügt ein Symbol-Feld hinzu, das in der Form vonexchange.GetTicker()Die Symbol-Parameterformate der Funktion sind vollständig übereinstimmend. Das Update ändert auch das Id-Feld des Order-Strukturs, um Sorteninformationen, ursprüngliche Bestellinformationen und andere Informationen in einem neuen Order-Id-Format zu erfassen.exchange.GetOrder()Eine Beschreibung der Order-Id in der Funktion wird hier nicht mehr beschrieben.

Positionsstrukturen

Das Update erweiterte die Position-Struktur um ein Symbol-Feld.exchange.GetTicker()Die Symbolparameter der Funktion sind vollständig übereinstimmend.

Finanzierung Strukturen

Die GetFundings-Funktion gibt eine Funding-Struktursammlung zurück.

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

5. Rückmessungssystem

Das Upgrade wird erst für die Festplattenkompatibilität durchgeführt, um den Bedürfnissen der Benutzer gerecht zu werden, und das Retesting-System wird innerhalb einer Woche vollständig angepasst sein. Wenn einzelne Politikcodes betroffen sind, wenden Sie sich an diesen Artikel.

Im Zuge der Plattformstrategie API-Interface-Upgrade wurden alle API-Interfaces in den Retest-Systemen der Plattform synchronisiert und aktualisiert.

  • Es wird auch eine neue Version von Bitcoin unterstützt, die mehr Datenaustausch-Retests unterstützt.
  • Es unterstützt eine Vielzahl von Re-Test-Daten für die Börse.
  • Die U-Bits, die Bit-Delivery, die Perpetual Contract-Mixed-Trading.
  • Im Berichtszeitraum unterstützten die Objektbörsen die Umschaltpaare.
  • Das Retesting-System unterstützt neue Funktionen wie GetTickers, GetMarkets und andere.

Ergänzende Aktualisierung

1, Account-Struktur, neue Felder Equity, UPnL

Mitgliederfunktionen für Futures-ObjekteGetAccountDie RückkehrAccountDie Struktur wurde erweitert.

  • Gleichheit Derzeit unterstützen die meisten, mit Ausnahme von sehr speziellen Futures-Börsen, den gesamten Anspruch auf die Währung der Sicherungswerte.
  • UPnL Alle derzeit gehaltenen Positionen in Sicherungsgeld-Währungen sind unerfüllte Gewinne und Verluste, mit Ausnahme von sehr speziellen Futures-Börsen, die nicht unterstützen, die meisten unterstützen das Feld.

2. SetMarginLevel-Funktion wird von Symbol-Parametern unterstützt

Die SetMarginLevel-Mitgliedsfunktion für Futures-Exchange-Objekte wurde mit dem Hinzufügen des Parametersymbols verbessert.

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. Die Funktion GetMarkets ergänzt die Marktstruktur des CtValCcy-Feldes.

  • FeldCtValCcyDie Wertmenge eines Kontracts wird erfasst, wobei die Wertmenge eines Kontracts BTC, USD, ETH usw. sein kann.
  • FeldCtValDer Wert eines auf der Börse verhandelten Vertrags der betreffenden Handelsart wird inCtValCcyDie Währung, in der das Feld aufgezeichnet wird.CtValDas ist 0.01,CtValCcyAls "BTC" bezeichnet man einen Vertrag mit einem Wert von 0,01 BTC.

Mehr

Was ist los?Ich frage mich, was mit meinem neu gestarteten Roboter passiert ist, die Rücksendung ID mit den Namen der Transaktionen, die ich lange recherchiert habe, und die Log-Informationen nach der Bestellung, die jetzt nicht angezeigt werden, auch wegen der Aktualisierung durch den Administrator?

Das ist Zhang./upload/asset/2ffc0f961149326b78aed.png Kann ich fragen, ob das Problem durch dieses Interface-Update verursacht wurde?

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

NansegVorreihengrundbild

Was ist los?Gut.

Die Erfinder quantifizieren - Kleine TräumeDas ist eine gute Idee, aber es ist nicht einfach, es zu versuchen.

Was ist los?Ja, extMsg1, extMsg2 ist nicht angezeigt.

Die Erfinder quantifizieren - Kleine TräumeHallo, Order-ID ist eine notwendige Änderung, da die Angabe der Sorte direkt in die Bestellung aufgerüstet wurde. Die Bestell-ID muss Sorteninformationen enthalten, sonst kann nicht festgestellt werden, welche Sorte die Bestellung ist, und kann nicht bei der Widerrufsanforderung aufgerufen werden. Sie haben gesagt, dass die Nachschlagsanzeige nicht angezeigt wird, was bedeutet: exchange.Buy ((preis, Menge, extMsg1, extMsg2) bei einem Aufruf wird extMsg1, extMsg2 nicht im Log angezeigt?

Die Erfinder quantifizieren - Kleine TräumeHallo, hier sind die aktuellen Börsen-Einstellungen, Handelspare und Kontrakt-Code-Einstellungen.

Der Erfinder quantifiziertBitte senden Sie Testcode und Konfigurationsdetails an die Bauplanung, und die Ingenieure werden Ihnen gleich zurückschreiben.

Die Erfinder quantifizieren - Kleine TräumeEs gibt einige Unterschiede zwischen den Bedingungen der Börsen, wie z.B. ein Einheitsmechanismus, und es gibt unterschiedliche Grade der Unterstützung, die wir untersuchen müssen, um zu sehen, ob dies möglich ist.

Die Erfinder quantifizieren - Kleine TräumeIch danke für die Unterstützung, wenn Sie Probleme mit der Nutzung haben, können Sie mir eine Anfrage oder einen Kommentar schreiben.