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-07-24 12:00:40

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

Das Grammatikhandbuch:https://www.fmz.com/syntax-guideBenutzerhandbuch:https://www.fmz.com/user-guide

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-Semantik besser zu passen:exchange.GetPositions()Und zwar mit GetPosition-Funktionen.

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

  • exchange.GetPositions (WEB Wenn keine Parameter übermittelt werden, werden die Lagerdaten gemäß der aktuellen Paare-/Kontrakt-Code-Einstellung angefordert.
  • 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.
  • exchange.GetPositions (("") Bitte alle Lagerdaten der aktuellen Dimensionen, zu denen die Exchange-Holding-Interface zugänglich ist.

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

    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.

img

Wenn es kommtexchange.GetPositions()Die Parameter der Funktion sind leere Strings.""Wenn Sie die Daten von allen U-Bits-Kontrakten im Lager haben, ist das nicht sehr praktisch.

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 die Sorten direkt angezeigt werden können, die zurzeit nicht ausgefüllt sind; Unterstützung für die Abfrage aller Sorten; Kompatibilität mit den ursprünglichen Aufrufen.

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

  • exchange.GetOrders (siehe unten) Erforsche alle noch nicht abgeschlossenen Bestellungen mit dem aktuellen Handelspare/Kontraktcode.
  • exchange.GetOrders ((( BTC_USDT.swap) Erkundigen Sie sich nach allen nicht abgeschlossenen Bestellungen für USDT-Lebenskontrakte von BTC.
  • exchange.GetOrders (siehe unten) Suchen Sie alle noch nicht abgeschlossenen Bestellungen in der aktuellen Dimensionsabteilung der Börse ("Dimensionsabteilung nach der API der Börse").

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", ""]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }

        tbls.push(tbl)
    }
    
    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

Wenn keine Parameter übermittelt werden, werden standardmäßig alle noch nicht abgeschlossenen Hängeschilder für das aktuelle BTC_USDT-Paar und Swap-Permanente-Kontrakte angefordert.

img

Angabe der ParameterETH_USDT.swapBei der Anfrage ETH_USDT werden alle unvollendeten Pending Lists für dauerhafte Verträge angezeigt.

img

Einladen eines leeren Strings""Die US-amerikanische Regierung hat eine Reihe von Anfragen an die US-amerikanische Regierung gestellt, um alle USDT-Standortverträge zu beantragen.

升级exchange.GetPosition函数

Es ist weiterhin kompatibel mit den alten Speicher-Erfassung-Funktion-Namen, und es wurde auch ein Symbol-Parameter hinzugefügt, um die Sorteninformationen für die Speicherdaten zu spezifizieren, die speziell angefordert werden. Funktionsanwendungen undexchange.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 umgewandelt, das eine Handelsart enthält. Die Bestell-ID für alle auf der FMZ Plattform verpackten Bestellungen ist in diesem Format.

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

4. Anpassung der Struktur

Ticker-Struktur

Die Aktualisierung des Ticker-Strukturs ergänzt das Symbol-Feld, das Marktinformationen über die Art der aktuellen Ticker-Strukturen erfasst. Das Feld ist in Form vonexchange.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 Symbolparameter der Funktion sind in vollständigem Einklang. Das Update ändert auch das Id-Feld der Order-Struktur, um Sorteninformationen, ursprüngliche Bestellinformationen und Referenzen 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.

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.

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

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.