Handelsstrategie für den Tag der Woche

Schriftsteller:ChaoZhang, Datum: 2023-09-26 20:49:44
Tags:

Übersicht

Dies ist eine benutzerdefinierte Long/Short-Handelsstrategie für Bitcoin, die es erlaubt, an verschiedenen Tagen der Woche Longing oder Shorting zurück zu testen.

Stellen Sie sicher, dass Sie sich bei der Anzeige der Leistung und des Handelsverlaufs im täglichen Zeitrahmen befinden, um sicherzustellen, dass das Skript wie vorgesehen funktioniert und Sie über maximale historische Daten aus TradingView verfügen.

Strategie Logik

Die Kernlogik der Strategie besteht darin, dem Benutzer die Wahl zwischen langem, kurzem oder keinem Handel für jeden Tag der Woche zu ermöglichen.

Erstens ermöglicht es dem Benutzer, den Datumsbereich für das Backtesting festzulegen, einschließlich Anfangsmonat, Tag, Jahr und Ende Monat, Tag, Jahr.

Anschließend verwendet es ein Array-Zeitrahmen, um die numerische Darstellung jedes Wochentages zu speichern, von Sonntag 0 bis Samstag 6.

Ein weiteres Array timeframes_options wird verwendet, um die Wahl zwischen langem, kurzem oder keinem Handel für jeden Tag zu speichern.

In einer For-Schleife überprüft die Strategie, ob der aktuelle Handelstag mit einem Tag im Zeitrahmen-Array übereinstimmt.

Wenn die Option nicht None lautet, eröffnet sie eine Position in der entsprechenden Richtung anhand der gewählten Long oder Short.

So kann die Strategie auf der Grundlage der Einstellungen für jeden Tag der Woche über den festgelegten Datumsbereich lang/kurz handeln.

Analyse der Vorteile

Der Hauptvorteil dieser Strategie besteht darin, dass der Benutzer für jeden Tag der Woche vollkommen frei die Handelsrichtung wählen kann.

Im Gegensatz zu festen wöchentlichen Handelsstrategien kann diese flexibel angepasst werden.

Der Backtest-Datumsbereich ist ebenfalls sehr flexibel und ermöglicht das Testen eines beliebigen vom Benutzer angegebenen Zeitraums, um zu sehen, welche Datumskombinationen am besten funktionieren.

Die Handelslogik ist sehr klar und einfach, leicht zu verstehen und zu ändern.

Die Strategie schließt auch automatisch Positionen bei Richtungswechseln jeden Tag, um unnötiges Risiko zu vermeiden.

Risikoanalyse

Das Hauptrisiko besteht darin, dass die vom Nutzer gewählten Tageshandelsoptionen möglicherweise nicht für alle Datumsbereiche geeignet sind.

Zum Beispiel können sich lange Wochenenden und kurze Wochenenden für einige Zeiträume als wirksam erweisen, in anderen jedoch fehlschlagen.

Die Datenbereiche müssen also sorgfältig getestet und nicht auf ein Backtest-Ergebnis angewiesen werden.

Ein weiteres Risiko ist die Unfähigkeit, Verluste rechtzeitig zu reduzieren, wenn sich die Richtung täglich ändert.

Insgesamt ist die Strategie stark auf Optimierung angewiesen und erfordert ausreichende Tests, um Parametermengen zu finden, die verschiedenen Marktbedingungen entsprechen.

Optimierungsrichtlinien

Die Strategie kann in mehreren Aspekten verbessert werden:

  1. Hinzufügen von Stop-Loss-Logik bei täglichen Richtungswechseln und Einstellung von Trailing-Stops, wenn Positionen profitabel sind, um Drawdowns zu begrenzen.

  2. Fügen Sie einen Filter hinzu und nehmen Sie nur Signale auf, wenn ein bestimmter Tag hoch/niedrig ist, und vermeiden Sie den Handel ohne Trend.

  3. Verringern Sie die Positionsgröße in Zeiten hoher Volatilität und erhöhen Sie sie, wenn die Volatilität gering ist, um das Risiko zu kontrollieren.

  4. Fügen Sie maschinelles Lernen zu Handelstage-Auswahl hinzu, beurteilen Sie die Wahrscheinlichkeit jedes Tages basierend auf historischen Daten und generieren Sie dynamische tägliche Richtungen.

  5. Fügen Sie Logik hinzu, um mit plötzlichen Ereignissen wie wichtigen Nachrichten umzugehen, indem Sie den Handel pausieren, um zu vermeiden, dass Sie aus dem Spiel geraten.

Schlussfolgerung

Diese Strategie bietet durch tägliche Richtungsauswahl höchst flexible Long/Short-Handelsfähigkeit. Benutzer können Tests für optimale Parameter frei kombinieren. Sie hat jedoch hohe Optimierungsanforderungen und erfordert umfangreiche Tests, um Einstellungen für verschiedene Märkte zu finden. Durch das Hinzufügen von Verbesserungen wie Stops, Filtern, dynamischen Anpassungen kann das Risiko reduziert und die Robustheit verbessert werden. Mit einer umsichtigen Parameteroptimierung kann die Strategie zu einem effektiven täglichen Richtungshandelswerkzeug werden.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


Mehr