파인 스크립트 지표 만들기

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

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

MFI

 

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

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


1. MFI는 어떤 지표일까?

 

MFI(Money Flow Index)는 주가와 거래량을 이용해 계산되는 지표입니다.

기술적 분석에서 과매수나 과매도 상태를 판단하는 데 사용됩니다.

MFI 는 거래량이 반영된 RSI 라고 부르기도 합니다. 

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

돈 흐름 지수 - 위키백과 (wikipedia.org)


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

//@version=5
indicator(title="Money Flow Index", shorttitle="MFI", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
length = input.int(title="Length", defval=14, minval=1, maxval=2000)
src = hlc3
mfi = ta.mfi(src, length)
plot(mfi, "MF", color=#7E57C2)
overbought=hline(80, title="Overbought", color=#787B86)
hline(50, "Middle Band", color=color.new(#787B86, 50))
oversold=hline(20, title="Oversold", color=#787B86)
fill(overbought, oversold, color=color.rgb(126, 87, 194, 90), title="Background")

 

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

 

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

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

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


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

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

 

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

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

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

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

 

4. RSI의 타이틀 설정하기

//https://goingrunv.com/
//@version=5

indicator(title='GRV-MFI', shorttitle='GRV-MFI', format=format.price, precision=2, timeframe='')

 

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

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

//https://goingrunv.com/
//@version=5

indicator(title='GRV-MFI', shorttitle='GRV-MFI', format=format.price, precision=2, timeframe='')

//mfi 함수 정의
len = input.int(14, minval=1, title='mfi_Length')
src = input(close, 'mfi_Source')
mfi = ta.mfi(src, len)

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

 

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

rsi는 (close, 기간=14)로 정의하고 출력해보겠습니다.

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

  


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

//mfi 기준 라인 설정

top = hline(80, title='상단선', color=color.new(color.red, 40), linestyle=hline.style_solid, linewidth=1)
middle = hline(50, title='중간선', color=color.new(color.orange, 40), linestyle=hline.style_dotted, linewidth=1)
bottom = hline(20, title='하단선', color=color.new(color.green, 40), linestyle=hline.style_solid, linewidth=1)

 

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

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

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

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

linewidth=1

라인 굵기입니다.

 


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

//mfi 매도 매수 구간

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

obcolor = plot(mfi > 80 ? mfi : 80, title='과매수구간2', color=color.new(color.red, 100), editable=false)
oscolor = plot(mfi < 20 ? mfi : 20, 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. 최종 MFI 소스코드

//https://goingrunv.com/
//@version=5

indicator(title='GRV-MFI', shorttitle='GRV-MFI', format=format.price, precision=2, timeframe='')

//mfi 함수 정의
len = input.int(14, minval=1, title='mfi_Length')
src = input(close, 'mfi_Source')
mfi = ta.mfi(src, len)

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

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

//mfi 매도 매수 구간

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

obcolor = plot(mfi > 80 ? mfi : 80, title='과매수구간2', color=color.new(color.red, 100), editable=false)
oscolor = plot(mfi < 20 ? mfi : 20, 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

💲 추천 글