Visualisierungsmodul zum Aufbau einer Handelsstrategie - Fortgeschrittenes Verständnis

Schriftsteller:Lydia., Erstellt: 2022-12-13 14:11:36, Aktualisiert: 2023-09-20 09:53:59

img

Visualisierungsmodul zum Aufbau einer Handelsstrategie - Fortgeschrittenes Verständnis

Wir haben das Visualisierungsmodul zum Erstellen von Handelsstrategien gelernt - Erste Bekanntschaft, und wir haben ein konzeptionelles Verständnis für visuelles Modul-Bauen und Spleißen, Als nächstes ist es leicht, andere Module zu erlernen. Es ist möglich, einige komplexere Funktionen zusammenzuführen.

Modul der Handelskategorie

In der vorherigen Lern- und Testphase wurden wir mehreren Handelskategorie-Modulen ausgesetzt. Zum Beispiel: Exchange Get Ticker Modul Exchange Get OHLC Modul Ich...

Diese werden hier nicht wiederholt.

1. Erhalten Sie die Anzahl der Austausch

img

Bei der Erstellung von Strategien für den Einsatz von Roboterhandel können Sie mehr als ein Tauschobjekt hinzufügen, z. B. Hedging-Strategien. Oder Sie müssen die Börse durchqueren (durchqueren bedeutet, die Börse ein für ein zu besuchen), um auf den Markt zu gelangen. Hier kommt das Modul zur Erfassung der Anzahl der Austauschstellen ins Spiel.

Wir können die Anzahl der aktuell konfigurierten Börsen in einer einfachen Struktur drucken:

img

Tatsächlich ist es, als würde man einen solchen JavaScript-Strategie-Code anrufen:

function main () {
    Log(exchanges.length)
}

Werfen wir einen Blick auf die laufenden Ergebnisse dieses kombinierten Moduls:

img img img

Wir können sehen, dass wir drei Exchange-Objekte hinzugefügt haben, die drei verschiedene Exchange-Konten darstellen, und das Ausgangsresultat des Backtest-Logs ist 3.

2. Holen Sie sich die Namen der Börsen

img

Wenn drei Exchange-Objekte hinzugefügt werden, wird im Dropdown-Box drei Optionen angezeigt. Lernen Sie ein Schleifmodul im Schleiftyp im Voraus.

img

Lernen Sie im Voraus ein Zustandsbeurteilungsmodul:

img

Beurteilungsbedingungen können wie folgt geschrieben werden:

img

Wir benutzen das Loop-Modul, um die hinzugefügten Austauschnamen zu durchqueren. Wir verwenden das Condition Judgement Modul, um zu beurteilen, ob die aktuelle Schleifenzahl dem Namen des zu druckenden Austauschs entspricht.

img

Ergebnisse des Backtestbetriebs:

img

Wie JavaScript-Strategie-Code:

function main () {
    for (var i = 1 ; i <= exchanges.length ; i++) {
        if (i == 1) {
            Log(exchanges[0].GetName())
        } else if (i == 2) {
            Log(exchanges[1].GetName())
        } else {
            Log(exchanges[2].GetName())
        }
    }
}

3. Holen Sie sich das aktuelle Handelspar der Börse

img

Ein einfaches Beispiel ist, das Handelspaar des derzeit eingestellten ersten Austauschobjekts zu erhalten und es der Textvariable zuzuordnen (die in der Variablenkategorie im Voraus erstellt wurde).

img

Ergebnisse der Backtests:

img img img

Wenn Sie JavaScript-Strategiecode aufrufen:

function main () {
    var text = exchange.GetCurrency()
    Log(text)
}

4. Bestellmodul

img

Dieses Modul ist sehr wichtig für den Auftragsbetrieb. Die erste Tenon (konkave) Position ist mit einer Preisvariable eingebettet, die zur Angabe des Auftragspreises verwendet wird. Die zweite Spitze (konkave) Position ist mit der Bestellmenge-Variablen eingebettet, die zur Angabe der Bestellmenge verwendet wird.

Zum Beispiel fügen wir ein Beispiel für die Platzierung einer Bestellung zum Hinzufügen eines gleitenden Preises von 10 Yuan auf der Grundlage des aktuellsten Preises der aktuellen Ticketmarktdaten mit der Bestellmenge auf 0,1 Münzen zusammen und drucken die Order-ID.

