Strategie für Reverasalindikatoren

Schriftsteller:ChaoZhang, Datum: 2023-12-13 14:45:51
Tags:

img

Übersicht

Dies ist eine Revasal-Handelsstrategie, die auf mehreren technischen Indikatoren basiert. Sie kombiniert CCI, Momentum-Indikator, RSI und andere Indikatoren, um potenzielle lange und kurze Handelsmöglichkeiten zu identifizieren.

Strategie Logik

Die Handelssignale der Strategie stammen von einem benutzerdefinierten Indikator namens Edri Extreme Points Buy & Sell.

Lange Signalzeiten:

  1. Der Indikator Edri Extreme Points Buy & Sell löst ein Kaufsignal aus, d. h. ein CCI-Kreuz über 0 oder ein Momentum-Kreuz über 0, und der RSI liegt unter dem Überverkaufsniveau.
  2. Der Preis zieht sich zurück auf oder unter die 100-Perioden-EMA.

Kurzsignalbedingungen:

  1. Der Indikator Edri Extreme Points Buy & Sell löst ein Verkaufssignal aus, d. h. der CCI überschreitet unter 0 oder das Momentum überschreitet unter 0, und der RSI liegt über dem Überkaufniveau.
  2. Der Kurs zieht sich zurück auf oder über die 100-Perioden-EMA.

Die Strategie kann auch so konfiguriert werden, dass sie regelmäßige bullische/bärenische Divergenzen findet und nur dann Handelssignale erzeugt, wenn der RSI erheblich vom Preis abweicht.

Wenn Handelssignale ausgelöst werden, setzt die Strategie einen Stop-Loss zum Einstiegspreis ± 2ATR und einen Take-Profit zum Einstiegspreis ± 4ATR. Dies ermöglicht einen angemessenen Stop-Loss- und Take-Profit-Bereich basierend auf der Marktvolatilität.

Analyse der Vorteile

  1. Die Kombination mehrerer Indikatoren verhindert falsche Signale von einem einzigen Indikator.
  2. Der Umkehrhandelsstil erfasst mittelfristige Chancen auf den Märkten mit Range.
  3. Die ATR-basierte Stop-Loss- und Take-Profit-Regelung kann Positionen anhand der Marktvolatilität anpassen.
  4. Bei der Feststellung einer Divergenz wird vermieden, Positionen ohne extreme Überkauf-/Überverkaufswerte zu eröffnen.

Risikoanalyse

  1. Unzulängliche Indikatorparameter können zu fehlenden Chancen oder zu vielen falschen Signalen führen.
  2. Der Umkehrhandel kann in Trendmärkten zu aufeinanderfolgenden Stop-Loss führen.
  3. Die ATR hat eine Verzögerungseffekt und kann in schnelllebigen Märkten den Stop Loss/Take Profit nicht rechtzeitig aktualisieren.

Lösungen:

  1. Backtest und Optimierung der Indikatorparameter, um die beste Kombination zu finden.
  2. Erwägen Sie, die Strategie auszusetzen, wenn der Trend stark ist.
  3. Verknüpfen Sie sie mit anderen Stop-Loss-Methoden wie bewegender Stop-Loss oder konträrer Stop-Loss.

Optimierungsrichtlinien

  1. Versuche verschiedene Parameterkombinationen von CCI, Impulslänge, RSI-Parametern, ATR-Multiplikator usw.
  2. Hinzufügen anderer Filterbedingungen wie Preismuster, Volumenänderungen usw.
  3. Anpassen von Positionsgrößen wie ATR-basierte Positionsverhältnisse.
  4. Festlegen von Parametervorlagen für verschiedene Produkte und Zeitrahmen.
  5. Es sollte in Erwägung gezogen werden, den Trend-Tracking hinzuzufügen, um den Umkehrhandel in Trendmärkten auszusetzen.

Zusammenfassung

Die Strategie funktioniert hauptsächlich für Bereichsgebundene Märkte und erfasst mittelfristige Umkehrungen für relativ stetige Gewinne. Sie hilft, kurzfristige Preisspannungen zu identifizieren und erzeugt Handelssignale auf der Grundlage mehrerer Indikatoren. Mit der richtigen Optimierung und dem Risikomanagement können ihre Vorteile effektiv genutzt werden.


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-02 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/
// © MagicStrategies

//@version=5
strategy("Reversal Indicator Strategy", overlay = true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'], tooltip='CCI or Momentum will be the final source of the Entry signal if selected.')
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(true, title='Find Regular Bullish/Bearish Divergence', tooltip='If checked, it will only consider an overbought or oversold condition that has a regular bullish or bearish divergence formed inside that level.')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level', tooltip='Adjusting the level to extremely high may filter out some signals especially when the option to find divergence is checked.')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level', tooltip='Adjusting this level extremely low may filter out some signals especially when the option to find divergence is checked.')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(false, 'Plot Mean Reversion Bands on the chart', tooltip='This function doesn\'t affect the entry of signal but it suggests buying when the price is at the lower band, and then sell it on the next bounce at the higher bands.')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.8, title='Outer Bands Multiplier', tooltip='Multiplier for both upper and lower bands')


// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Entry Conditions
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)


// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na


// Plotting
plotshape(longEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(shortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

plot(upperBand, title='Upper Band', color=color.new(color.fuchsia, 0), linewidth=1)
plot(meanReversion, title='Mean', color=color.new(color.gray, 0), linewidth=1)
plot(lowerBand, title='Lower Band', color=color.new(color.blue, 0), linewidth=1)

// Entry signal alerts
alertcondition(longEntryCondition, title='BUY Signal', message='Buy Entry Signal')
alertcondition(shortEntryCondition, title='SELL Signal', message='Sell Entry Signal')
alertcondition(longEntryCondition or shortEntryCondition, title='BUY or SELL Signal', message='Entry Signal')

ema100 = ta.ema(close, 100)
plot(ema100, color=color.red)

// Define trading signals based on the original indicator's entry conditions
// Buy if long condition is met and price has pulled back to or below the 100 EMA
longCondition  = longEntryCondition and close <= ema100
// Sell if short condition is met and price has pulled back to or above the 100 EMA
shortCondition = shortEntryCondition and close >= ema100

// Strategy Entries
if longCondition
    strategy.entry("Buy", strategy.long)
if shortCondition
    strategy.entry("Sell", strategy.short)

Mehr