DCCI-Ausbruchstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-18 10:13:21
Tags:

img

Übersicht

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.

Strategie Logik

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.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Erfasst Überverkaufs- und Überkaufsmöglichkeiten rechtzeitig, indem die Umkehrungen anhand des CCI-Indikators ermittelt werden.

  2. Vermeidet den gegen den Trend gerichteten Handel, indem Trendrichtungsanalysen mit gleitenden Durchschnitten durchgeführt werden.

  3. Es gibt mehrere optionale Stop-Loss-Methoden, die je nach Marktbedingungen angepasst werden können.

  4. Einfache und klare Handelssignale, die leicht umzusetzen sind.

Risikoanalyse

Die Strategie birgt außerdem folgende Risiken:

  1. Der CCI-Indikator kann leicht falsche Signale erzeugen, die nicht vollständig vermieden werden können.

  2. Eine falsche Stop-Loss-Platzierung kann zu einem Überstop-Out führen.

  3. Die Unfähigkeit, Trends zu erkennen, führt dazu, dass in unterschiedlichen Märkten zu viele unnötige Trades generiert werden.

  4. 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:

  1. Einbeziehung anderer Indikatoren zur Filterung von CCI-Signalen.

  2. Optimieren Sie die Haltestelle durch Backtesting.

  3. Hinzufügen von Trendindikatoren, um unruhige Märkte zu vermeiden.

  4. Bestimmung der Handelsrichtung auf der Grundlage der Analyse der wichtigsten Unterstützungs- und Widerstandsbereiche.

Optimierungsrichtlinien

Zu den wichtigsten Aspekten für die Optimierung dieser Strategie gehören:

  1. CCI-Parameteroptimierung: Anpassung der CCI-Rückblicksperiode, Optimierung der Indikatorparameter.

  2. Stop-Loss-Optimierung: Verschiedene Stop-Methoden testen und den optimalen Stop-Loss auswählen.

  3. Filteroptimierung: Zusätzliche Filter wie MACD, RSI hinzufügen, um ein Multi-Indikator-Filtersystem zu erstellen, um falsche Signale zu reduzieren.

  4. Trendfilterung: Hinzufügen von Trendindikatoren wie gleitenden Durchschnitten, um Gegentrendgeschäfte zu vermeiden.

  5. Automatische Gewinnentnahme: Erstellen dynamischer Gewinnentnahme-Mechanismen, um automatisch Gewinn zu erzielen, basierend auf der Marktvolatilität.

Schlussfolgerung

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)
    

Mehr