Triple SuperTrend und Stoch RSI-Strategie


Erstellungsdatum: 2023-12-06 14:29:00 zuletzt geändert: 2023-12-06 14:29:00
Kopie: 1 Klicks: 1382
1
konzentrieren Sie sich auf
1621
Anhänger

Triple SuperTrend und Stoch RSI-Strategie

Überblick

Die Triple-SuperTrend- und Stoch-RSI-Strategie ist eine quantitative Handelsstrategie, die mehrere Zeitrahmen von Trendfolgen und Überkaufen von Übersellindikatoren kombiniert. Die Strategie nutzt drei verschiedene Parameter-Sätze des SuperTrend-Indikators, um die Markttrends zu beurteilen, und sendet ein Handelssignal in Kombination mit dem Überkauf-Überverkauf-Signal des Stoch-RSI-Indikators.

Strategieprinzip

Die Kernlogik der dreifachen SuperTrend- und Stoch-RSI-Strategie besteht darin, dass der SuperTrend-Indikator und der Stoch-RSI-Indikator in Kombination mit verschiedenen Parameter-Sätzen Handelssignale filtern, um die Signalqualität zu verbessern und die Fehlsignalrate zu reduzieren.

Zunächst wird in der Strategie die wichtigsten Trends der Märkte anhand von drei Gruppen von SuperTrend-Indikatoren mit unterschiedlichen Parametern ermittelt. Die drei Gruppen von SuperTrend-Indikatoren haben unterschiedliche Parameter-Sätze, die von schnellen bis langsamen Zeitrahmen verwendet werden, um Trendänderungen auf verschiedenen Ebenen zu erfassen. Wenn der schnellste und der zweitstärkste SuperTrend-Indikator gleichzeitig ein Kauf-/Verkaufssignal aussendet, wird ein vorläufiges Urteil über die Zuverlässigkeit des Signals abgegeben.

Zweitens führt die Strategie die Einführung des Stoch RSI hinzu, um zu bestimmen, ob das Signal überkauft oder überverkauft ist. Der Stoch RSI kombiniert die Vorzüge des Stochastic mit dem RSI, um effektiv zu bestimmen, ob der Markt überkauft oder überverkauft ist. Wir können ein endgültiges Kauf-/Verkaufssignal senden, wenn die schnellsten und schnellsten SuperTrend-Signale mit dem Stoch RSI übereinstimmen.

Durch die Kombination von mehreren Indikatoren und mehreren Zeitrahmen können die dreifachen SuperTrend- und Stoch-RSI-Strategien effektiv Marktlärm filtern, die Signalzuverlässigkeit erhöhen und die Häufigkeit von Fehltrades verringern.

Strategische Vorteile

Der größte Vorteil der Triple-SuperTrend- und Stoch-RSI-Strategie liegt in der effektiven Kombination von mehreren Indikatoren und mehreren Zeiträumen, was uns folgende Vorteile bringt:

  1. Die Kombination von drei SuperTrend-Indikatoren und einem Stoch RSI-Indikator reduziert erheblich den Lärm und die Fehlsignale, die bei einem einzelnen Indikator vorhanden sind.

  2. Steigerung der Gewinnsignal-Rate. Obwohl die Signalfrequenz sinkt, wird die Gewinnsignal-Rate deutlich erhöht.

  3. Für trendige Märkte. Mehrzeitrahmenwellen sind geeignet, um mittlere und langfristige Trends zu erfassen. Sie sind für Marktumgebungen geeignet, in denen Trends deutlich sichtbar sind.

  4. Die Dreifach-Indikatoren bieten einen größeren Spielraum für die Optimierung von Parametern.

  5. Die Parameter können nach dem persönlichen Stil angepasst werden. Die Parameter können frei angepasst werden, damit die Strategie besser zu Ihrem eigenen Handelsstil passt.

Strategisches Risiko

Die dreifache SuperTrend- und Stoch RSI-Strategie birgt ebenfalls Risiken, die sich auf folgende Aspekte konzentrieren:

  1. Die Signalfrequenz wird reduziert. Eine mehrschichtige Filtermechanik führt zu einer deutlichen Verringerung der Handelsfrequenz der Strategie.

  2. Die Konservativität der Strategie macht es leicht, einige potenzielle Chancen zu verpassen.

  3. Mehr Indikatoren erhöhen die Parameterabhängigkeit. Je mehr Indikatoren und Parameter, desto schwieriger wird die Strategie optimiert.

  4. Es gibt nur eine begrenzte Fähigkeit, Trends zu verfolgen. Die Kombination von mehreren Zeitrahmen beschränkt die Flexibilität der Strategie, Trends zu verfolgen.

Für die oben genannten Risiken können wir optimieren, indem wir die Parameter der Indikatoren anpassen und mehr Hilfsindikatoren einführen, damit die Strategie eine höhere Gewinnqualität erzielt, während die Risiken kontrolliert werden.

Richtung der Strategieoptimierung

Die dreifache SuperTrend- und Stoch-RSI-Strategie bietet noch Raum für weitere Optimierungen, die vor allem aus folgenden Aspekten erfolgen können:

  1. Anpassung der Parameterkombination der Indikatoren, um die optimale Parameterübereinstimmung zu finden. Sie können weitere Parameterkombinationen der Indikatoren testen, um die optimale Parameter zu finden.

  2. Erhöhung der Stop-Loss-Strategie und Kontrolle des Einzeltragerrisikos. Dies kann die Strategie-Stabilität erheblich verbessern.

  3. Die Einführung von mehreren Beurteilungsindikatoren zur Signalprüfung. Zum Beispiel die Einführung von Transaktionsvolumenindikatoren usw. für mehrere Gesichtspunkte.

  4. Die Erweiterung der Anpassungsfunktion ermöglicht die automatische Optimierung und Anpassung der Strategien an die Parameter, um sich an die Veränderungen des Marktes anzupassen.

  5. In Kombination mit einem Machine-Learning-Algorithmus wird eine Prognose erstellt. Die Genauigkeit des Indikatorsignals wird mit einem AI-Algorithmus vorhergesagt.

Durch kontinuierliche Optimierung kann die Dreifach-SuperTrend- und Stoch-RSI-Strategie zu einer stabilen, effizienten Quantitative-Trading-Strategie heranwachsen, die uns beträchtliche Alpha-Werte bringt.

Zusammenfassen

Die Triple SuperTrend und Stoch RSI-Strategie kombiniert erfolgreich Multi-Time-Frame Analysis mit Überkauf-Überverkauf-Urteilen zu einer einzigartigen Trend-Following-Trading-Strategie. Gleichzeitig behält sie die doppelte Vorteile von Trend-Following und Indikator-Filterung und erhöht den Anteil an Gewinnsignalen, während sie die Geräuschsignale reduziert. Obwohl das Risiko und der Optimierungsraum für die Strategie bestehen, können ihre Profitabilität und Stabilität durch Parameteranpassung und Strategieoptimierung weiter verbessert werden.

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