CCI-Strategie für einen starken Durchbruch

Schriftsteller:ChaoZhang, Datum: 2023-11-15 16:52:06
Tags:

img

Übersicht

Diese Strategie basiert auf dem klassischen Commodity Channel Index (CCI) und dauert nur lange. Sie tritt in den Markt ein, wenn der CCI-Indikator auf einem extrem niedrigen Niveau (CCI <-150 oder benutzerdefinierter Schwellenwert) ist und wieder an Bedeutung gewinnt (d. h. CCI> CCI der vorherigen Kerze), mit einem Filter auf die Stärke der Preise selbst (d. h. das Schließen der Signalleiste muss über eine gewisse Differenz liegen - festgesetzt bei 0,25% - von der Öffnung).

Die Strategie wird beendet, wenn entweder der Stop-Loss ausgelöst wird oder die Preise über das obere CCI-Band steigen.

Das Ziel ist es, einen hohen Prozentsatz von profitablen Trades (weit über 50%) zu erzielen, anstatt die gesamte Dauer eines Trends zu erfassen.

Strategie Logik

  1. Konstruktion von CCI-Indikatoren und -Bändern unter Verwendung von ta.sma() undta.dev() Funktionen.

  2. Verwenden Sie die Eingabe, um das Startdatum für den Backtest auszuwählen.

  3. Eintrittssignal: CCI überschreitet den unteren Bereich und beginnt zu steigen.

  4. Ausgang 1: CCI steigt über den oberen Bereich und macht Gewinn.

  5. Ausgang 2: Preis fällt unter die Stop-Loss-Level, Verluste reduzieren.

  6. Die Strategie ist nur langfristig und basiert auf der Stärke von CCI, mit Stopps zur Risikokontrolle.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Kommission stellt fest, dass die in Artikel 107 Absatz 1 Buchstabe c der Verordnung (EU) Nr. 1303/2013 festgelegten Kriterien erfüllt sind.

  2. Nur eine langfristige Orientierung vermeidet ein übermäßiges Risiko durch schlechte Trades.

  3. Der Filter für die Preisstärke sorgt dafür, dass sich die Unterstützung vor dem Eintritt bildet.

  4. Der Stop-Loss-Mechanismus begrenzt Verluste pro Handel und verwaltet Kapital.

  5. Flexible Backtestparameter zur Anpassung der Eingangsfilter.

  6. Eine hohe Gewinnrate passt zu Investoren, die sich auf das Risikomanagement konzentrieren.

  7. Klare Logik und einfache Umsetzung.

Risikoanalyse

Es gibt auch einige Risiken:

  1. Nur langfristig zu gehen, kann kurzfristige Abwärtstrends verpassen.

  2. Eine schlechte Abstimmung der CCI-Parameter führt zu einem Ausfall.

  3. Stopp-Loss zu locker begrenzt Verluste nicht.

  4. Ein starker Aufwärtstrend schlägt durch Stops und verursacht große Verluste.

  5. Eine hohe Handelsfrequenz erhöht die Transaktionskosten.

Mögliche Lösungen:

  1. Optimieren Sie die CCI-Parameter, um die besten Werte zu finden.

  2. Anpassung des Stop-Loss, um Risiko und Schlupf auszugleichen.

  3. Verwalten Sie die Eintrittshäufigkeit unter Berücksichtigung der Kosten.

  4. Kombination mit Trend- und Bereichsfiltern.

Möglichkeiten zur Verbesserung

Einige Möglichkeiten zur Verbesserung der Strategie:

  1. Implementieren dynamischer Stopps basierend auf der Marktvolatilität.

  2. Fügen Sie Filter wie MACD hinzu, um zu vermeiden, dass die Stops zu breit sind.

  3. Kurzseite einbinden, wenn sich CCI überhitzt.

  4. Betrachten Sie die Kosten, setzen Sie ein Mindestgewinnziel.

  5. Optimieren Sie die Parameter für den Zeitrahmen.

  6. Maschinelles Lernen für die automatisierte Parameter-Tuning.

  7. Hinzufügen von Positionsgrößen für die dynamische Zuordnung.

Schlussfolgerung

Zusammenfassend kann gesagt werden, dass diese Long-Only-Strategie auf CCI-Overbought/Oversold-Levels mit Preisstärkefilter und Stop-Losses setzt. Sie bietet eine einfache Implementierung, eine gute Risikokontrolle und einen hohen Gewinnprozentsatz. Die Einschränkungen von Long-Only- und Fixed-Stops können durch Parameteroptimierung, Short-Einträge, dynamische Stops usw. behoben werden.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='CCI High Performance long only', overlay=false )
src = input(close)
length = input.int(20, title='Period', minval=1)
lossp = input.float(8, title='Stop Loss percentage', minval=0.5, step=0.5)
scart = input.float(0.25, title='Close of the signal bar higher than Open %', minval = 0)
upperline = input.int(150, title='Upper Band', minval=0, step=10)
lowline = input.int(-150, title='Low Band', maxval=0, step=10)


// construction of CCI (not on close but in totalprice) and of bands
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, 'CCI', color=color.new(#996A15, 0))
band1 = hline(upperline, 'Upper Band', color=#C0C0C0, linestyle=hline.style_dashed)
band0 = hline(lowline, 'Lower Band', color=#C0C0C0, linestyle=hline.style_dashed)
fill(band1, band0, color=color.new(#9C6E1B, 90), title='Background')
// === INPUT BACKTEST RANGE ===
fromMonth = input.int(defval = 1,    title = "From Month",  minval = 1, maxval = 12)
fromDay   = input.int(defval = 1,    title = "From Day",    minval = 1, maxval = 31)
fromYear  = input.int(defval = 2016, title = "From Year",   minval = 1970)
thruMonth = input.int(defval = 1,    title = "Thru Month",  minval = 1, maxval = 12)
thruDay   = input.int(defval = 1,    title = "Thru Day",    minval = 1, maxval = 31)
thruYear  = input.int(defval = 2112, title = "Thru Year",   minval = 1970)
// === FUNCTION EXAMPLE limit for backtest ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)            // backtest start  window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)            // backtest finish window
window()  => time >= start and time <= finish ? true : false           // create function "within window of time"
//ENTRY CONDITIONS

// strategy: enter when CCI is under the low line and starts increasing. The filter is that the signal candle should mark a close higher than a x-percent
// (0.25%) of the open
// Exit when either when it reaches the target of a prices highest than high level of CCI or fixed stop loss (in percentage)
scart_level = open * (1+scart/100)
entryl = cci[1] < lowline[1] and cci > cci[1] and close > scart_level and window()
exit1 = cci> upperline
strategy.entry('Long', strategy.long, when=entryl)
strategy.close('Long', when=exit1, comment='target')

// money management (only stop loss)
losspel = strategy.position_avg_price * (1 - lossp / 100)
fixed_stop_long = close < losspel
strategy.close('Long', when=fixed_stop_long, comment='Stop Loss')



Mehr