CCI의 강력한 돌파구 전략

저자:차오장, 날짜: 2023-11-15 16:52:06
태그:

img

전반적인 설명

이 전략은 고전적인 상품 채널 지수 (CCI) 를 기반으로 하며, 장기적으로만 지속됩니다. CCI 지표가 극히 낮은 수준 (CCI <-150 또는 사용자 정의 기준) 에 있을 때 시장에 진출하고 힘을 되찾습니다 (즉, CCI> 이전 촛불의 CCI), 가격 자체의 강도에 대한 필터 (즉, 신호 바의 폐쇄는 개시에서 0.25%로 고정된 특정 차이보다 높아야합니다).

이 전략은 스톱 로즈가 발생하거나 가격이 CCI 상단 범위를 넘어서면 종료됩니다.

목표는 트렌드의 전체 기간을 포착하기보다는 높은 수익률 (50% 이상) 을 달성하는 것입니다. 따라서 잠재적 인 손실을 보는 것을 싫어하는 사람들에게 적합합니다.

전략 논리

  1. CCI 지표와 대역을 ta.sma ((() 를 사용하여 구성하고ta.dev() 함수.

  2. 입력값을 사용하여 백테스트 시작 날짜를 선택합니다.

  3. 입구 신호: CCI는 하위 대역 아래를 통과하고 증가하기 시작합니다. 추가 필터는 0.25%의 폐쇄 > 개방을 요구합니다.

  4. 출구 1: CCI가 상위 범위를 넘어서서 수익을 취합니다.

  5. 2번 출구: 가격이 스톱 로스 수준 아래로 떨어지면 손실을 줄이세요.

  6. 전략은 CCI의 힘에 기반해서 장기적으로만 진행되며 위험을 통제하기 위해 중단됩니다.

이점 분석

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

  1. CCI와 과잉 매수/ 과잉 판매를 확인하여 회환을 자본화합니다.

  2. 단지 긴 방향만이 나쁜 거래로 인한 과도한 위험을 피할 수 있습니다.

  3. 가격 강도 필터는 진입 전에 형성된 지지를 보장합니다.

  4. 스톱 로스 메커니즘은 거래당 손실을 제한하고 자본을 관리합니다.

  5. 유연한 백테스트 매개 변수

  6. 높은 수익률은 위험 관리에 집중하는 투자자들에게 적합합니다.

  7. 명확한 논리와 간단한 구현

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 단기적인 하락 추세를 놓칠 수 있습니다.

  2. CCI 매개 변수 조정이 안되면 실패가 됩니다.

  3. 너무 느슨한 스톱 손실은 손실을 제한하지 못합니다.

  4. 강한 상승 추세는 큰 손실을 초래하는 스톱을 통과합니다.

  5. 높은 거래 빈도는 거래 비용을 증가시킵니다.

가능한 해결책:

  1. 최고의 값을 찾기 위해 CCI 매개 변수를 최적화합니다.

  2. 위험과 미끄러짐을 균형을 맞추기 위해 스톱 로스를 조정합니다.

  3. 비용을 고려하여 입력 주파수를 관리합니다.

  4. 트렌드 및 범위 필터와 결합합니다.

더 나은 기회

전략을 개선할 수 있는 몇 가지 방법:

  1. 시장의 변동성에 따라 동적 정지를 구현합니다.

  2. MACD와 같은 필터를 추가하여 너무 넓은 스톱을 피합니다.

  3. CCI가 과열될 때 단축면을 포함합니다.

  4. 비용을 고려하고 최소 수익 목표를 설정합니다.

  5. 시간 프레임에 대한 파라미터 최적화

  6. 자동화된 매개 변수 조절을 위한 기계 학습

  7. 동적 할당을 위해 위치 크기를 추가합니다.

결론

요약하자면, 이 장기 단위 전략은 가격 강도 필터와 스톱 손실로 CCI 과잉 구매/ 과잉 판매 수준을 활용합니다. 그것은 쉬운 구현, 좋은 위험 통제 및 높은 승률을 제공합니다. 단위 최적화, 단위 엔트리, 동적 스톱 등을 통해 장기 단위 및 고정 스톱의 한계를 해결할 수 있습니다. 이 전략은 높은 승률과 적절한 위험 관리를 추구하는 투자자에게 적합합니다.


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



더 많은