Kryptowährungsquantitative Handelsstrategie Austauschkonfiguration

Schriftsteller:Gutes, Erstellt: 2019-09-16 14:55:26, Aktualisiert: 2023-11-07 20:50:11

img

Wenn ein Anfänger eine quantitative Kryptowährungs-Handelsstrategie entwirft, gibt es oft verschiedene Funktionsanforderungen. Unabhängig von den Programmiersprachen und Plattformen werden sie alle auf verschiedene Designanforderungen stoßen. Zum Beispiel sind manchmal mehrere Handelsvarietäten der Rotation erforderlich, manchmal ist Multi-Plattform-Hedging erforderlich, und manchmal müssen verschiedene Handelsvarietäten gleichzeitig sein. Lassen Sie uns einige der Entwurferfahrungen bei der Implementierung der Strategie-Wirbelanforderungen teilen.

Die Lernplattform nutzt weiterhin die FMZ Quant Handelsplattform (https://www.fmz.comDer Markt wird als Kryptowährungsmarkt ausgewählt.

Gestaltung einer Multi-Kryptowährungsstrategie

Die meisten dieser Nachfrage-Situationen sind auf Multi-Kryptowährungs-Trend- und Gitterstrategien vorbereitet, die mit verschiedenen Handelsiterationsmethoden auf dem Markt ausgeführt werden müssen.

Normalerweise so konzipiert:

function Process (symbol) {
     exchange.IO("currency", symbol)
     var ticker = _C(exchange.GetTicker)
     Log("has switched trading pairs, processing trading pairs according to strategy logic:", symbol, "quotes: ", ticker)
     // ...
     // ..
     // .
}

function main(){
     var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
     while (true) {
         for (var i = 0 ; i < symbols.length; i++) {
             Process(symbols[i])
             Sleep(500)
         }
     }
}

Wir konfigurieren den Roboter:

img

img

Es kann gesehen werden, dass dies erkennt, dass ein Austauschobjekt auf dem Roboter konfiguriert wird, und das Handelspaar wird gewechselt; der Markt verschiedener Handelspaare wird erhalten, und der Multi-Trading-Variety-Markt wird ausgeführt; und es wird unter einer Strategie-Logik ausgeführt.

Es kann gesehen werden, dass die drei Handelspare, die wir definieren: BTC_USDT, LTC_USDT, ETH_USDT, in der Schleife, iterativ die Marktquote erhalten, und nachdem sie die Informationen erhalten haben, kann sie den Markt speziell erkennen und die von der Strategie entworfene Handelslogik auslösen.

Einige Leser mögen fragen: Ich mag es nicht, Handelspare zu wechseln, es fühlt sich ein wenig schwierig an, und die Strategielogik ist nicht klar.

Es gibt in der Tat andere Gestaltungsmöglichkeiten, die wir im Folgenden vorstellen werden.

Konfiguration mehrerer Austauschobjekte für den Roboter auf demselben Austauschkonto

Die Marktdaten verschiedener Handelspare werden über mehrere Austauschobjekte ermittelt und in der Iterativstrategie-Logik ausgeführt.

Zum Beispiel konfigurieren Sie den Roboter, indem Sie drei Tauschobjekte für den Roboter konfigurieren. Die Handelspare sind auf BTC_USDT, LTC_USDT und ETH_USDT festgelegt.

img

Der Name ist OKEX Spot V3 Test Exchange-Objekt, auf der Dashboard-Seite, der Exchange-Konfigurationsseite:

img

Alles ist erledigt.

Wir haben diesen Code ein wenig verändert, denn dieses Mal haben wir dem Roboter mehrere Austauschobjekte hinzugefügt, die die Austauschobjekte des Handelspares BTC_USDT, LTC_USDT, ETH_USDT sind.

function Process (e) {
    var ticker = _C(e.GetTicker)
    Log("exchange", e.GetName(), "Process trading pairs according to strategy logic:", e.GetCurrency(), "Quotes:", ticker)
    // ...
    // ..
    // .
}  

function main(){
    while (true) {
        for (var i = 0 ; i < exchanges.length; i++) {
            Process(exchanges[i])
            Sleep(500)
        }
    }
}

Führen Sie den Roboter an:

img

Das Beispiel, das wir oben beschrieben haben, ob das Wechseln von Handelsparen oder das Hinzufügen eines Handelsobjekts für mehrere verschiedene Handelspare eines Konfigurationskontos.

Also, wie benutzt man mehrere Börsenkonten in einer Strategie?

Strategie für die Verwendung mehrerer Wechselkonten

Einige Strategien, wie beispielsweise die marktübergreifende Sicherung von mehreren Börsen, Strategien für mehrere Konten innerhalb einer einzigen Börse.

  • Konfiguration mehrerer Börsen mit verschiedenen Börsen

img

Zum Beispiel haben wir auf der Dashboard -> Exchange -> Hinzufügen von Exchange-Seite 2 Börsen konfiguriert.

Wir können auf die Vermögensinformationen der Konten zugreifen, die von diesen beiden Börsen in der Strategie konfiguriert wurden.

img

function main(){
     Log(exchanges[0].GetAccount()) // Print the account asset information of the first exchange object.
     Log(exchanges[1].GetAccount()) // ... Print the asset information of the Bit-Z exchange
}

Natürlich kann ich auch eine zweite und dritte Konto-Austausch-Konfiguration zu einem Austausch hinzufügen.

  • Mehrfache Austauschkonfiguration mit demselben Austausch.

Zum Beispiel fügen wir ein weiteres Konto für Huobi Futures hinzu.

img

Wie Sie sehen können, konfiguriert dies die Konten der beiden Huobi Futures-Börsen.

img

Wenn die Strategie erstellt wird, erscheint ein Huobi Futures Exchange-Objekt in der Option Modifizieren der Konfiguration des Robot zur Auswahl.

img

So können beispielsweise zwei Konten zuerst verkaufen und dann mit der typischen Netzstrategie kaufen (nach oben) oder zuerst kaufen und dann verkaufen (nach unten).

Durch die beiden obigen Beispiele

Hier ist der Unterschied zwischen der Konfiguration mehrerer Austauschobjekte auf dem Roboter und der Konfiguration mehrerer Austauschobjekte für das gleiche Austauschkonto für den Roboter:

Dieses überwältigende und oben erwähnte Beispiel von Der gleiche Austauschkonto hat mehrere Austauschobjekte für den Roboter ist etwas ähnlich, aber es gibt Unterschiede.

Der Unterschied besteht darin, dass das obige Beispiel eine Austauschkonfiguration ist, d. h.:

img

Wenn der Roboter das Austauschobjekt konfiguriert, verwendet er immer:

img

Diese Konfiguration.

Es ist nur, dass, wenn Sie ein Austauschobjekt hinzufügen, die Handelspaar-Einstellungen anders sind.

Wenn die Funktion GetAccount aufgerufen wird, wird immer auf die Anlageninformationen desselben Kontos zugegriffen.

jedoch:

img

Die beiden so konfigurierten Huobi-Futures-Austauschobjekte stellen zwar alle Huobi-Futures dar, stellen jedoch unterschiedliche Austauschkonten dar.

  • Die Verwendung der Austauschkonfiguration erleichtert die Gestaltung einer Kryptowährungs-Futures-Strategie.

Manchmal müssen in der Strategie der Kryptowährungskontraktsicherung, um die flüchtigen Handelsmöglichkeiten zu nutzen, viele Szenarien gleichzeitig platziert werden.exchange.GoEs gibt ein Problem mit der Synchronisation, nicht sehr schnell. und das Design des Switch-Vertrags macht auch die Logik nicht so einfach. gibt es einen besseren Weg?

Natürlich gibt es, wir können zwei Austauschobjekte zum Roboter hinzufügen, indem wir die Konfigurieren mehrere Austauschobjekte für den Roboter im gleichen Austauschkonto folgen.

img

Verwenden Sie dann diese Austauschkonfiguration, um ein anderes Austauschobjekt hinzuzufügen.

Es wird eine Anforderung angezeigt!

img

Bei einer Austauschkontokonfiguration können keine Austauschobjekte derselben Währung oder desselben Handelspaares hinzugefügt werden.

Was soll ich tun? Es scheint, als könne der Strategie-Roboter nicht zwei Austauschobjekte verwenden, und das Austauschobjekt ist an eine Austauschkontonummer gebunden?

Es gibt noch einen Weg!

Gehen wir zu Dashboard -> Exchange und fügen dann eine OKEX Futures Exchange Konfiguration hinzu.

img

Klicken Sie auf Speichern.

img

Auf diese Weise haben wir zwei Austauschkonfigurationen, aber die gleiche API KEY Konfigurationsinformationen verwendet werden.

img

Welche Vorteile hat das?

Wenn Sie eine Strategie schreiben, wird das Design sehr einfach sein!

function main(){
    exchanges[0].SetContractType("quarter") // Set the first added exchange object. The current contract is a quarterly contract.
    exchanges[1].SetContractType("this_week") // Set the second added exchange object, the current contract is the current week contract
    
    while (true) {
        var beginTime = new Date().getTime() // Record the timestamp from which this time the market quote was taken.
        var rA = exchanges[0].Go("GetTicker") // Create a concurrent thread to get the first exchange object, which is the market data for the quarterly contract.
        var rB = exchanges[1].Go("GetTicker") // Create a concurrent thread to get the second exchange object, which is the market data for the weekly contract.
        
        var tickerA = rA.wait() // The two threads executing each other perform their own tasks, waiting to get the data. When A waits, the B task is also executing.
        var tickerB = rB.wait() // So it seems to be sequential execution, actually at the bottom of the concurrency. Only when you get the order is to get A first, and get B.
        var endTime = new Date().getTime() // Record the timestamp at the end of the two contract quotes.
        
        if (tickerA && tickerB) { // If there is no problem with the data obtained, execute the following logic.
            var diff = tickerA.Last - tickerB.Last // calculate the difference
            $.PlotLine("diff", diff) // Use the line drawing library to plot the difference on the chart.
            if (diff > 500) { // If the spread is greater than 500, hedge arbitrage (of course, the difference of 500 is relatively large, rarely seen.)
                // Hedging
                rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // Concurrent threads create a selling order under the quarterly contract
                rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // Concurrent thread create a buying order under the weekly contract
                
                var idA = rA.wait() // Waiting for the return of placing order results, returning the order ID
                var idB = rB.wait() // ...
            }
            
            // ...
        }
        
        LogStatus(_D(), "Concurrently get two contract quotes taking time:", endTime - beginTime, "millisecond.") // Shows the time on the status bar to know that the program is executing.
        Sleep(500)
    }

Ist diese Konstruktionsstrategie viel einfacher und klarer?

Wirkliche Marktoperation:

img

Wie Sie sehen können, dauert es nur etwa 50 Millisekunden, um den Preis von zwei Verträgen jedes Mal zu erhalten.


Verwandt

Mehr