Kanalausbruch: Strategie für gleitenden Durchschnitt


Erstellungsdatum: 2024-01-15 12:25:26 zuletzt geändert: 2024-01-15 12:25:26
Kopie: 0 Klicks: 639
1
konzentrieren Sie sich auf
1617
Anhänger

Kanalausbruch: Strategie für gleitenden Durchschnitt

Überblick

Die Strategie ist eine Breakout-Strategie, die auf einem Preis-Channel basiert und die Ein- und Ausstiegs- und Ausstiegsmethoden kombiniert. Sie verwendet eine hohe und niedrige Preis-Equilibrium-Strategie, um einen Preis-Channel zu erstellen, bei einem Preis-Channel-Bruch zu überschreiten und mit einem festen Stop-Loss oder einem Trailing-Stop das Risiko zu kontrollieren.

Strategieprinzip

Die Strategie bildet einen Preis-Channel durch die Berechnung der mittleren Linien der hohen und niedrigen Preise. Konkret ist die Berechnung der mittleren Linien der hohen und niedrigen Preise mit einer Länge von 10 und bildet die oberen und unteren Bahnen des Channels.

Nach dem Eintritt verwendet die Strategie einen festen Stop oder Trailing Stop, um aus der Position auszusteigen. Der Trailing Stop umfasst zwei Parameter: einen festen Stop und einen aktivierenden Offset. Wenn der Preis die aktivierte Verlagerung erreicht, wird der Stop trail gefolgt.

Die Strategie kombiniert zeitliche Filterung mit Rückmessungen nur innerhalb bestimmter historischer Daten, um die Performance in verschiedenen Marktphasen zu testen.

Analyse der Stärken

Die Strategie nutzt die Preis-Channel- und Trend-Tracking-Stopps, um die Richtung der mittleren und langen Trendlinien zu erfassen. Im Vergleich zur einfachen Moving Average-Strategie reduziert sie die Anzahl der ungültigen Geschäfte, die durch Preisschwankungen verursacht werden. Durch den Trailing Stop kann der Preis dynamisch verfolgt werden, um Gewinne zu erzielen.

Insgesamt ist die Strategie logisch klar, verwendet weniger Indikatoren und Parameter, ist leicht nachzuvollziehen, eignet sich für den Handel mit mittleren und langen Trends und kann bei starken Verhältnissen profitieren.

Risikoanalyse

Die Strategie kann in einem schwankenden Umfeld eingeschlossen werden und kann nicht dauerhaft profitieren. Darüber hinaus kann der Preis in einem extremen Umfeld den Stop-Loss-Level brechen, was zu großen Verlusten führt.

Die Parameter-Einstellungen sind relativ subjektiv und müssen in verschiedenen Marktphasen angepasst werden. Festgelegte Stopppositionen und Aktivierungsverlagerungen können nicht an die Marktfluktuation angepasst werden.

Optimierungsrichtung

Es kann in Kombination mit anderen Indikatoren geprüft werden, um Einstiegssignale zu filtern, z. B. Handelsvolumen, Bollinger Bands usw., um eine Deckung zu vermeiden. Oder ein dynamischer Stop-Loss kann verwendet werden, um einen Stop-Loss-Bereich entsprechend der ATR oder der Preisschwankungen einzurichten.

Die Ausstiegsregeln können für einen beweglichen Stopp oder einen Chandelier-Exit optimiert werden. Teil-Ausstiegs können auch berücksichtigt werden, wenn der Preis wieder in den Channel eintritt. Die Optimierung der Ein- und Ausstiegsregeln kann die Strategie-Stabilität erheblich verbessern.

Zusammenfassen

Die Strategie als Ganzes ist eine quantitative Strategie, die auf Preiskanal, Trendverfolgung und Stop/Stop-Management basiert. Sie verfügt über eine klare Logik, eine einfache Parameterstruktur, die leicht zu verstehen und zu erfassen ist, und ist geeignet, um quantitative Transaktionen zu lernen. Die Strategie kann auf verschiedene Arten optimiert werden, um Stabilität und Profitabilität zu verbessern.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-21 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true )
// Generalized SSL:
//  This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. 
//  It is based on moving averages of the highs and lows. 
//  Similar channel indicators can be found, whereas 
//  this one implements the persistency inside the channel, which is rather tricky.
//  The green line is the base line which decides entries and exits, possibly with trailing stops.
//  With respect to the original version, here one can play with different moving averages.
//  The default settings are (10,SMA)
//
// Vitelot/Yanez/Vts March 2019

lb = input(10, title="Lb", minval=1)
maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"])

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true
// QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain
// QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

tenkan(sig,len) =>
    0.5*(highest(sig,len)+lowest(sig,len))

ma(t,sig,len) =>
    sss=na
    if t =="SMA"
        sss := sma(sig,len)
    if t == "EMA"
        sss := ema(sig,len)
    if t == "HMA"
        sss := hma(sig,len)
    if t == "McG" // Mc Ginley
        sss := mcg(sig,len)
    if t == "Tenkan"
        sss := tenkan(sig,len)
    if t == "WMA"
        sss := wma(sig,len)
    sss

base(mah, mal) =>
    bbb = na
    inChannel = close<mah and close>mal
    belowChannel = close<mah and close<mal
    bbb := inChannel? bbb[1]: belowChannel? -1: 1
    uuu = bbb==1? mal: mah
    ddd = bbb==1? mah: mal
    [uuu, ddd]

maH = ma(maType, high, lb)
maL = ma(maType, low, lb)

[up, dn] = base(maH,maL)

plot(up, title="High MA", color=lime, linewidth=3)
plot(dn, title="Low MA", color=orange, linewidth=3)

long = crossover(dn,up)
short = crossover(up,dn)

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)