Triple SuperTrend und Stoch RSI Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-06 14:29:00
Tags:

img

Übersicht

Die Triple SuperTrend- und Stoch RSI-Strategie ist eine quantitative Handelsstrategie, die Multi-Timeframe-Trend-Nachfolge des SuperTrend-Indikators und Überkauf-/Überverkaufssignale aus dem Stoch RSI-Indikator kombiniert. Die Strategie verwendet drei SuperTrend-Indikatoren mit verschiedenen Parameter-Einstellungen, um Markttrends zu bestimmen und kombiniert Stoch RSI-Signale, um Handelssignale zu filtern. Insbesondere, wenn die beiden schnelleren SuperTrend-Indikatoren gleichzeitige Kauf/Verkaufssignale geben, werden, wenn der Stoch RSI-Indikator bestätigt, entsprechende Long/Short-Positionen eingenommen.

Strategie Logik

Die Kernlogik der Triple SuperTrend- und Stoch-RSI-Strategie besteht darin, SuperTrend-Indikatoren mit verschiedenen Parametern und den Stoch-RSI-Indikator für die Handelssignalfilterung zu kombinieren, um die Signalqualität zu verbessern und falsche Signale zu verringern.

Zunächst nimmt die Strategie drei SuperTrend-Indikatoren mit unterschiedlichen Parameter-Einstellungen an, um den wichtigsten Markttrend zu bestimmen. Die drei SuperTrend-Indikatoren haben Parameter, die von schnellen bis langsamen Zeitrahmen reichen, um Trendveränderungen auf verschiedenen Ebenen zu erfassen. Wenn die schnellsten und zweitschnellsten SuperTrend-Indikatoren gleichzeitig Kauf/Verkaufsignale geben, fällt ein vorläufiges Urteil, dass das Signal eine gewisse Zuverlässigkeit aufweist.

Zweitens wird der Stoch RSI-Indikator eingeführt, um festzustellen, ob der Markt extrem überkauft oder überverkauft ist, wenn das Signal auftritt. Der Stoch RSI-Indikator kombiniert die Stärken des RSI und der Stochastic-Indikatoren und ermöglicht effektive Beurteilungen über überkaufte/überverkaufte Marktbedingungen. Wenn die schnellsten und zweitschnellsten SuperTrend-Signale mit den Stoch RSI-Signalen übereinstimmen, können die endgültigen Kauf-/Verkaufssignale ausgelöst werden.

Durch die Kombination mehrerer Indikatoren und Zeitrahmen kann die Triple SuperTrend- und Stoch RSI-Strategie effektiv Marktlärm filtern, die Signalzuverlässigkeit verbessern und falsche Trades reduzieren.

Vorteile der Strategie

Der größte Vorteil der Triple SuperTrend- und Stock RSI-Strategie liegt in der effektiven Kombination mehrerer Indikatoren und Zeitrahmen, die folgende Vorteile bringt:

  1. Die Kombination der dreifachen SuperTrend- und Stoch-RSI-Indikatoren kann Lärm und falsche Signale, die mit einzelnen Indikatoren einhergehen, erheblich verringern.

  2. Trotz der verringerten Signalfrequenz wird der Anteil der profitablen Signale deutlich verbessert.

  3. Für Trending-Märkte geeignet. Multi-Timeframe-Filterung erleichtert die Erfassung von mittelfristigen bis langfristigen Trends und passt gut zu Trending-Marktumgebungen.

  4. Die dreifachen Indikatoren ermöglichen eine größere Optimierung der Parameter.

  5. Anpassungsfähige Parameter, die sich an den persönlichen Handelsstil anpassen.

Risiken der Strategie

Es gibt auch einige Risiken, die mit der Triple SuperTrend- und Stoch RSI-Strategie verbunden sind:

  1. Verringerte Signalfrequenz: Der mehrschichtige Filtermechanismus verringert die Handelsfrequenz der Strategie erheblich.

  2. Die konservative Natur der Strategie macht es wahrscheinlich, dass sie einige profitable Möglichkeiten verpasst.

  3. Mehr Indikatoren bedeuten größere Schwierigkeiten bei der Optimierung.

  4. Die Kombination von mehreren Zeitrahmen schränkt auch die Flexibilität der Trendverfolgung der Strategie ein.