img

Ergebnisse des Backtestbetriebs:

img

Wie der folgende JavaScript-Strategie-Code:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
    Log(id)
}

5. Erhalten Sie ausstehende Aufträge des aktuellen Handelspares Modul

img

Dieses Modul gibt alle ausstehenden Aufträge im unvollendeten Status des aktuellen Handelspares zurück. Es gibt eine Listenstruktur (Array) zurück, die vom Listenmodul verarbeitet werden kann (Transversaloperation usw.). Zum Beispiel haben wir das obige Beispiel-Bestellmodul[4] leicht modifiziert und den Preis von 10 Yuan, der beim Auftragen hinzugefügt wurde, auf minus 10 Yuan geändert. Der Auftrag wird nicht sofort geschlossen, sondern in der Tiefe der Transaktion platziert (d.h. kaufen Sie einen, kaufen Sie zwei, kaufen Sie ein bestimmtes Niveau in N), auf diese Weise wird der Auftrag im Zustand der ausstehenden Aufträge sein, die darauf warten, ausgefüllt zu werden. Dann verwenden wir das Modul Get pending orders of the current trading pair, um die Liste der in PENDING-Status befindlichen Orders zu erhalten. Um die Auswirkungen auf die endgültige Beobachtung des Backtests durch die Auftragsvollstreckung auf dem nachfolgenden Markt zu vermeiden, drucken wir nach Ausführung des Moduls Get pending orders of the current trading pair die Orderliste aus und verwenden das Modul Throw exception um das Programm sofort zu stoppen.

img

Die Rückprüfung zeigt, dass:

img

Der Preis der Bestellung war 10 Yuan niedriger als der letzte Preis zu diesem Zeitpunkt, daher wird er nicht sofort ausgeführt. Dann holen Sie sich die Bestellung im Status der ausstehenden Transaktion und drucken Sie sie aus. Schließlich wird eine Ausnahme geworfen, um das Programm zu stoppen.

Das gesamte zusammengestellte Modul ist wie ein Aufruf an die JavaScript-Strategie:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(id)
    Log(exchange.GetOrders())
    throw "stop"
}

6. Löschen Sie das Auftragsmodul

img

Dieses Modul wird verwendet, um die Bestellung zu stornieren.

Es gibt viele Szenarien, die solche Operationen beim Schreiben von Strategien erfordern:

Stornieren Sie alle laufenden Bestellungen.

Es besteht kein Zweifel, dass das Cancell Order Modul verwendet werden muss. Während wir das Cancel Order Modul lernen, können wir [5] verwenden, um ausstehende Aufträge des aktuellen Handelspares Modul zu erhalten, und kombinieren, um diese Funktion zu erreichen.

Zunächst einmal, um die Stornierung aller Bestellungen zu testen, ist es nicht offensichtlich, eine Bestellung zu platzieren. Wir beginnen 2 Bestellungen zu platzieren, ihre Preise und Mengen sind unterschiedlich, um die beiden Bestellungen zu unterscheiden.

img

Verwenden Sie das Traverse every element in the list Modul im Loop Modul, um die Aufträge in der aktuellen Liste der ausstehenden Aufträge zu durchqueren.

img

Während des Durchschnitts wird jeder abgerufenen Reihenfolge ein Wert zugewiesen, der der Variablen-Modul-Reihenfolge zugeordnet wird (erstellt im Variablen-Modul-Typ, wie unten gezeigt:)

img

Verwenden Sie das Util Modul:

img

Nehmen Sie die Auftrags-ID heraus, geben Sie sie an die Spannungsposition (konkave) des Moduls Rückgängigmachung der Bestellung weiter und das Modul Rückgängigmachung der Bestellung führt die Aufgabenabmeldung aus.

Zurückversuch:

img

Verwenden Sie die JavaScript-Strategiebeschreibung:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(id)
    var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
    Log(id2)
    var orders = exchange.GetOrders()
    Log(orders)
    for (var i in orders) {
        var order = orders[i]
        Log(exchange.CancelOrder(order.Id))
    }
}

7. Modul, um die Details einer Bestellung auf der Grundlage ihrer Bestell-ID zu erhalten

img

