DCCI 탈퇴 전략

저자:차오장, 날짜: 2024-02-18 10:13:21
태그:

img

전반적인 설명

DCCI 브레이크아웃 전략 (DCCI Breakout Strategy) 은 CCI 지표를 사용하여 과잉 판매 및 과잉 구매 상황을 식별하는 단기 거래 전략이다. CCI 지표와 WMA 이동 평균선을 결합합니다. CCI 지표가 과잉 판매 구역에서 다시 반등할 때 길게 이동하고 CCI 지표가 과잉 구매 구역에서 다시 떨어지면 짧게 이동하여 수익을 얻었습니다.

전략 논리

이 전략은 CCI 지표를 사용하여 시장의 과반 구매/ 과반 판매 상황을 판단합니다. CCI 지표는 비정상적인 가격 상황을 효과적으로 식별 할 수 있습니다. -100 이하의 값은 시장이 과반 판매된 것을 나타냅니다. 100 이상의 값은 시장이 과반 구매된 것을 나타냅니다. CCI 지표가 아래에서 -100을 넘을 때 전략은 길게 갈 것이며 CCI 지표가 위에서 100을 넘을 때 짧게 갈 것입니다.

동시에, 전략은 또한 트렌드 방향을 결정하기 위해 WMA 이동 평균 라인을 통합합니다. 종료 가격이 WMA 라인 위에있을 때만 긴 신호가 유효합니다. 종료 가격이 WMA 라인 아래에있을 때만 짧은 신호가 유효합니다. 이것은 일부 모호한 거래 신호를 필터링하는 데 도움이됩니다.

포지션에 진입한 후 전략은 위험을 제어하기 위해 스톱 로스를 사용합니다. 세 가지 선택적 스톱 로스 방법이 있습니다. 고정 전략 스톱, 스윙 하이/로 스톱, ATR 스톱. 긴 경우 가격이 스톱 수준으로 떨어지면 포지션이 중단됩니다. 짧은 경우 가격이 스톱 수준으로 상승하면 포지션이 중단됩니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. CCI 지표를 이용한 역행률을 파악함으로써 과잉판매와 과잉구매 기회를 적시에 파악합니다.

  2. 이동 평균을 이용한 트렌드 방향 분석을 통합함으로써 트렌드에 반대하는 거래를 피합니다.

  3. 시장 조건에 따라 조정할 수 있는 선택적인 스톱 로스 방법을 제공합니다.

  4. 간단하고 명확한 거래 신호를 구현하기 쉽습니다.

위험 분석

이 전략은 또한 다음과 같은 위험을 가지고 있습니다.

  1. CCI 지표는 완전히 피할 수 없는 잘못된 신호를 쉽게 생성할 수 있습니다.

  2. 잘못된 스톱 손실 배치로 인해 오버 스톱 아웃이 발생할 수 있습니다.

  3. 동향을 파악할 수 없다는 것은 다양한 시장에서 불필요한 거래가 너무 많을 수 있다는 것을 의미합니다.

  4. 전체 시장 방향을 판단하지 못하는 것은 잘못된 방향으로 거래로 이어질 수 있습니다.

이러한 위험을 해결하기 위해 최적화 방법은 다음과 같습니다.

  1. CCI 신호를 필터링하기 위한 다른 지표를 포함합니다.

  2. 역 테스트를 통해 정지 위치를 최적화합니다.

  3. 추세 식별 지표를 추가하여 불안정한 시장을 피하십시오.

  4. 주요 지지 및 저항 영역 분석을 바탕으로 거래 방향을 결정합니다.

최적화 방향

이 전략을 최적화하는 주요 측면은 다음과 같습니다.

  1. CCI 매개 변수 최적화: CCI 룩백 기간을 조정하고 지표 매개 변수를 최적화합니다.

  2. 스톱 손실 최적화: 다른 스톱 방법을 테스트하고 최적의 스톱 손실을 선택하십시오. 후속 스톱을 추가하는 것을 고려하십시오.

  3. 필터 최적화: MACD, RSI와 같은 추가 필터를 추가하여 잘못된 신호를 줄이기 위해 다중 지표 필터 시스템을 구축합니다.

  4. 트렌드 필터링: 트렌드 식별 지표를 추가하여 트렌드 상거래를 피하기 위해 이동 평균과 같은 것을 추가합니다.

  5. 자동 이익 취득: 시장 변동성에 따라 자동으로 이익을 취득하는 동적인 이익 취득 메커니즘을 구축합니다.

결론

전체적으로 DCCI 브레이크아웃 전략은 매우 실용적인 단기 거래 시스템이다. CCI 지표를 사용하여 과반 구매/ 과반 판매 상황을 식별하고 방향 편향을 위한 이동 평균을 포함합니다. 위험은 스톱 손실을 통해 관리됩니다. 간단하고 명확한 신호는 단기 거래에 이 전략을 쉽게 구현합니다. 지속적인 테스트와 최적화는 전략 성능을 더욱 향상시킬 수 있습니다.


/*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)
    

더 많은