Der RSI ist der Bollinger Bands TP/SL-Strategie

Schriftsteller:ChaoZhang, Datum: 21.12.2023 11:17:19
Tags:

img

I. Überblick über die Strategie

Die Strategie wird als RSI Bollinger Bands TP/SL Strategie bezeichnet. Sie kombiniert den RSI-Indikator und Bollinger Bands, um Trends und Handelssignale zu identifizieren. Wenn der RSI-Indikator Überkauf- oder Überverkaufssignale zeigt und der Preis die Bollinger Bands berührt oder durchbricht, werden Long- oder Short-Positionen eröffnet.

II. Strategische Logik

1. RSI-Indikator für Umkehrungen

Der RSI-Indikator beurteilt, ob eine Aktie überkauft oder überverkauft ist. Ein RSI-Wert über der überkauften Linie zeigt überkaufte Bedingungen an, während ein Wert unter der überverkauften Linie überverkaufte Bedingungen anzeigt. Die überkaufte Linie wird bei 50 festgelegt und die überverkaufte Linie bei 50 in dieser Strategie.

2. Bollinger-Bänder für den Trend

Bollinger-Bänder zeichnen Standardabweichungslinien oberhalb und unterhalb eines einfachen gleitenden Durchschnitts. Das obere Band fungiert als Widerstand und das untere Band als Unterstützung. Ein Auf-Kreuzung des unteren Bandes ist ein Kaufsignal, während ein Ab-Kreuzung des oberen Bandes ein Verkaufssignal ist.

3. Kombination von RSI und Bollinger Bands

Wenn der RSI-Indikator ein unteres Umkehrsignal zeigt und der Preis durch das untere Band der Bollinger-Bänder bricht, wird er als Aufwärtsumkehr angesehen und geht somit lang.

III. Vorteile

1. Verbesserte Genauigkeit durch doppelte Indikatoren

Der RSI und die Bollinger Bands werden beide verwendet, um Trends und Umkehrungen zu bestimmen.

2. Risikokontrolle mit Hilfe von TP/SL

Die Strategie setzt Gewinn (TP) und Stop-Loss (SL) -Punkte ein, um Gewinne zu erzielen und die Verlustminderung zu maximieren.

3. Anpassbare Anweisungen

Die Nutzer können je nach Marktbedingungen nur lang, nur kurz oder in beide Richtungen gehen, was eine flexible Risikokontrolle ermöglicht.

IV. Risiken

1. Empfindliche Bollinger-Bandparameter

Die Größe der Standardabweichung beeinflusst die Bandbreite und die Handelssignale.

2. Risiken von TP/SL

V-förmige Umkehrungen können zu unnötigen Verlusten führen, da die TP/SL-Einstellungen zu aggressiv sind.

3. Empfindliche RSI-Parameter

Falsche Einstellungen der RSI-Parameter führen zu einer geringeren Genauigkeit der Umkehrsignale.

V. Optimierungsrichtlinien

1. Optimieren der RSI-Parameter

Es können weitere RSI-Längenwerte getestet werden, um die optimale Parameterkombination zu finden.

2. Optimieren Sie die Bollinger Bands Parameter

Es können mehr Längen und Standardabweichungen getestet werden, um die optimale Parameterkombination zu finden.

3. Versuche verschiedene TP/SL-Verhältnisse

Backtesting kann helfen, das optimale TP/SL-Verhältnis zu finden.

VI. Schlussfolgerung

Diese Strategie nutzt RSI und Bollinger Bands, um Trends und Umkehrungen zu identifizieren, und setzt TP/SL, um Risiken zu kontrollieren. Sie kann automatisch Handelssignale erkennen und Exits verwalten. Es gibt immer noch einige Risiken, die durch Parameteroptimierung verbessert werden können. Im Allgemeinen ist dies eine praktische Strategie mit starker Anwendbarkeit.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
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/
// © BigCoinHunter

//@version=5
strategy(title="RSI_Boll-TP/SL", overlay=true, 
     pyramiding=0, default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, initial_capital=1000, 
     currency=currency.USD, commission_value=0.05, 
     commission_type=strategy.commission.percent, 
     process_orders_on_close=true)

//----------- get the user inputs --------------

//---------- RSI -------------
price = input(close, title="Source")

RSIlength = input.int(defval=6,title="RSI Length") 
RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1)
RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1)

//------- Bollinger Bands -----------
BBlength = input.int(defval=200, title="Bollinger Period Length", minval=1)
BBmult = input.float(defval=2.0, minval=0.001, maxval=50, step=0.1, title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
fill(plot1=p1, plot2=p2, title="Bollinger BackGround", color=color.new(color.aqua,90), fillgaps=false, editable=true)

//---------- input TP/SL ---------------
tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2042, title = "To Year", minval = 2010)

//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//------- define the global variables ------
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
//--------- Colors ---------------

TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na
//bgcolor(switch2?(color.new(TrendColor,50)):na)


//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)


//---------- RSI + Bollinger Bands Strategy -------------
vrsi = ta.rsi(price, RSIlength)

rsiCrossOver = ta.crossover(vrsi, RSIoverSold)
rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought)

BBCrossOver = ta.crossover(source, BBlower)
BBCrossUnder = ta.crossunder(source, BBupper)

if (not na(vrsi))

    if rsiCrossOver and BBCrossOver
        long := true
        
    if rsiCrossUnder and BBCrossUnder
        long := false

//------------------- determine buy and sell points ---------------------
buySignall = window() and long  and (not stoppedOutLong)
sellSignall = window() and (not long)  and (not stoppedOutShort)

//---------- execute the strategy -----------------
if(longEntry and shortEntry)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG")
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT")
        stoppedOutLong  := false
        stoppedOutShort := true

else if(longEntry)
    strategy.entry("LONG", strategy.long,  when = buySignall)
    strategy.close("LONG", when = sellSignall)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(shortEntry)
    strategy.entry("SHORT", strategy.short, when = sellSignall)
    strategy.close("SHORT", when = buySignall)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger")

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger")
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment="Long SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment="Short SL Trigger")



















Mehr