Um diesen Risiken entgegenzuwirken, können Optimierungsmaßnahmen wie die Anpassung der Indikatorparameter und die Einführung zusätzlicher Indikatoren ergriffen werden, um die Risikokontrolle zu verbessern und gleichzeitig die Rentabilitätsqualität zu verbessern.

Optimierungsrichtlinien

Es gibt noch Raum für eine weitere Optimierung der Triple SuperTrend- und Stoch RSI-Strategie:

  1. Es können weitere Parameter-Sets getestet werden, um das Optimum zu finden.

  2. Einführung von Stop-Loss/Take-Profit für eine bessere Risikokontrolle.

  3. Mehr Indikatoren für die Signalvalidierung einbeziehen, z. B. Volumenindikatoren.

  4. Einbaufähigkeit zur automatischen Optimierung von Parametern entsprechend der sich ändernden Marktdynamik.

  5. Kombination von Algorithmen für maschinelles Lernen zur Leistungsvorhersage und Bewertung der Signalgenauigkeit.

Mit kontinuierlicher Optimierung kann sich die Triple SuperTrend- und Stoch RSI-Strategie zu einem stabilen, effizienten Handelssystem entwickeln, das ein beträchtliches Alpha liefert.

Schlussfolgerung

Die Triple SuperTrend und Stoch RSI Strategie kombiniert erfolgreich Multi-Timeframe-Analyse und Überkauf/Überverkauf Urteil in eine einzigartige Trend-Following-Handelsstrategie. Es behält die doppelten Vorteile von Trend-Following und Indikator-Filterung, verbessert profitable Signale, während falsche Signale zu verringern. Obwohl Risiken und Optimierung Raum noch existieren, kann seine Rentabilität und Stabilität durch Parameter-Tuning und Strategieoptimierung weiter verbessert werden. Insgesamt bietet die Triple SuperTrend und Stoch RSI Strategie eine qualitativ hochwertige quantitative Handelsstrategie Wahl.


