Die Ressourcen sind geladen. Beförderung...

EMA- und Stochastischen RSI-basierte Mehrzeitrahmenentwicklung nach Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-03-08 17:32:38
Tags:

img

Strategieübersicht

Die Strategie, genannt EMA und Stochastic RSI-basierte Multi-Timeframe Trend Following Trading Strategy, nutzt zwei exponentielle gleitende Durchschnitte (EMA) mit verschiedenen Perioden und den Stochastic RSI-Indikator, um mittelfristige bis langfristige Markttrends zu erfassen.

Strategieprinzipien

  1. Berechnen Sie eine schnelle EMA und eine langsame EMA. Der Standardparameter für die schnelle EMA ist 12 und 25 für die langsame EMA. Diese können basierend auf den Merkmalen des Marktes und der Handelsfrequenz angepasst werden.

  2. Feststellung des Auf/Abtriebs:

  • Wenn die schnelle EMA über die langsame EMA geht, erzeugt sie ein Aufwärtssignal
  • Wenn die schnelle EMA unter die langsame EMA geht, erzeugt sie ein bärisches Signal.
  1. Trendbestätigung: Nachdem ein bullish/bearish Signal erscheint, benötigt es 2 aufeinanderfolgende bullish/bearish Kerzen, um den Trend zu bestätigen. Dies hilft, falsche Signale zu filtern.

  2. Verwenden Sie den stochastischen RSI als Hilfsbeurteilung:

  • Wenn der Stochastic RSI %K über die %D-Linie geht und %K unter 20 liegt, erzeugt er ein Überverkaufssignal, das auf eine mögliche bullische Umkehr hinweist
  • Wenn der stochastische RSI %K unterhalb der %D-Linie überschreitet und %K über 80 liegt, erzeugt er ein Überkaufsignal, das auf eine mögliche bärische Umkehr hinweist.
  1. Handelsregeln:
  • Öffnen Sie eine Longposition, wenn die EMAs ein bullisches Signal erzeugen und der Stochastic RSI nicht im überkauften Gebiet liegt
  • Öffnen einer Shortposition, wenn die EMAs ein bärisches Signal erzeugen und der Stochastic RSI nicht im Überverkaufszone liegt

Strategische Vorteile

  1. Durch den Einsatz von zwei EMAs mit unterschiedlichen Zeiträumen kann die Strategie die Empfindlichkeit und Zuverlässigkeit der Trendfassung besser ausbalancieren.

  2. Der Trendbestätigungsmechanismus kann die meisten falschen Signale effektiv filtern und die Gewinnrate verbessern.

  3. Der stochastische RSI dient als Hilfsbeurteilung und hilft bei der Beurteilung der Trendstärke im Frühstadium und bei der Vorwarnung vor möglichen Umkehrungen im späten Stadium.

  4. Die Strategielogik ist einfach und enthält nur wenige Parameter, sodass sie leicht verständlich und umsetzbar ist.

Risikoanalyse

  1. Die EMAs sind nachlässige Indikatoren und können zu Beginn von Trendumkehrungen zu erheblichen Schwankungen führen.

  2. Trendfolgende Strategien schneiden in unruhigen Märkten in der Regel schlechter ab.

  3. Der stochastische RSI kann bei extremer Marktvolatilität irreführende Signale erzeugen und die Urteilsqualität beeinträchtigen.

  4. Festgelegte Parameter können sich möglicherweise nicht an alle Marktbedingungen anpassen und erfordern dynamische Anpassungen anhand der Merkmale des Marktes.

Optimierungsrichtlinien

  1. Einführung von Volatilitätsindikatoren wie ATR, um die EMA-Parameter dynamisch anzupassen und sich an verschiedene Marktrhythmen anzupassen.

  2. Hinzufügen von Urteilen für Bereichsgebundene Märkte, wie die Kombination von Bollinger Bandbreiten, um häufige Trades unter unsicheren Bedingungen zu vermeiden.

  3. Um die Signalzuverlässigkeit zu verbessern, sollten zusätzlich zum stochastischen RSI weitere Hilfskriterien wie Volumenänderungen eingefügt werden.

  4. Es werden Marktkorrelationen berücksichtigt und Multi-Asset-Intermarktsignale eingeführt, um die Risikobereitschaft des Systems zu verbessern.

Zusammenfassung

Diese Strategie nutzt effektiv die Stärken von EMAs und Stochastic RSI, um einen mittelfristigen bis langfristigen Handelsansatz auf der Grundlage von Trendverfolgung und Dynamikumkehrung zu bilden. Sie erfasst Trends durch EMA-Kreuzungen, bestätigt die Trendstärke und warnt vor Umkehrungen mit Stochastic RSI und verbessert die Signalqualität mit Trendbestätigungsmechanismen. Die drei Komponenten kombinieren sich organisch, um einen einfachen und effektiven quantitativen Handelsstrategierahmen zu schaffen. Ihre Hauptvorteile liegen in ihrer prägnanten Logik, wenigen Parametern, geringen Umsetzungsschwierigkeiten und breiter Anwendbarkeit. Die Strategie hat jedoch auch inhärente Einschränkungen wie große Schwankungen und die Unfähigkeit, sich an unruhige Märkte anzupassen. Zukünftige Verbesserungen können sich auf die Optimierung dynamischer Parameter, die Einführung weiterer Hilfskriterien und den Aufbau von Marktverbindungsmechanismen konzentrieren. Insgesamt ist


/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)

// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')

// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)

// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)

// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D

// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)

// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA

if buy
    countBuy += 1
    countBuy

if buy
    countSell := 0
    countSell

if sell
    countSell += 1
    countSell

if sell
    countBuy := 0
    countBuy

buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]

barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)

// Strategy backtest
if (buysignal)
    strategy.entry("Buy", strategy.long)

if (sellsignal)
    strategy.entry("Sell", strategy.short)

// Plot Bull/Bear

plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)

bull = countBuy > 1
bear = countSell > 1

barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)

// Set Alerts

alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')

// Stoch RSI code

smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)

rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')

// Alerts

crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)

crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)

maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')

maValue = if maTypeChoice == 'EMA'
    ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
    ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
    ta.sma(maSrc, maLen)
else
    0

crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'

crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)

aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)

bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)

bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)

alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')





Mehr