
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.
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.
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.
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.
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.
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.
/*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)