파인 스크립트 지표 만들기

파인스크립트로 CCI 지표를 만들어보자

Going Run V 2022. 7. 9.
반응형

CCI

 

 

파인스크립트로 CCI 지표를 만들어보자

트레이딩뷰 하단에 지표를 만드는 창이있다.


1. CCI는 어떤 지표일까?

 

CCI(상품 채널 지수 : Commodity Channel Index)는 

1980년 Donald Lambert에 의해 만들어진 처음 도입한 오실레이터입니다.

도입 이후 이 지표는 인기가 높아져 이제 트레이더가 상품뿐만 아니라 
주식 및 통화의 주기적 추세를 식별하는 데 매우 일반적인 도구가 되었습니다. 
CCI는 평균 기간을 변경하여 거래되는 시장의 시간대에 맞게 조정할 수 있습니다.

더욱 자세하게 공부하고 싶다면 아래에 링크에서 참고하시면 됩니다.

https://en.wikipedia.org/wiki/Commodity_channel_index


2. 트레이딩 뷰에서 제공하는 CCI의 기본 소스코드

//@version=5
indicator(title="Commodity Channel Index", shorttitle="CCI", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

 

  • version = 해당 지표의 버전을 나타냅니다.
  • indicator = 지표의 제목과 부제목 기본적인 설정 등을 합니다.
  • len = 인풋 값을 인트로 주고 기간을 20일로 정합니다.
  • src = source의 약어입니다. close는 종가를 나타냅니다.
  • ma, cci =  cci를 구하는 공식입니다.(굳이 안 외우셔도 됩니다.)
  • plot = rsi를 차트 위에 빨간색으로 출력합니다.
  • band1, band0 = hline(가로선)을 차트 위에 출력합니다.
  • fill = band1, band0 사이에 배경을 출력합니다.

 

기본적으로 트레이딩 뷰에서 제공하는 CCI를 이용해서

아래에서는 이 내용에 추가적인 기능을 넣어서

조금 더 쉽고 간결하게 만들어보겠습니다.


3. 파인스크립트 지표의 버전 설정하기.

//@version=3
//@version=4
//@version=5

 

지표를 만들기에 앞서 어떤 언어를 사용할 건지에 대한 버전을 입력해야 합니다.

앞으로 다루게 될 내용에서는 버전 5를 사용할 예정입니다.

이유는 버전 5 밑으로는 트레이딩 뷰에서 리버전 하는 기능이 있기에 호환이 가능합니다.

그리고 또한 구현하는 함수들이 사용하기 쉽도록 더욱 간결해졌습니다.

 

4. CCI의 타이틀 설정하기

//@version=5
indicator(title="Commodity Channel Index", shorttitle="CCI", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))

 

  • title = 스크립트의 이름을 설정합니다. 
  • shorttitle = 스크립트에 단축된 이름을 설정합니다. 
  • overlay = 스크립트를 차트 위에 표시합니다. 
  • format = 스크립트의 플롯 된 값이 가격 척도에 사용하는 형식을 정의합니다.
  • precision = 스크립트의 값에 나타나는 소수 자릿수를 설정합니다.

5. CCI의 함수 설정하고 라인 출력하기

//@version=5
indicator(title="Commodity Channel Index", shorttitle="CCI", format=format.price, precision=2, timeframe="", timeframe_gaps=true)

//cci 함수 정의
len = input.int(20, minval=1, title='cci_Length')
src = input(hlc3, title="cci_Source")
///////////////////////////////////////////////
//예시1)
//ma = ta.sma(src, len)
//cci = (src - ma) / (0.015 * ta.dev(src, len))
///////////////////////////////////////////////
//예시2)
cci = ta.cci(src, len)

//cci 출력
plot(cci, title='cci', color=color.yellow, linewidth=2)

 

버전 5 파인 스크립트에서는 ta.***라는 함수로 간단하게 지표를 불러올 수 있습니다.

cci는 (hlc3, 기간=20)로 정의하고 출력해보겠습니다.

plot(차트 위에 cci를 색상은 노란색, 라인 굵기는 2로 출력합니다.)

  


6. CCI의 상단선 중간선 하단선 설정하기

Top_line = hline(100, title='상단선', color=color.new(color.white, 50), linestyle=hline.style_dotted, linewidth=1)
Middle_line = hline(0, title='중간선', color=color.new(color.white, 50), linestyle=hline.style_dotted, linewidth=1)
Bottom_line = hline(-100, title='하단선', color=color.new(color.white, 50), linestyle=hline.style_dotted, linewidth=1)

 

여기서 CCI는 RSI랑은 다르게 기간은 14가 아닌 20으로

구간은 100 / 0 / -100으로 구분이 됩니다.

color=color.new(color. 색상, 0~100)

color.new 함수로 색상과 투명도를 설정할 수 있습니다.

linestyle=(hline.style_dotted // hline.style_solid // hline.style_dashed)

라인의 스타일을 설정할 수 있습니다.

linewidth=1

라인 굵기입니다.

 


7. CCI의 과매도 구간 과매수 구간 색칠하기

//cci 매도 매수 구간

overbought = plot(100, title='과매수구간1', color=color.new(color.white, 100), editable=false)
oversold = plot(-100, title='과매도구간1', color=color.new(color.white, 100), editable=false)

obcolor = plot(cci > 100 ? cci : 100, title='과매수구간2', color=color.new(color.red, 100), editable=false)
oscolor = plot(cci < -100 ? cci : -100, title='과매도구간2', color=color.new(color.red, 100), editable=false)

fill(overbought, obcolor, color=color.new(color.red, 30), title='과매수구간')
fill(oversold, oscolor, color=color.new(color.blue, 30), title='과매도구간')

 

 

editable이라는 함수로 차트 테이블 위에 표시하지 않습니다.(숨김 처리)

fill이라는 함수로 과매도 구간 과매수 구간에 색을 칠해줍니다.


8. 최종 CCI 소스코드

//https://goingrunv.com/
//@version=5
indicator(title="GRV-CCI", shorttitle="GRV-CCI", format=format.price, precision=2, timeframe="", timeframe_gaps=true)

//cci 함수 정의
len = input.int(20, minval=1, title='cci_Length')
src = input(hlc3, title="cci_Source")
///////////////////////////////////////////////
//예시1)
//ma = ta.sma(src, len)
//cci = (src - ma) / (0.015 * ta.dev(src, len))
///////////////////////////////////////////////
//예시2)
cci = ta.cci(src, len)

//cci 출력
plot(cci, title='cci 라인설정', color=color.new(color.white, 50), linewidth=2)

//cci 기준 라인 설정
top = hline(100, title='상단선', color=color.new(color.red, 40), linestyle=hline.style_solid, linewidth=1)
middle = hline(0, title='중간선', color=color.new(color.orange, 40), linestyle=hline.style_dotted, linewidth=1)
bottom = hline(-100, title='하단선', color=color.new(color.green, 40), linestyle=hline.style_solid, linewidth=1)

//cci 매도 매수 구간

overbought = plot(100, title='과매수구간1', color=color.new(color.white, 100), editable=false)
oversold = plot(-100, title='과매도구간1', color=color.new(color.white, 100), editable=false)

obcolor = plot(cci > 100 ? cci : 100, title='과매수구간2', color=color.new(color.red, 100), editable=false)
oscolor = plot(cci < -100 ? cci : -100, title='과매도구간2', color=color.new(color.red, 100), editable=false)

fill(overbought, obcolor, color=color.new(color.red, 30), title='과매수구간')
fill(oversold, oscolor, color=color.new(color.blue, 30), title='과매도구간')

 

최종본

 

댓글0

💲 추천 글