Keine Offset Ichimoku Cloud mit RSI-Filterstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-07 15:31:06
Tags:

img

Übersicht

Dies ist eine Trendfolgestrategie, die den Ichimoku Cloud-Indikator zur Trendidentifizierung und den RSI-Indikator zur Signalfilterung verwendet.

Strategie Logik

Die Strategie setzt hauptsächlich auf den Ichimoku-Cloud-Indikator, um die Trendrichtung zu bestimmen. Die Ichimoku-Cloud besteht aus der Konversionslinie, der Basislinie, der führenden Spanne 1, der führenden Spanne 2 und der Verzögerungsspanne.

Die Strategie prüft zunächst, ob der Preis durch die Wolkenlinien bricht. Ein Aufwärtstrend wird identifiziert, wenn die Verzögerungsspanne über die Wolke geht, während ein Abwärtstrend identifiziert wird, wenn die Verzögerungsspanne unter die Wolke geht. Nach Beginn des Trends verfolgt die Strategie die Beziehung des Preises zur Wolke, um die anhaltende Trendrichtung zu bestimmen. Der Aufwärtstrend bleibt intakt, wenn die Verzögerungsspanne über der Wolke liegt und umgekehrt.

Neben der Trendidentifizierung erzeugt die Strategie auch Kauf- und Verkaufssignale, wenn die Konversionslinie und die Basislinie ein goldenes Kreuz und ein Todeskreuz haben. Diese Handelssignale werden nur akzeptiert, wenn sie sich mit der Trendrichtung ausrichten. Zum Beispiel wird das goldene Kreuz zwischen Konversionslinie und Basislinie nur während eines Aufwärtstrends berücksichtigt.

Schließlich wird der RSI-Indikator verwendet, um die Handelssignale zu filtern. Nur Kaufsignale mit RSI unter dem Überverkaufsniveau und Verkaufssignale mit RSI über dem Überkaufsniveau werden akzeptiert. Dies hilft, falsche Ausbrüche zu einem gewissen Grad zu filtern.

Analyse der Vorteile

  • Die nicht-offsettierte Ichimoku-Cloud kann Trendveränderungen rechtzeitig erkennen, ohne Umkehrmöglichkeiten zu verpassen.

  • Mehrere Bedingungen arbeiten zusammen, um falsche Ausbruchssignale effektiv auszufiltern

  • RSI verhindert unerwünschten Markteintritt bei Überkauf und Überverkauf

  • Die Strategie ist mit Blick auf zukünftige Daten optimiert und kann auch im Live-Handel gute Ergebnisse erzielen

Risikoanalyse

  • Die Verwendung von zukünftigen Daten kann Fehler verursachen und erfordert Code-Optimierung vor Live-Handel

  • Die Ichimoku Cloud ist empfindlich auf Parameter und erfordert Parameter-Tuning für verschiedene Produkte

  • Bessere Ergebnisse beim Handel mit einem einzigen Produkt.

  • Viele Regeln für die Identifizierung von Trends erfordern angemessene Rückprüfungsperioden für die Validierung

Parameter können optimiert werden, um die beste Kombination zu finden. Kann den Handel mit bestimmten Produkten in Betracht ziehen oder Positionsgrößen reduzieren, um Risiken im Live-Handel zu kontrollieren. Stop-Loss-Strategien können auch eingeführt werden, um den Verlust pro Handel zu begrenzen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren Sie die Ichimoku Cloud-Parameter, um die besten Einstellungen für verschiedene Handelsprodukte zu finden

  2. Hinzufügen von Stop-Loss-Strategien, um den Verlust pro Handel auf ein akzeptables Niveau zu begrenzen

  3. Einführung von Positionsgrößenstrategien zur präzisen Steuerung des Gesamtrisikos

  4. Mehr technische Indikatoren wie Volatilität und Volumen für eine umfassende Signalüberprüfung hinzufügen

  5. Optimieren Sie Eingabeverfahren wie Bestätigungs- oder Pullback-Einträge für eine bessere Ausführung

  6. Ausführung einer Vorwärtsoptimierung zur Bestimmung der optimalen Bollinger-Bands-Rückblicksperiode auf der Grundlage der Produktmerkmale

