EMA RSI Verborgene Divergenz nach der Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-02 16:54:27
Tags:

img

Übersicht

Diese Strategie eröffnet Long-Positionen basierend auf den EMA-Crossover- und RSI-verborgenen bullischen Divergenzsignalen, um den Beginn eines Aufwärtstrends zu erkennen. Die Kombination von EMA-Linien, RSI-Indikator und K-Linien-Schlusskurs bietet eine doppelte Bestätigung für die Gewährleistung einer Aufwärtströmung. Diese Strategie eignet sich für die Nachfolge mittelfristiger Trends und die Eröffnung von Long-Positionen nach Preiskonsolidierungen.

Strategie Logik

  1. EMA-Strategie: Die Verwendung des goldenen Kreuzes zwischen der 50-Perioden-EMA und der 250-Perioden-EMA zur Bestimmung der Trendrichtung.

  2. RSI versteckte Divergenzstrategie: Der RSI bildet niedrigere Tiefs, während der Preis höhere Tiefs bildet, was zu Beginn eine Trendumkehr anzeigt.

  3. K-Linien-Schließungsstrategie: Gehen Sie lang, wenn der Schlusskurs über der 50-EMA-Linie liegt.

Die Kombination der oben genannten drei Strategien zeigt den Beginn eines Aufwärtstrends und eröffnet entsprechend Longpositionen.

Analyse der Vorteile

  1. Die Verwendung von EMA-Linien zur Bestimmung der Trendrichtung zusammen mit RSI-Umkehrsignalen ermöglicht einen frühen Eintritt zu Beginn der Trends.

  2. Die doppelte Bestätigung durch EMA-Linien, RSI-Indikator und K-Linien-Schlusskurs filtert falsche Signale effektiv aus.

  3. Die Folge von mittelfristigen und langfristigen Trends macht es geeignet, neue Aufwärtstrends nach Konsolidierungen zu ermitteln.

Risikoanalyse

  1. Schließen Sie Positionen, wenn die EMA-Linien ein Todeskreuz haben.

  2. Die Identifizierung von versteckten RSI-Divergenzen erfordert Erfahrung, eine unsachgemäße Parameter-Ausrichtung kann zu fehlenden oder falschen Signalen führen.

  3. Die Parameter müssen für verschiedene Handelsinstrumente optimiert werden.

Optimierungsrichtlinien

  1. Dynamische Anpassung der EMA-Parameter für eine bessere Trendgenauigkeit.

  2. Feinabstimmungen der RSI-Parameter für eine bessere Genauigkeit des versteckten Divergenzsignals.

  3. Um Risiken zu kontrollieren, müssen Stop-Loss-Mechanismen wie ATR oder prozentuale Stopps hinzugefügt werden.

  4. Entwicklung von Strategien für Short-Positionen, um Abwärtstrends zu handeln.

Schlussfolgerung

Diese Strategie kombiniert EMA-Linien zur Trendbestimmung und RSI-Signale zur Steigerung der Genauigkeit. Sie identifiziert neue Aufwärtstrends nach Konsolidierungen. Mit angemessener Parameter-Tuning und Risikomanagement könnte sie gute Ergebnisse erzielen. Im Vergleich zu einfachen gleitenden Durchschnittsstrategien hat sie eine höhere Genauigkeit bei der Aufnahme von Trends mit besseren Gewinnraten. Insgesamt ist es eine praktische Trendfolgestrategie.


/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false

//EMA'S
emasrc = close

len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white

len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow

//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)

//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

//Hidden Divergence Indikator

len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound

//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull

if (afterStartDate)
    strategy.entry("Long", strategy.long, when = longcondition)

//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)

if strategy.position_size>0
    profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
    strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)

Mehr