Die Spannungsposition des Moduls ist mit einem Variablenmodul für die Order-ID verbunden und die Bestelldetails können zurückgegeben werden.

img

Beachten Sie die nach dem Ausführen zurückgegebene Reihenfolge:

img

Verglichen mit den laufenden Ergebnissen im Beispiel [5] kann festgestellt werden, dass die gedruckte Bestellung eine separate Bestellinformation ohne [] -Klammern ist. Denn das Beispiel [5] gibt eine Liste zurück, aber dieses Beispiel gibt eine separate Reihenfolge zurück (erlangt auf der Grundlage des ID-Variablenmoduls auf der von dem Modul übermittelten Tenonposition).

Das obige Beispiel ähnelt der Ausführung der JavaScript-Strategie:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(exchange.GetOrder(id))
}

8. Modul für den Futures-Handel

Wir lernen die oben genannten Module einzeln und setzen die Testbörse als Rohstoff-Futures ein.

Einstellungen für Backtest:

img

Das folgende Beispiel führt einen Backtest basierend auf den Einstellungen durch.

  • Beurteilen Sie das Verbindungsstatusmodul zwischen CTP Commodity Futures und Futures-Unternehmensserver

img

Die Rohstoff-Futures haben Öffnungs- und Schließzeiten.

  • Satzvertragsmodul

img

Wenn das Objekt der Börse als Futures-Börse konfiguriert ist, wird ein Fehler gemeldet, wenn die Börse keinen Vertrag aufstellt und die Marktinformationen direkt erhält.

Wir haben den Vertrag als MA909 festgelegt, den derzeit wichtigsten Vertrag für Methanol.

Auf diese Weise wird der letzte Preiswert des MA909-Vertrags auf dem aktuellen Ticketmarkt ermittelt.

  • Einstellung des Auftragsrichtungsmoduls für den Terminhandel

Im Modul "Ausführen von Befehlen"

img

Die Auftragsrichtung muss angegeben werden, da die Futures: Kauf: offene Long-Positionen Verkaufen: offene Leerpositionen closebuy: Schließen von Longpositionen close-sell: Schließen von Short-Positionen Vier Richtungen (für Rohstoff-Futures gibt es zwei weitere Richtungen: closebuy_today für den heutigen Abschluss von Long-Positionen und closeesell_today für den heutigen Abschluss von Short-Positionen).

Wenn beispielsweise das Auftragsmodul auf buy eingestellt ist, gibt es zwei Bedeutungen für die Eröffnung von Long-Positionen und das Schließen von Short-Positionen, was zweideutig ist. Daher ist das Set the order direction module for futures trading Modul erforderlich, um eine klare Orderrichtung festzulegen.

img

Anzeige für die Rückprüfung:

img

Wie der JavaScript-Strategie-Code:

function main () {
    while (true) {
        if (exchange.IO("status")) {
            exchange.SetContractType("MA909")
            Log(exchange.GetTicker().Last)
            exchange.SetDirection("buy")
            Log(exchange.Buy(1000, 1))
            throw "stop"
        } else {
            Log("The commodity futures front-end processor is not connected")
        }
        Sleep(1000)
    }
}

9. Modul für den Handel mit digitalen Währungs-Futures

Die Verwendung von Futures für digitale Währungen ist im Wesentlichen die gleiche wie die Verwendung von Futures für Rohstoffe in [8]

  • Bei OKEX kann der Vertragskode folgendermaßen sein:
    • this_week: diese Woche
    • next_week: nächste Woche
    • Viertel: Viertel
    • Swap: dauerhaft
  • BitMEX:
    • XBTUSD
    • ETHUSD
  • Gewichtungsmodul

img

Es wird verwendet, um die Hebelwirkung von Futures für digitale Währungen festzulegen.

#Note: Backtesting is not supported.

Wie die JavaScript-Strategie:

function main () {
    exchange.SetMarginLevel(10)
}

Beispiele für Visualisierungsstrategien:

https://www.fmz.com/strategy/121404 https://www.fmz.com/strategy/129895 https://www.fmz.com/strategy/123904 https://www.fmz.com/strategy/122318Weitere Strategien finden Sie unter:https://www.fmz.com/square

Andere Artikel dieser Reihe


Verwandt

Mehr