Zufälliges Gehen

Schriftsteller:ChaoZhang, Datum: 2023-10-09 16:10:24
Tags:

Übersicht

Die Random Walk-Strategie ist eine automatisierte Handelsstrategie, die auf der Generierung zufälliger Zahlen basiert. Sie verwendet einen linearen Kongruenzgenerator, um Zahlen zufällig zu generieren.

Strategie Logik

Die wichtigsten Elemente für die Durchführung des Zufallshandels sind:

  1. Setzen Sie die Parameter a, c und Modul m für die Zufallszahlgenerierung sowie den anfänglichen Samen.

  2. Definieren Sie die Zufallszahlgenerierungsfunktion GetRandom mit dem linearen Kongruenzalgorithmus, um Zufallszahlen zwischen 0-m zu generieren.

  3. Wenn keine Position vorhanden ist, vergleichen Sie auf jeder Kerze die generierte Zufallszahlgröße, gehen Sie lang, wenn sie größer als m/2 ist, andernfalls gehen Sie kurz.

  4. Setzen Sie die Stop-Loss- und Gewinnbedingungen in Prozent.

  5. Setzen Sie den Backtest-Zeitrahmen nach Zeitrahmen.

Durch die oben genannten Schritte realisiert die Strategie völlig zufällige Long/Short-Operationen. Wenn die zufällige Zahl größer als m/2 ist, öffnet sie eine Long-Position, andernfalls öffnet sie eine Short-Position, setzt dann Stop-Loss und Take-Profit für Exit-Positionen ein. Der Backtest-Zeitraum ist anpassbar.

Analyse der Vorteile

  • Einfache und klare Strategie-Logik, leicht zu verstehen und umzusetzen.

  • Zufälliger Handel vermeidet wirksam emotionale Auswirkungen und reduziert subjektive Fehloperationen.

  • Anpassbare Parameter für die Generierung von Zufallszahlen, um die Zufälligkeit anzupassen.

  • Flexibile Stop-Loss- und Take-Profit-Einstellungen zur Steuerung einzelner Gewinne/Verluste.

  • Unterstützt die Optimierung von Parametern durch Backtesting der Auswirkungen verschiedener Parameter auf den Gesamtgewinn.

Risikoanalyse

  • Zufälliges Handeln kann zu einem unbestimmten langfristigen Trend und einer unsicheren Rentabilität führen.

  • Wenn man seine Positionen nicht an die Marktbedingungen anpassen kann, könnte man Trendchancen verpassen.

  • Begrenzter Einzelgewinn, hohes Abzugrisiko.

  • Benötigt ein angemessenes Stop-Loss/Take-Profit-Verhältnis, um erhebliche Verluste zu vermeiden.

  • Häufige offene/schließende Positionen aufgrund der Zufälligkeit erhöhen die Handelskosten.

  • Ausreichende Rückprüfung erforderlich, um angemessene Parameter-Einstellungen zu überprüfen, nicht blind zu verwenden.

Die Risiken könnten durch das Hinzufügen von Trendbeurteilungen, die Optimierung des Stop-Loss-Mechanismus, die strenge Kontrolle einzelner Gewinne/Verluste usw. verringert werden.

Verbesserungsrichtlinien

  • Hinzufügen von Trendbeurteilungen, um gegen den Trend zu handeln.

  • Zusätzliche Positionsgröße basierend auf der Kapitaländerung.

  • Optimieren Sie den Algorithmus zur Generierung zufälliger Zahlen für bessere Zufälligkeit.

  • Dynamischer Stop-Loss/Take-Profit-Prozentsatz

  • Grenzfrequenz der Befehle.

  • Multiparameter-Backtest-Optimierung.

Zusammenfassung

Die Random Walk-Strategie realisiert mechanischen Handel durch zufällig kontrollierten Long/Short. Sie hat eine starke Zufälligkeit und vermeidet emotionale Auswirkungen und subjektive Fehloperationen. Aber zufällige Einträge können auch Trendchancen verpassen, begrenzten einzelnen Gewinn, benötigt optimierte Risikokontrollmechanismen. Insgesamt ist die Strategie geeignet, um Handelsideen zu überprüfen, Parameterwirkungen zu bewerten, aber eine sorgfältige Bewertung ist für den praktischen Einsatz erforderlich.


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

//@version=3
//@author=Tr0sT
strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

a = 16
c = 10
m = 1000
GetRandom(prev) =>
    GetRandom = (a * prev + c) % m

seed = input(200, minval = 2, maxval = m)
stopLoss = input(30, title = "Stop loss percentage(0.1%)")
takeProfit = input(30, title = "Take profit percentage(0.1%)")


curRandom = na
curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1])
if (strategy.position_size == 0)
    if (curRandom >= m / 2)
        strategy.entry("Enter", strategy.long)
    else
        strategy.entry("Enter", strategy.short)
        
    strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick)            

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

Mehr