Trendfolgestrategie basierend auf dem Stochastik-Indikator und dem CCI-Indikator


Erstellungsdatum: 2023-11-22 16:23:31 zuletzt geändert: 2023-11-22 16:23:31
Kopie: 1 Klicks: 844
1
konzentrieren Sie sich auf
1617
Anhänger

Trendfolgestrategie basierend auf dem Stochastik-Indikator und dem CCI-Indikator

Überblick

Die Strategie kombiniert Stochastic und CCI, um die Richtung des Trends zu erkennen. Die Rate of Change-Indikatoren filtern die Trendschwankungen aus und ermöglichen die Verfolgung des Trends. Die Strategie nutzt den Handel mit einem Durchbruch-Eintritt und einem Verlust-Ausgang.

Strategieprinzip

  1. Stochastische Indikatoren für die Beurteilung von Leerzeichen
    Ein Stochastic-Indikator ist ein Kaufsignal, wenn er über die letzte Bar geht, und ein Verkaufsignal, wenn er über die letzte Bar geht.
  2. CCI-Indikatoren für Trends
    CCI größer als 0 für den Mehrkopfmarkt und kleiner als 0 für den Leerkopfmarkt
  3. Rate of Change-Indikator filtert Schwankungen
    Setzen Sie die Parameter für die Rate of Change, um zu bestimmen, ob der Preis in einem aktiven Trend ist
  4. Ein- und Ausstiegsregeln
    Kaufsignal: Stochastic auf der letzten Bar und CCI ist größer als 0 und der Preistrend ist aktiv
    Verkaufssignal: Stochastic unterhalb der letzten Bar und CCI kleiner als 0 und der Preistrend ist aktiv
    Stop loss exit: 3% Stop loss für die langen und 3% Stop loss für die kurzen Linien

Analyse der Stärken

  1. Die Kombination von Stochastic und CCI zeigt eine hohe Genauigkeit bei der Beurteilung der Trendrichtung
  2. Der Rate of Change-Indikator ist eine effektive Methode, um Trendschwankungen abzuwehren und unwirksame Transaktionen zu vermeiden.
  3. Mehrsprachige, zweiseitige Trades, die verschiedene Arten von Trends erfassen
  4. Eintritt in die Branche, Trendverfolgung und Chancen für die Branche
  5. Strenge Schadensbegrenzung, Vermeidung großer Verluste und effektive Risikokontrolle

Risikoanalyse

  1. Die falsche Einstellung der Strategieparameter kann zu konservativ oder radikal sein
  2. Der Indikator hat nur begrenzte Wirkung und kann im Extremfall fehlschlagen.
  3. Ein brecherischer Eintritt überspringt die Anfangsphase des Trends und schneidet einen Teil der Gewinne ab.
  4. Zu kleine Stop-Losses sind leicht zu durchbrechen, zu große sind oftmals unzureichend kontrolliert.

Optimierungsrichtung

  1. Optimierung von Parametern: Verbesserung der Parameter-Einstellungen, um die optimale Kombination von Parametern zu finden
  2. Mehrere Indikatoren zusammenarbeiten. Hinzufügen von Indikatoren für mehr Beurteilungstrends, um die Entscheidungswirksamkeit zu verbessern
  3. Aktiver Stopp: Setzt Tracking-Stopp oder Time-Step-Stopp ein, um die Wahrscheinlichkeit zu verringern, dass der Stopp durchbrochen wird
  4. Risikobewertung. Einschränkung von Risikoindikatoren wie maximaler Rücknahme, umfassende Kontrolle der Risikolocke

Zusammenfassen

Die Strategie integriert Stochastic, CCI und Rate of Change, die drei wichtigsten Indikatoren, um die Richtung des Trends zu bestimmen, um die Trendchancen zu überwinden. Der Vorteil der Strategie besteht darin, dass die Indikatoren mit einer genauen Beurteilung und einer effektiven Filterung der Schwingung kombiniert werden. Durch strenge Stop-Loss-Kontrolle kann das Risiko verbessert werden.

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

//@version=4
strategy("Stochastic CCI BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// CCI ///////////// 
src = close
ccilength = input(13, minval=1, title="CCI Length")
c=cci(src, ccilength)

///////////// Stochastic ///////////// 
len = input(19, minval=1, title="RSI Length")
lenema = input(12, minval=1, title="RSI-EMA Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
out = ema(rsi, lenema)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = out > out[1] and isMoving() and c > 0
short = out < out[1] and isMoving() and c < 0

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(3.0, title='Stop Loss %') / 100 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)
    strategy.exit("L Ex", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S Ex", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(not isMoving() ? color.white : long ? color.lime : short ? color.red : na, transp=80)
plot(out, color = out > out[1] ? color.lime:color.red, linewidth = 2, title="Stoch")
plot(c, color = c > 0 ? color.lime:color.red, linewidth = 2, title="CCI")