이 전략은 고전적인 상품 채널 지수 (CCI) 를 기반으로 하며, 장기적으로만 지속됩니다. CCI 지표가 극히 낮은 수준 (CCI <-150 또는 사용자 정의 기준) 에 있을 때 시장에 진출하고 힘을 되찾습니다 (즉, CCI> 이전 촛불의 CCI), 가격 자체의
이 전략은 스톱 로즈가 발생하거나 가격이 CCI 상단 범위를 넘어서면 종료됩니다.
목표는 트렌드의 전체 기간을 포착하기보다는 높은 수익률 (50% 이상) 을 달성하는 것입니다. 따라서 잠재적 인 손실을 보는 것을 싫어하는 사람들에게 적합합니다.
CCI 지표와 대역을 ta.sma ((() 를 사용하여 구성하고ta.dev() 함수.
입력값을 사용하여 백테스트 시작 날짜를 선택합니다.
입구 신호: CCI는 하위 대역 아래를 통과하고 증가하기 시작합니다. 추가 필터는 0.25%의 폐쇄 > 개방을 요구합니다.
출구 1: CCI가 상위 범위를 넘어서서 수익을 취합니다.
2번 출구: 가격이 스톱 로스 수준 아래로 떨어지면 손실을 줄이세요.
전략은 CCI의 힘에 기반해서 장기적으로만 진행되며 위험을 통제하기 위해 중단됩니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
CCI와 과잉 매수/ 과잉 판매를 확인하여 회환을 자본화합니다.
단지 긴 방향만이 나쁜 거래로 인한 과도한 위험을 피할 수 있습니다.
가격 강도 필터는 진입 전에 형성된 지지를 보장합니다.
스톱 로스 메커니즘은 거래당 손실을 제한하고 자본을 관리합니다.
유연한 백테스트 매개 변수
높은 수익률은 위험 관리에 집중하는 투자자들에게 적합합니다.
명확한 논리와 간단한 구현
또한 몇 가지 위험이 있습니다.
단기적인 하락 추세를 놓칠 수 있습니다.
CCI 매개 변수 조정이 안되면 실패가 됩니다.
너무 느슨한 스톱 손실은 손실을 제한하지 못합니다.
강한 상승 추세는 큰 손실을 초래하는 스톱을 통과합니다.
높은 거래 빈도는 거래 비용을 증가시킵니다.
가능한 해결책:
최고의 값을 찾기 위해 CCI 매개 변수를 최적화합니다.
위험과 미끄러짐을 균형을 맞추기 위해 스톱 로스를 조정합니다.
비용을 고려하여 입력 주파수를 관리합니다.
트렌드 및 범위 필터와 결합합니다.
전략을 개선할 수 있는 몇 가지 방법:
시장의 변동성에 따라 동적 정지를 구현합니다.
MACD와 같은 필터를 추가하여 너무 넓은 스톱을 피합니다.
CCI가 과열될 때 단축면을 포함합니다.
비용을 고려하고 최소 수익 목표를 설정합니다.
시간 프레임에 대한 파라미터 최적화
자동화된 매개 변수 조절을 위한 기계 학습
동적 할당을 위해 위치 크기를 추가합니다.
요약하자면, 이 장기 단위 전략은 가격 강도 필터와 스톱 손실로 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')