CCI 지표를 기반으로 한 추세 추종 전략


생성 날짜: 2023-11-24 10:53:07 마지막으로 수정됨: 2023-11-24 10:53:07
복사: 0 클릭수: 745
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

CCI 지표를 기반으로 한 추세 추종 전략

개요

이 전략은 CCI 지표에 기반한 트렌드 추적 전략이다. 그것은 두 개의 다른 주기의 CCI 지표를 사용하여 거래 신호를 생성한다. 구체적으로, 그것은 더 짧은 주기의 CCI 지표가 더 긴 주기의 CCI 지표를 돌파하는지 여부를 모니터링하고, 돌파의 방향에 따라 더 많이 또는 더 적게 결정한다.

전략 원칙

이 전략의 핵심 논리는 다음과 같습니다.

  1. 두 개의 CCI 지표를 정의합니다. ci1은 14주기, ci2은 56주기
  2. c1이 c2을 넘어서면 더 많은 일을 합니다.
  3. c1이 아래로 c2를 통과하면 공백이 됩니다.
  4. 거래 신호가 발신된 후, ci1 및 ci2의 수치를 통해 지분을 보유하는 평준을 결정합니다.

더 많은 것을 할 수 있는 구체적인 규칙은 다음과 같습니다.

  1. ci1 위에穿 ci2 즉 짧은 주기 CCI 위에穿 긴 주기 CCI
  2. 정지 조건: ci1<-50 그리고 변화율 또는 ci1이 100을 넘어가는 경우

이 문서는 다음과 같은 내용을 담고 있습니다.

  1. ci1 밑에 뚫은 ci2, 즉 짧은 주기 CCI 밑에 뚫은 긴 주기 CCI
  2. 스톱 손실 조건: ci1>100 및 변화율>0 또는 ci2 위에 착용 100

이 전략은 짧은 기간 CCI의 민감성과 긴 기간 CCI의 안정성을 활용하여 트렌드를 식별하고 추적하는 것을 볼 수 있습니다.

전략적 이점

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

  1. CCI 지표의 장점을 활용하여 트렌드를 효과적으로 식별할 수 있습니다.
  2. 이중 CCI 설계는 일부 노이즈 트랜잭션을 필터링할 수 있습니다.
  3. 장기 및 단기 CCI 지표의 조합을 통해 트렌드를 추적하면서 위험을 조절할 수 있습니다.
  4. 전략 규칙은 간단하고 명확하며 이해하기 쉽고 실행이 가능합니다.
  5. 구성성이 강하고 CCI 주기 및 중지 조건이 사용자 정의 할 수 있습니다.

전략적 위험

이 전략에는 몇 가지 위험도 있습니다.

  1. CCI 지표는 가로판과 진동상태에 대한 인식 능력이 약하다
  2. 짧은 주기의 CCI는 오차가 발생하여 거래 신호에 오류가 발생할 수 있습니다.
  3. 부적절하게 설정된 정지 조건은 더 큰 손실을 초래할 수 있습니다.
  4. 잘못된 매개 변수 설정은 전략 수익에도 큰 영향을 미칩니다.

위험과 대응하는 방법:

  1. 다른 지표와 함께 판단하여 불안정한 상황에서 거래하는 것을 피할 수 있습니다.
  2. 필터링 조건을 추가하여 짧은 주기의 CCI에서 벗어난 오류 신호를 방지합니다.
  3. 최적화 및 테스트 다양한 중지 조건
  4. 회수 및 변수 최적화를 통해 적절한 변수 조합을 선택

전략 최적화 방향

이 전략이 더 개선될 수 있는 부분은 다음과 같습니다.

  1. 다른 지표 판단을 추가하여 더 SYSTEM 거래 시스템을 형성합니다.
  2. 다른 주일과 세션의 수익 차이를 테스트합니다.
  3. 더 나은 변수를 찾기 위해 기계 학습을 이용한 방법
  4. 다양한 품종 특성에 따라 변수를 조정
  5. 포지션 개시 및 포지션 조건을 최적화

요약하다

이 전략은 전체적으로 장기 단기 CCI 지표의 돌파구를 기반으로 한 간단한 트렌드 추적 전략입니다. 그것은 트렌드 방향을 효과적으로 식별하고 트렌드를 추적 할 수 있습니다. 동시에 스톱 로즈와 같은 수단을 통해 위험을 제어합니다. 이 전략은 간단하고 실용적이며, 매개 변수를 조정하는 유연하며, 정량 거래의 입문 전략으로 사용할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="my work",calc_on_order_fills=true,currency=currency.USD, default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent)


source = close
shortlength=input(14)
longlength=input(56)
aa=input(2)
Ss=input(75)

//Cci part
ci1=cci(source,shortlength)   //4시간봉의 기본 cci
ci2=cci(source,longlength)   //4시간봉에서 12시봉의 cci 무빙측정

//오린간 선생님의 WT + ichimoku
len = input(10)
lenTurn = input(9)
lenStd = input(26)

wtm_e(so, l) =>
    esa = ema(so, l)
    d = ema(abs(so - esa), l)
    ci = (so - esa) / (0.015 * d)
    ema(ci, l*2+1)

alh(len) => avg(lowest(len), highest(len))
alh_src(src, len) => avg(lowest(src, len), highest(src, len))

wt = wtm_e(close,len)
turn = alh_src(wt, lenTurn)
std = alh_src(wt, lenStd)

cnt = 0
if wt > turn
    cnt:=cnt+1
if wt > std
    cnt:=cnt+1


//100,-100선
h0 = hline(100)
h1 = hline(-100)

//plot(ci,color=green)
// plot(k,color=green)
// plot(d,color=red)
plot(ci1,color=green)
plot(ci2,color=red)

plot(0,color=black)
plot(100,color=black)
plot(-100,color=black)

fill(h0,h1,color=purple,transp=95)

bgcolor(cnt==0 ? red : cnt==1 ? blue : cnt == 2 ? green : na, transp = Ss)

//기간조정

Fromday = input(defval=1, title="from day", minval=1, maxval=31)
FromMonth = input(defval=1, title="from month", minval=1, maxval=12)
FromYr = input(defval=2019, title="from yr", minval=1970)

Today = input(defval=13, title="to day", minval=1, maxval=31)
ToMonth = input(defval=12, title="to month", minval=1, maxval=12)
ToYr = input(defval=2019, title="to yr", minval=1970)

startDate = timestamp(FromYr, FromMonth, Fromday, 00, 00)
finishDate = timestamp(ToYr, ToMonth, Today, 00, 00)
Time_cond = true


/////롱

if  crossover(ci1,ci2) and change(ci2)>0 and Time_cond
    strategy.entry("go", strategy.long, comment="go")
    
strategy.close("go", (ci2<0 and ci1 <-50 and change(ci1)<0) or (crossunder(ci1,-100) and strategy.openprofit<0) and change(cnt)<0)



/////숏

if  (crossunder(ci1,ci2) and change(ci2)<0 and falling(ci1,aa)) and Time_cond
    strategy.entry("die", strategy.short, comment="die")
    
strategy.close("die", (ci2>0 and ci1 > 100 and change(ci1)>0) or (crossover(ci2,100) and strategy.openprofit<0) and change(cnt)>0)