Die DCCI Breakout-Strategie ist eine kurzfristige Handelsstrategie, die überverkaufte und überkaufte Situationen mit dem CCI-Indikator identifiziert. Sie kombiniert den CCI-Indikator und die gleitende Durchschnittslinie der WMA.
Die Strategie verwendet den CCI-Indikator, um die überkauften/überverkauften Bedingungen des Marktes zu beurteilen. Der CCI-Indikator kann wirksam abnormale Preissituationen identifizieren. Werte unter -100 deuten darauf hin, dass der Markt überverkauft ist, während Werte über 100 darauf hindeuten, dass der Markt überkauft ist. Die Strategie wird lang gehen, wenn der CCI-Indikator von unten über -100 geht; und wird kurz gehen, wenn der CCI-Indikator von oben unter 100 geht.
Gleichzeitig enthält die Strategie auch die gleitende Durchschnittslinie der WMA, um die Trendrichtung zu bestimmen. Nur wenn der Schlusskurs über der WMA-Linie liegt, sind lange Signale gültig; nur wenn der Schlusskurs unter der WMA-Linie liegt, sind kurze Signale gültig. Dies hilft, einige zweideutige Handelssignale zu filtern.
Nach dem Eintritt in eine Position verwendet die Strategie Stop Loss, um Risiken zu kontrollieren. Es gibt drei optionale Stop-Loss-Methoden: Fixed Strategy Stop, Swing High/Low Stop, ATR Stop. Bei Long wird die Position gestoppt, wenn der Preis auf das Stop-Niveau fällt; bei Short wird die Position gestoppt, wenn der Preis auf das Stop-Niveau steigt.
Die Strategie weist folgende Vorteile auf:
Erfasst Überverkaufs- und Überkaufsmöglichkeiten rechtzeitig, indem die Umkehrungen anhand des CCI-Indikators ermittelt werden.
Vermeidet den gegen den Trend gerichteten Handel, indem Trendrichtungsanalysen mit gleitenden Durchschnitten durchgeführt werden.
Es gibt mehrere optionale Stop-Loss-Methoden, die je nach Marktbedingungen angepasst werden können.
Einfache und klare Handelssignale, die leicht umzusetzen sind.
Die Strategie birgt außerdem folgende Risiken:
Der CCI-Indikator kann leicht falsche Signale erzeugen, die nicht vollständig vermieden werden können.
Eine falsche Stop-Loss-Platzierung kann zu einem Überstop-Out führen.
Die Unfähigkeit, Trends zu erkennen, führt dazu, dass in unterschiedlichen Märkten zu viele unnötige Trades generiert werden.
Die Unfähigkeit, die allgemeine Marktrichtung zu beurteilen, kann dazu führen, dass der Handel in die falsche Richtung geht.
Um diesen Risiken entgegenzuwirken, sind die wichtigsten Optimierungsansätze:
Einbeziehung anderer Indikatoren zur Filterung von CCI-Signalen.
Optimieren Sie die Haltestelle durch Backtesting.
Hinzufügen von Trendindikatoren, um unruhige Märkte zu vermeiden.
Bestimmung der Handelsrichtung auf der Grundlage der Analyse der wichtigsten Unterstützungs- und Widerstandsbereiche.
Zu den wichtigsten Aspekten für die Optimierung dieser Strategie gehören:
CCI-Parameteroptimierung: Anpassung der CCI-Rückblicksperiode, Optimierung der Indikatorparameter.
Stop-Loss-Optimierung: Verschiedene Stop-Methoden testen und den optimalen Stop-Loss auswählen.
Filteroptimierung: Zusätzliche Filter wie MACD, RSI hinzufügen, um ein Multi-Indikator-Filtersystem zu erstellen, um falsche Signale zu reduzieren.
Trendfilterung: Hinzufügen von Trendindikatoren wie gleitenden Durchschnitten, um Gegentrendgeschäfte zu vermeiden.
Automatische Gewinnentnahme: Erstellen dynamischer Gewinnentnahme-Mechanismen, um automatisch Gewinn zu erzielen, basierend auf der Marktvolatilität.
Insgesamt ist die DCCI Breakout-Strategie ein sehr praktisches kurzfristiges Handelssystem. Sie identifiziert Überkauf/Überverkaufssituationen mithilfe des CCI-Indikators und enthält den gleitenden Durchschnitt für Richtungsschwankungen. Das Risiko wird durch Stop-Losses verwaltet. Die einfachen und klaren Signale machen diese Strategie für den kurzfristigen Handel einfach umzusetzen. Kontinuierliches Testen und Optimieren kann die Strategieleistung weiter verbessern.
/*backtest start: 2023-02-11 00:00:00 end: 2023-09-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/ // © tweakerID // ---From the "Bitcoin Trading Strategies" book, by David Hanson--- // After testing, works better with an ATR stop instead of the Strategy Stop. This paramater // can be changed from the strategy Inputs panel. // "CCI Scalping Strategy // Recommended Timeframe: 5 minutes // Indicators: 20 Period CCI, 20 WMA // Long when: Price closes above 20 WMA and CCI is below -100, enter when CCI crosses above -100. // Stop: Above 20 WMA" //@version=4 strategy("CCI Scalping Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, commission_value=0.04, calc_on_every_tick=false, slippage=0) direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) /////////////////////// STRATEGY INPUTS //////////////////////////////////////// title1=input(true, "-----------------Strategy Inputs-------------------") i_Stop = input(0, step=.05, title="Strategy Stop Mult")*.01 i_CCI=input(16, title="CCI Length") i_WMA=input(5, title="WMA Length") /////////////////////// BACKTESTER ///////////////////////////////////////////// title2=input(true, "-----------------General Inputs-------------------") // Backtester General Inputs i_SL=input(true, title="Use Stop Loss and Take Profit") i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"]) i_SPL=input(defval=10, title="Swing Point Lookback") i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01 i_ATR = input(14, title="ATR Length") i_ATRMult = input(10, step=.1, title="ATR Multiple") i_TPRRR = input(1.5, step=.1, title="Take Profit Risk Reward Ratio") // Bought and Sold Boolean Signal bought = strategy.position_size > strategy.position_size[1] or strategy.position_size < strategy.position_size[1] // Price Action Stop and Take Profit LL=(lowest(i_SPL))*(1-i_PercIncrement) HH=(highest(i_SPL))*(1+i_PercIncrement) LL_price = valuewhen(bought, LL, 0) HH_price = valuewhen(bought, HH, 0) entry_LL_price = strategy.position_size > 0 ? LL_price : na entry_HH_price = strategy.position_size < 0 ? HH_price : na tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR // ATR Stop ATR=atr(i_ATR)*i_ATRMult ATRLong = ohlc4 - ATR ATRShort = ohlc4 + ATR ATRLongStop = valuewhen(bought, ATRLong, 0) ATRShortStop = valuewhen(bought, ATRShort, 0) LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR /////////////////////// STRATEGY LOGIC ///////////////////////////////////////// //CCI CCI=cci(close, i_CCI) //WMA WMA=wma(close, i_WMA) //Stops LongStop=valuewhen(bought, WMA, 0)*(1-i_Stop) ShortStop=valuewhen(bought, WMA, 0)*(1+i_Stop) StratTP=strategy.position_avg_price + (strategy.position_avg_price - LongStop)*i_TPRRR StratSTP=strategy.position_avg_price - (ShortStop - strategy.position_avg_price)*i_TPRRR BUY = (close > WMA) and crossover(CCI , -100) SELL = (close < WMA) and crossunder(CCI , 100) //Trading Inputs DPR=input(true, "Allow Direct Position Reverse") reverse=input(false, "Reverse Trades") // Entries if reverse if not DPR strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0) strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0) else strategy.entry("long", strategy.long, when=SELL) strategy.entry("short", strategy.short, when=BUY) else if not DPR strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0) strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0) else strategy.entry("long", strategy.long, when=BUY) strategy.entry("short", strategy.short, when=SELL) SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL) strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL) /////////////////////// PLOTS ////////////////////////////////////////////////// plot(WMA) plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red) plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red) plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green) plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green) // Draw price action setup arrows plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup", size=size.auto) plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup", size=size.auto)