Schlussfolgerung

Zusammenfassend ist dies eine ziemlich robuste Trendfolgestrategie. Es verwendet die Ichimoku Cloud zur Trendidentifizierung und die Konversionslinie / Basislinie kreuzt für Handelssignale, gefiltert durch RSI. Es gibt noch viel Raum für Optimierung durch Parameter-Tuning, Stop-Loss, Positionsgröße usw. Die Logik ist klar und leicht zu verstehen. Es berücksichtigt sowohl Trend als auch Risiken. Dies ist eine Strategie, die es wert ist, im Live-Handel überprüft zu werden.


/*backtest
start: 2022-10-31 00:00:00
end: 2023-02-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © KryptoNight

//@version=4
// comment/uncomment Study/Strategy to easily switch modes
// study("Ichimoku Kinko Hyo Cloud - no offset - no repaint - RSI filter - alerts", shorttitle="IchiCloud + RSI - alerts", overlay=true)
// ============================================================================== Strategy mode - uncomment to activate
strategy("Ichimoku Kinko Hyo Cloud - no offset - no repaint - RSI filter - strategy", shorttitle="IchiCloud + RSI - Strategy Tester Mode", overlay=true, pyramiding = 0,
  currency = currency.USD, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100,
  calc_on_every_tick = true, calc_on_order_fills = true, commission_type = strategy.commission.percent, commission_value = 0.075)
// ==============================================================================

// ------------------------------------------------------------------------------

ichiCloud_offset   = input(false, title="Standard Ichimoku Cloud")                  // with the visual offset
ichiCloud_noOffset = input(true,  title="Ichimoku Cloud - no offset - no repaint")  // without the visual offset

conversion_prd = input(9, minval=1, title="Conversion Line Period - Tenkan-Sen")
baseline_prd   = input(26, minval=1, title="Base Line Period - Kijun-Sen")
baselineA_prd  = input(52, minval=1, title="Base Line Period - Kijun-Sen (auxiliary)")
leadingSpan_2prd = input(52, minval=1, title="Lagging Span 2 Periods - Senkou Span B")
displacement = input(26, minval=0, title="Displacement: (-) Chikou Span; (+) Senkou Span A")
extra_bars = input(1, minval=0, title="Displacement: additional bars")
laggingSpan_src = input(close, title="Lagging Span price source - Chikou-Span")

donchian(len) => avg(lowest(len), highest(len))
displ = displacement-extra_bars
// ------------------------------------------------------------------------------
// OFFSET:
conversion = donchian(conversion_prd)   // Conversion Line - Tenkan-Sen (9 Period)
baseline  = donchian(baseline_prd)      // Base Line - Kijun-Sen (26 Period)
baselineA = donchian(baselineA_prd)     // Base Line Period - Kijun-Sen (auxiliary)
leadingSpanA = avg(conversion, baseline)
leadingSpanB = donchian(leadingSpan_2prd)
laggingSpan = laggingSpan_src

// Color - bullish, bearish
col_cloud = leadingSpanA>=leadingSpanB ? color.green : color.red

// Cloud Lines
spanA = plot(ichiCloud_offset? leadingSpanA : na, offset=displ, title="Offset: Lead Line 1 - Senkou Span A cloud", color=color.green)
spanB = plot(ichiCloud_offset? leadingSpanB : na, offset=displ, title="Offset: Lead Line 2 - Senkou Span B cloud", color=color.red)
fill(spanA, spanB, color=col_cloud, transp=80, title="Offset: Ichimoku Cloud - Leading Span 1 & 2 based coloring")

// Other Lines
conversion_p = plot(ichiCloud_offset? conversion : na, title="Offset: Conversion Line - Tenkan-Sen", color=#0496ff)
standard_p = plot(ichiCloud_offset? baseline : na, title="Offset: Base Line - Kijun-Sen", color=#991515)
standardA_p = plot(ichiCloud_offset? baselineA : na, title="Offset: Base Line - Kijun-Sen (auxiliary)", color=color.teal)
lagging_Span_p = plot(ichiCloud_offset? laggingSpan : na, offset=-displ, title="Offset: Chikou Span (Lagging Span)", color=#459915)

// ------------------------------------------------------------------------------
// NO OFFSET:
conversion_noOffset = conversion[displ] // Conversion Line - Tenkan-Sen (9 Period)
baseline_noOffset  = baseline[displ]    // Base Line - Kijun-Sen (26 Period)
baselineA_noOffset = baselineA[displ]   // Base Line Period - Kijun-Sen (auxiliary)
leadingSpanA_noOffset = leadingSpanA[displ*2]
leadingSpanB_noOffset = leadingSpanB[displ*2]
laggingSpan_noOffset = laggingSpan[0]

// Color - bullish, bearish
col_cloud_noOffset = leadingSpanA_noOffset>=leadingSpanB_noOffset ? color.green : color.red

// Cloud Lines
spanA_noOffset = plot(ichiCloud_noOffset? leadingSpanA_noOffset : na, title="No offset: Lead Line 1 - Senkou Span A cloud", color=color.green, transp=0)
spanB_noOffset = plot(ichiCloud_noOffset? leadingSpanB_noOffset : na, title="No offset: Lead Line 2 - Senkou Span B cloud", color=color.red, transp=0)
fill(spanA_noOffset, spanB_noOffset, color=col_cloud_noOffset, transp=80, title="No offset: Ichimoku Cloud - Leading Span 1 & 2 based coloring")

// Other Lines
conversion_p_noOffset = plot(ichiCloud_noOffset? conversion_noOffset : na, title="No offset: Conversion Line - Tenkan-Sen", color=#0496ff, transp=0)
baseline_p_noOffset = plot(ichiCloud_noOffset? baseline_noOffset : na, title="No offset: Base Line - Kijun-Sen", color=#991515, transp=0)
baselineA_p_noOffset = plot(ichiCloud_noOffset? baselineA_noOffset : na, title="No offset: Base Line - Kijun-Sen (auxiliary)", color=color.teal, transp=0)
laggingSpan_p_noOffset = plot(ichiCloud_noOffset? laggingSpan_noOffset : na, title="No offset: Chikou Span (Lagging Span)", color=#459915, transp=0)

// ==============================================================================
// Conditions & Alerts (based on the lines without offset)

maxC = max(leadingSpanA_noOffset,leadingSpanB_noOffset)
minC = min(leadingSpanA_noOffset,leadingSpanB_noOffset)

// Trend start signals: crosses between Chikou Span (Lagging Span) and the Cloud (Senkou Span A, Senkou Span B)
uptrend_start   = crossover(laggingSpan_noOffset,maxC)
downtrend_start = crossunder(laggingSpan_noOffset,minC)

// Trends
uptrend   = laggingSpan_noOffset>maxC // Above Cloud
downtrend = laggingSpan_noOffset<minC // Below Cloud

// No trend: choppy trading - the price is in transition
notrend = maxC>=laggingSpan_noOffset and laggingSpan_noOffset>=minC

// Confirmations
uptrend_confirm   = crossover(leadingSpanA_noOffset,leadingSpanB_noOffset)
downtrend_confirm = crossunder(leadingSpanA_noOffset,leadingSpanB_noOffset)

// Signals - crosses between Conversion Line (Tenkan-Sen) and Base Line (Kijun-Sen)
bullish_signal = crossover(conversion_noOffset,baseline_noOffset)
bearish_signal = crossunder(conversion_noOffset,baseline_noOffset)

// Various alerts
alertcondition(uptrend_start,   title="Uptrend Started",   message="Uptrend Started")
alertcondition(downtrend_start, title="Downtrend Started", message="Downtrend Started")

alertcondition(uptrend_confirm,   title="Uptrend Confirmed",   message="Uptrend Confirmed")
alertcondition(downtrend_confirm, title="Downtrend Confirmed", message="Downtrend Confirmed")

alertcondition(bullish_signal, title="Buy Signal",  message="Buy Signal")
alertcondition(bearish_signal, title="Sell Signal", message="Sell Signal")

rsi_OBlevel = input(50, title="RSI Filter: Overbought level (0 = off)")
rsi_OSlevel = input(100,title="RSI Filter: Oversold level (100 = off)")
rsi_len = input(14,title="RSI Length")
rsi_src = input(close,title="RSI Price source")
rsi = rsi(rsi_src,rsi_len)

// Strategy -------------------------------
long_signal  = bullish_signal and uptrend   and rsi<=rsi_OSlevel // breakout filtered by the rsi
exit_long    = bearish_signal and uptrend
short_signal = bearish_signal and downtrend and rsi>=rsi_OBlevel // breakout filtered by the rsi
exit_short   = bullish_signal and downtrend

// Strategy alerts
alertcondition(long_signal, title="Long Signal - Uptrend",      message="Long Signal - Uptrend")
alertcondition(exit_long,   title="Long Exit Signal - Uptrend", message="Long Exit Signal - Uptrend")

alertcondition(short_signal, title="Long Signal - Downtrend",       message="Long Signal - Downtrend")
alertcondition(exit_short,   title="Short Exit Signal - Downtrend", message="Short Exit Signal - Downtrend")

// Plot areas for trend and transition
color_trend = uptrend? #00FF00 : downtrend? #FF0000 : notrend? color.new(#FFFFFF, 50) : na
fill(spanA_noOffset, spanB_noOffset, color=color_trend, transp=90, title="No offset: Ichimoku Cloud - Lagging Span & Cloud based coloring")

plotshape(ichiCloud_noOffset?uptrend_start:na, title="No offset: Uptrend Started", color=color.green, style=shape.circle, location=location.belowbar, size=size.tiny, text="Up")
plotshape(ichiCloud_noOffset?downtrend_start:na, title="No offset: Downtrend Started", color=color.red, style=shape.circle,location=location.abovebar, size=size.tiny, text="Down")

plotshape(ichiCloud_noOffset?uptrend_confirm:na, title="No offset: Uptrend Confirmed", color=color.green, style=shape.circle, location=location.belowbar, size=size.small, text="Confirm Up")
plotshape(ichiCloud_noOffset?downtrend_confirm:na, title="No offset: Downtrend Confirmed", color=color.red, style=shape.circle, location=location.abovebar, size=size.small, text="Confirm Down")

plotshape(ichiCloud_noOffset?long_signal:na, title="No offset: Long Signal", color=#00FF00, style=shape.triangleup, location=location.belowbar, size=size.small, text="Long")
plotshape(ichiCloud_noOffset?exit_long:na, title="No offset: Exit Long Signal", color=color.fuchsia, style=shape.triangledown, location=location.abovebar, size=size.small, text="Exit long")

plotshape(ichiCloud_noOffset?short_signal:na, title="No offset: Short Signal", color=#FF0000, style=shape.triangledown, location=location.abovebar, size=size.small, text="Short")
plotshape(ichiCloud_noOffset?exit_short:na, title="No offset: Exit Short Signal", color=color.fuchsia, style=shape.triangleup, location=location.belowbar, size=size.small, text="Exit short")

// ============================================================================== Strategy Component - uncomment to activate
if (long_signal)
    strategy.entry("Long",strategy.long)
if (exit_long)
    strategy.close("Long")
if (short_signal)
    strategy.entry("Short",strategy.short)
if (exit_short)
    strategy.close("Short")
// ==============================================================================


Mehr