파인 스크립트 지표 만들기/기본 보조지표

파인스크립트로 MA(이동평균선) 지표를 만들어보자

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

 

파인스크립트로 MA(이동평균선) 지표 만들기

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


1. MA(이동평균선)는 어떤 지표일까?

 

이동평균(moving average)은 전체 데이터 집합의 여러 하위 집합에 대한 일련의 평균을 만들어 데이터 요소를 분석하는 계산이다.

즉 다시말해서 이동평균선이란 주가가 움직이면서 가격대가 형성될 때, 특정한 기준에 따라 평균을 내어 만들어놓은 선입니다.

이동평균선에는 단순 이동평균, 누적 이동평균, 가중 이동평균 그 외 여러 가지가 있습니다.

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

이동평균 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)


2. 트레이딩 뷰에서 제공하는 MA(이동평균선)의 기본 소스코드

//@version=5
indicator(title="Moving Average", shorttitle="MA", overlay=true, timeframe="", timeframe_gaps=true)
len = input.int(9, minval=1, title="Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out = ta.sma(src, len)
plot(out, color=color.blue, title="MA", offset=offset)

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(out, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)

 

트레이딩 뷰에서 제공하는 MA(이동평균선)의 기본 소스코드를 이용해서

아래에서는 이 내용에 추가적인 기능을 넣어서 조금 더 쉽고 간결하게 만들어보겠습니다.


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

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

indicator(title="GRV-MA", shorttitle="GRV-MA", overlay=true, timeframe="", timeframe_gaps=true)

 

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

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

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

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

  • title = 스크립트의 이름을 설정합니다. 
  • shorttitle = 스크립트에 단축된 이름을 설정합니다. 
  • overlay = 스크립트를 차트 위에 표시합니다. 

4. MA(이동평균선) 함수 설정하고 라인 출력하기

//https://goingrunv.com
//@version=5
indicator(title="GRV-MA", shorttitle="GRV-MA", overlay=true, timeframe="", timeframe_gaps=true)

src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)

//ma기간
len1 = input.int(7,   minval=1, title="Length1")
len2 = input.int(14,  minval=1, title="Length2")
len3 = input.int(28,  minval=1, title="Length3")
len4 = input.int(56,  minval=1, title="Length4")
len5 = input.int(112, minval=1, title="Length5")
len6 = input.int(224, minval=1, title="Length6")

//ma함수
out1 = ta.sma(src, len1)
out2 = ta.sma(src, len2)
out3 = ta.sma(src, len3)
out4 = ta.sma(src, len4)
out5 = ta.sma(src, len5)
out6 = ta.sma(src, len6)

//ma출력
plot(out1, color=color.new(color.red, 0),    title="MA1", linewidth=2, offset=offset)
plot(out2, color=color.new(color.orange, 0), title="MA2", linewidth=2, offset=offset)
plot(out3, color=color.new(color.yellow, 0), title="MA3", linewidth=2, offset=offset)
plot(out4, color=color.new(color.green, 0),  title="MA4", linewidth=2, offset=offset)
plot(out5, color=color.new(color.blue, 0),   title="MA5", linewidth=2, offset=offset)
plot(out6, color=color.new(color.purple, 0), title="MA6", linewidth=2, offset=offset)

 


5. MA(이동평균선) 정배열 역배열 배경만들기

//ma7 > ma56 정배열

longTrend = out1 > out2 and out2 > out3 and out3 > out4

//ma7 < ma56 역배열

shortTrend = out1 < out2 and out2 < out3 and out3 < out4


//정배열 역배열 출력
bgcolor(longTrend? color.new(color.blue, 70) : na)
bgcolor(shortTrend? color.new(color.red, 70) : na)

 


6. MA(이동평균선) 최종 코드

//https://goingrunv.com
//@version=5
indicator(title="GRV-MA", shorttitle="GRV-MA", overlay=true, timeframe="", timeframe_gaps=true)

src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)

//ma기간
len1 = input.int(7,   minval=1, title="Length1")
len2 = input.int(14,  minval=1, title="Length2")
len3 = input.int(28,  minval=1, title="Length3")
len4 = input.int(56,  minval=1, title="Length4")
len5 = input.int(112, minval=1, title="Length5")
len6 = input.int(224, minval=1, title="Length6")

//ma함수
out1 = ta.sma(src, len1)
out2 = ta.sma(src, len2)
out3 = ta.sma(src, len3)
out4 = ta.sma(src, len4)
out5 = ta.sma(src, len5)
out6 = ta.sma(src, len6)

//ma출력
plot(out1, color=color.new(color.red, 0),    title="MA1", linewidth=2, offset=offset)
plot(out2, color=color.new(color.orange, 0), title="MA2", linewidth=2, offset=offset)
plot(out3, color=color.new(color.yellow, 0), title="MA3", linewidth=2, offset=offset)
plot(out4, color=color.new(color.green, 0),  title="MA4", linewidth=2, offset=offset)
plot(out5, color=color.new(color.blue, 0),   title="MA5", linewidth=2, offset=offset)
plot(out6, color=color.new(color.purple, 0), title="MA6", linewidth=2, offset=offset)


//ma7 > ma56 정배열

longTrend = out1 > out2 and out2 > out3 and out3 > out4

//ma7 < ma56 역배열

shortTrend = out1 < out2 and out2 < out3 and out3 < out4


//정배열 역배열 출력
bgcolor(longTrend? color.new(color.blue, 70) : na)
bgcolor(shortTrend? color.new(color.red, 70) : na)

 

 

최종본

 

댓글0

💲 추천 글