Multi-Zeitrahmen-RSI und gleitende Durchschnittshandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-22 11:00:20
Tags:

img

Übersicht

Diese Strategie kombiniert den RSI-Indikator, den einfachen gleitenden Durchschnitt (SMA) und den gewichteten gleitenden Durchschnitt (WMA), um Handelssignale zu identifizieren.

Strategie Logik

Die Strategie berechnet zunächst den 144-Perioden-WMA und den 5-Perioden-SMA sowohl auf den 1-Stunden- als auch auf den 5-Minuten-Zeitrahmen. Ein Bullish-Markt wird nur dann identifiziert, wenn der 5-Minuten-SMA über der WMA liegt. Die Strategie berechnet dann den RSI-Oszillator und die entsprechenden K- und D-Linien. Verkaufssignale werden erzeugt, wenn die K-Linie unterhalb der D-Linie aus dem Überkaufbereich kreuzt. Kaufsignale werden erzeugt, wenn die K-Linie über die D-Linie aus dem Überverkaufszone kreuzt.

Analyse der Vorteile

Dies ist eine sehr effektive Trendfolgestrategie. Durch die Einbeziehung von zwei Zeitrahmen zur Bestimmung des Trends reduziert sie die falschen Signale erheblich. Darüber hinaus kombiniert sie mehrere Filter, darunter RSI, SMA und WMA, um die Signale zuverlässiger zu machen. Durch das Fahren von KDJ mit RSI vermeiden sie auch einige falsche Signale, die der normalen KDJ-Strategie inhärent sind. Darüber hinaus helfen geeignete Stop-Loss- und Take-Profit-Einstellungen, Gewinne zu erzielen und Risiken zu kontrollieren.

Risikoanalyse

Das größte Risiko dieser Strategie liegt in einer falschen Trendbeurteilung. An Wendepunkten können sich die kurzfristigen und langfristigen gleitenden Durchschnitte aufwärts oder nach unten drehen, was zu falschen Signalen führt. Außerdem kann der RSI während der Rangierungsmärkte laute Signale erzeugen. Diese Risiken können jedoch durch eine ordnungsgemäße Anpassung der Perioden der SMA-, WMA- und RSI-Parameter reduziert werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten verbessert werden:

  1. Testen Sie verschiedene Längen von SMA, WMA und RSI, um die optimale Kombination zu finden
  2. Einbeziehung anderer Indikatoren wie MACD, Bollinger Bands zur Überprüfung der Signalzuverlässigkeit
  3. Optimieren Sie Stop-Loss- und Take-Profit-Mechanismen, indem Sie Fix-Ratio-Stops, Trailing-Stops usw. testen.
  4. Hinzufügen von Modulen für die Kapitalverwaltung zur Steuerung der Größe der Transaktionen und des Gesamtrisikos
  5. Einführung von Modellen für maschinelles Lernen zur Suche nach den besten Leistungsparametern durch groß angelegtes Backtesting

Zusammenfassung

Die Strategie nutzt die Stärken von gleitenden Durchschnitten und Oszillatoren voll aus, um ein relativ solides Trendfolgensystem zu etablieren. Durch die Bestätigung von Signalen über mehrere Zeitrahmen und Indikatoren hinweg kann sie mittelfristige bis langfristige Trends reibungslos erfassen. Die Stop-Loss- und Take-Profit-Einstellungen machen es auch in gewissem Maße normalen Marktschwankungen standhalten. Es gibt jedoch noch Verbesserungsmöglichkeiten, wie z. B. mehr Indikatorenkombinationen zu testen, maschinelles Lernen für die Parameteroptimierung zu nutzen. Insgesamt ist dies eine sehr vielversprechende Handelsstrategie.


/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 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/
// © bufirolas

// Works well with a wide stop with 20 bars lookback
// for the SL level and a 2:1 reward ratio Take Profit .
// These parameters can be modified in the Inputs section of the strategy panel.

// "an entry signal it's a cross down or up on
// the stochastics. if you're in a downtrend
// on the hourly time frame you
// must also be in a downtrend on the five
// minute so the five period has to be below the 144
// as long as the five period is still trading below
// the 144 period on both the hourly and the five minutes
// we are looking for these short signals crosses down
// in the overbought region of the stochastic. Viceversa for longs"

//@version=4
strategy("Stoch + WMA + SMA strat", overlay=true)

//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=10, step=1, title="SL Expander")
i_TPExpander=input(defval=30, step=1, title="TP Expander")
i_reverse=input(false, title="Reverse Trades")
i_TStop =input(false, title="Use Trailing Stop")

//Strategy Inputs
src4 = input(close, title="RSI Source")
stochOS=input(defval=20, step=5, title="Stochastics Oversold Level")
stochOB=input(defval=80, step=5, title="Stochastics Overbought Level")

//Stoch rsi Calculations
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
rsi1 = rsi(src4, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
h0 = hline(80, linestyle=hline.style_dotted)
h1 = hline(20, linestyle=hline.style_dotted)

//MA
wmalen=input(defval=144, title="WMA Length")
WMA = security(syminfo.tickerid, "60", wma(close, wmalen))
SMA = security(syminfo.tickerid, "60", sma(close, 5))
minWMA = wma(close, wmalen)
minSMA = sma(close, 5)

//Entry Logic
stobuy = crossover(k, d) and k < stochOS
stosell = crossunder(k, d) and k > stochOB
mabuy = minSMA > minWMA
daymabuy = SMA > WMA

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
lTP=(strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0)))+((valuewhen(bought, atr(14), 0)/5)*i_TPExpander))
sTP=(strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price))-((valuewhen(bought, atr(14), 0)/5)*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - LSL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na
    
//Stop Selector
SL= islong ? LSL : isshort ? SSL : na
if i_TStop 
    SL:= islong ? tstop : isshort ? Ststop : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
if stobuy and mabuy and daymabuy
    strategy.entry("long", long=not i_reverse?true:false)
if stosell and not mabuy and not daymabuy
    strategy.entry("short", long=not i_reverse?false:true)


//Exit
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross)
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross)
plot(minWMA)
plot(minSMA, color=color.green)




Mehr