/*backtest
start: 2022-11-29 00:00:00
end: 2023-04-17 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/
// © M3RZI

//@version=4
strategy("3x Supertrend and Stoch RSI", overlay = true, max_bars_back = 1000)

//INPUTS
STATRLENGTH1 = input(10, title = "Fast Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT1 = input(1, title = "Fast Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH2 = input(11, title = "Medium Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT2 = input(2, title = "Medium Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH3 = input(12, title = "Slow Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT3 = input(3, title = "Slow Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")

stochK = input(3, title = "K (Stochastic Fast)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochD = input(3, title = "D (Signal Line)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiLength = input(14, title = "RSI Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochLength = input(14, title = "Stochastic Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiSource = input(close, title = "RSI Source", type = input.source, group = "STOCHASTIC RSI SETTINGS")
stochRestrictions = input(false, title = "Restrict crosses to overbought/oversold territory", type = input.bool, group = "STOCHASTIC RSI SETTINGS")
overboughtLine = input(80, title = "Stochastic  RSI Upper Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
oversoldLine = input(20, title = "Stochastic RSI Lower Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")

EMALength  = input(200, title = "EMA Length", type = input.integer, group = "EMA SETTINGS")

SLStrategy = input("ATR Based", title = "Stop Loss Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
SLATRLength = input(14, title = "Stop Loss ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
SLATRMult = input(2.7, title = "Stop Loss ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")
TPStrategy = input("ATR Based", title = "Take Profit Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
TPATRLength = input(14, title = "Take Profit ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
TPATRMult = input(1.6, title = "Take Profit ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")

//SUPERTRENDS
[superTrend1,dir1] = supertrend(STATRMULT1,STATRLENGTH1)
[superTrend2,dir2] = supertrend(STATRMULT2,STATRLENGTH2)
[superTrend3,dir3] = supertrend(STATRMULT3,STATRLENGTH3)

directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : na
directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : na
directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : na

//STOCH RSI
rsi = rsi(rsiSource, rsiLength)
k = sma(stoch(rsi, rsi, rsi, stochLength), stochK)
d = sma(k, stochD)

//EMA
ema = ema(close,EMALength)

//CONDITIONS LONG AND SHORT

var long = false
var longCondition = false
var short = false
var shortCondition = false
var drawing = false
var TP = 0.0
var SL = 0.0
var middle = 0.0
var initial = 0

stopSize = atr(SLATRLength) * SLATRMult
profitSize = atr(TPATRLength) * TPATRMult
longStop = close - stopSize
longProfit = close + profitSize
current = close
shortStop = close + stopSize
shortProfit = close - profitSize
barInitial = bar_index

if  stochRestrictions
    longCondition := close > ema and ((directionST1 == true and directionST2 == true)  or (directionST2 == true and directionST3 == true)) and crossover(k,d) and k < oversoldLine and not long and not drawing
    shortCondition := close < ema and ((directionST1 == false and directionST2 == false)  or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and k > overboughtLine and not short and not drawing
else
    longCondition := close > ema and ((directionST1 == true and directionST2 == true)  or (directionST2 == true and directionST3 == true)) and crossover(k,d) and not long and not drawing
    shortCondition := close < ema and ((directionST1 == false and directionST2 == false)  or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and not short and not drawing

if longCondition
    long := true
    short := false
    drawing := true
    TP := longProfit
    middle := current
    SL := longStop
    initial := barInitial
    strategy.entry("Long", strategy.long, 10)
    strategy.exit("Long exit","Long", limit = TP, stop = SL)
    alert("Long signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
    //label.new(bar_index,low,text = "Long\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.belowbar, textcolor = color.white, color = color.green, size = size.small,  style = label.style_label_up)

if shortCondition
    short := true
    long := false
    drawing := true
    TP := shortProfit
    middle := current
    SL := shortStop
    initial := barInitial
    strategy.entry("Short", strategy.short, 10)
    strategy.exit("Short exit","Short",limit = TP , stop = SL)
    alert("Short signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
    //label.new(bar_index,high,text = "Short\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.abovebar, textcolor = color.white, color = color.red, size = size.small,  style = label.style_label_down)

if long and (high[1] >= TP or low[1] <= SL)
    drawing := false
    long := false
    if high[1] >= TP
        label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (Long)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_down)
    else
        label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (Long)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_up)

if short and (low[1] <= TP or high[1] >= SL)
    drawing :=  false
    short := false
    if low[1] <= TP
        label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (short)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up)
    else
        label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (short)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down)

//STRATEGY
//strategy.entry("buy", strategy.long, 10, when = longCondition)
//strategy.exit("bracket", "buy",  10, limit = TP, stop = SL)
//strategy.entry("short", strategy.long, 10, when = shortCondition)
//strategy.exit("bracket", "short",  10, limit = TP, stop = SL)

//DRAWING
plotshape(longCondition, title = "Long Signal", location=location.belowbar, style=shape.labelup, color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(shortCondition, title = "Short Signal", location=location.abovebar, style=shape.labeldown, color=color.red, textcolor=color.white, size=size.small, text="Short")
profitLine = plot(drawing and drawing[1] ? TP : na, title = "Take profit", color = color.green, style = plot.style_linebr)
currentLine =plot(drawing and drawing[1]  ? middle : na, title = "Middle Line", color = color.white, style = plot.style_linebr)
lossLine = plot(drawing and drawing[1]  ? SL : na, title = "Stop Loss", color = color.red, style = plot.style_linebr)
fill(currentLine,profitLine, title = "Profit Background" ,color = color.new(color.green,75))
fill(currentLine,lossLine, title = "Loss Background" ,color = color.new(color.red,75))
plot(superTrend1, title = "Fast Supertrend", color = dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title = "Medium Supertrend", color = dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title = "Slow Supertrend", color = dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)
plot(ema, title = "EMA",color = color.yellow)
//plot(k, color = color.blue)
//plot(d, color = color.orange)
//h1 = hline(80)
//h2 = hline(20)
//fill(h1,h2, color = color.new(color.purple,60))




Mehr