본문 바로가기
AI 활용법/AI 활용기

트레이딩뷰 지표 파인스크립트 복사해서 붙여넣기로 쉽게 만들기(이동평균선)

by alldig 2024. 4. 17.
반응형

 

이전글에서는 파인스크립트에 대해 전혀모르지만 AI를 사용해서 트레이딩뷰에 사용되는 파인스크립트로 이동평균선을 보여주는 코드를 작성했습니다. 그때의 교훈은 AI는 만들어주긴 하는데 한번에 못알아 듣고 원하는 질문을 해야하고 기본지식이 있어야 제대로 된 질문도 할 수 있다는 것이었습니다. 그래도 전혀 소득이 없진 않았습니다. AI가 만들어준 코드가 실패 할 수록 안되는 이유를 다시 물어보고 왜 안되는지 공부해서 어떻게는 되게 만들 수 있으니까요. 그런데 그렇게 AI랑 씨름하면서 하다보니까 그냥 공개되어 있는 코드 가져와서 수정하는게 더 빠르고 쉽게다는 생각이 들었습니다.

그래서 오늘은 그냥 잘 되어 있는거 복사해서 붙여넣고 내맘에 들게 조금씩 수정하는 방법으로 파인스크립트를 공부해보겠습니다.

나중에는 이렇게 2개를 내맘에 맞게 각각 수정하고 이렇게 수정한 지표2개를 합쳐서 1개의 지표로 만들고자 합니다. 왜냐면 트레이딩뷰가 무료사용자에게는 지표2개까지만 무료니까 원하는 지표 여러개를 합쳐서 하나로 만들면 무료사용자도 여러가지 지표를 한번에 볼 수 있으니까요.

한번 시작해 보겠습니다.

이동평균선 지표를 찾고 복사해서 새로운 나의 스크립트로 저장한다.
  • 기본적으로 괜찮은 지표를 찾으면 수정할게 그만큼 줄어들겠죠
  • 일단 가장 기본인 이동평균선을 찾아볼게요
  • 트레이딩뷰에 들어가서 "지표"를 누르고 원하는 지표명 "이동평균" 이라고 검색합니다. 그러면 테크니컬즈에 "이동평균 리본", "이동평균 크로스"가 검색이 됩니다. 그중에 "이동평균리본"을 클릭합니다.
  • 그러면 차트에 내가 선택한 지표가 타이틀과 함께 표시가 됩니다. 여기서 타이틀바에 마우스를 가져가서 "{ }" 이 버튼을 클릭하면 파인스크립트 소스코드가 나타납니다.
  • 그러면 이 스크립트는 읽기전용입니다. 코드를 편집하려면, 작업 복사본 만들기 라고 뜹니다. 당연히 "작업복사본 만들기"를 눌러야 겠죠
 
  • 그러면 스크립트 이름이 "이름없는 스크립트" 라고 제목이 뜨고 코드를 수정가능한 창으로 바뀝니다.
  • 여기서 이름없는 스크립트를 눌러서 스크립트 이름을 "지표만드는연습중"으로 바꾸면 아래 화면과 같이 이름이 바뀝니다.
  • 그리고 스크립트 코드 안에 "indicator"라고 있고 그 안에 "shorttitle"이 있죠. 그게 화면에 표시되는 타이틀바에 태그가 됩니다. 제가 설정한 "지표만드는중(이동평균선)"이라고 뜨게 됩니다.
  • 반영을 하려면 저장 후 차트업데이트를 누르면 반영 됩니다.
코드를 내 입맛에 맞게 수정한다.
  • 코드 전체는 아래와 같습니다. 이 코드는 4개의 이동평균선(20일, 50일, 100일, 200일)을 그려주는데 저는 저는 이걸 5개의 이동평균선(5, 20, 60, 120, 240일)으로 수정하고 싶습니다. 그리고 선 색깔도 그냥 시험삼아 빨,주,노,초,파란색으로 각각 수정해 보겠습니다.

(참고) 코드 복사해서 AI에게 붙여넣고 물어보면 대충은 해석해 줍니다. 제대로 이해하려면 시간들여서 공부가 필요하겠네요. 저는 일단 깊게는 알고싶지 않고 간단하게 사용만 할 수 있으면 됩니다.

//@version=5
indicator("Moving Average Ribbon", shorttitle="지표만드는중(이동평균선)", overlay=true, timeframe="", timeframe_gaps=true)

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

show_ma1   = input(true   , "MA №1", inline="MA #1", display = display.data_window)
ma1_type   = input.string("SMA"  , ""     , inline="MA #1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma1_source = input(close  , ""     , inline="MA #1", display = display.data_window)
ma1_length = input.int(20     , ""     , inline="MA #1", minval=1)
ma1_color  = input(#f6c309, ""     , inline="MA #1", display = display.data_window)
ma1 = ma(ma1_source, ma1_length, ma1_type)
plot(show_ma1 ? ma1 : na, color = ma1_color, title="MA №1")

show_ma2   = input(true   , "MA №2", inline="MA #2", display = display.data_window)
ma2_type   = input.string("SMA"  , ""     , inline="MA #2", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma2_source = input(close  , ""     , inline="MA #2", display = display.data_window)
ma2_length = input.int(50     , ""     , inline="MA #2", minval=1)
ma2_color  = input(#fb9800, ""     , inline="MA #2", display = display.data_window)
ma2 = ma(ma2_source, ma2_length, ma2_type)
plot(show_ma2 ? ma2 : na, color = ma2_color, title="MA №2")

show_ma3   = input(true   , "MA №3", inline="MA #3", display = display.data_window)
ma3_type   = input.string("SMA"  , ""     , inline="MA #3", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma3_source = input(close  , ""     , inline="MA #3", display = display.data_window)
ma3_length = input.int(100    , ""     , inline="MA #3", minval=1)
ma3_color  = input(#fb6500, ""     , inline="MA #3", display = display.data_window)
ma3 = ma(ma3_source, ma3_length, ma3_type)
plot(show_ma3 ? ma3 : na, color = ma3_color, title="MA №3")

show_ma4   = input(true   , "MA №4", inline="MA #4", display = display.data_window)
ma4_type   = input.string("SMA"  , ""     , inline="MA #4", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma4_source = input(close  , ""     , inline="MA #4", display = display.data_window)
ma4_length = input.int(200    , ""     , inline="MA #4", minval=1)
ma4_color  = input(#f60c0c, ""     , inline="MA #4", display = display.data_window)
ma4 = ma(ma4_source, ma4_length, ma4_type)
plot(show_ma4 ? ma4 : na, color = ma4_color, title="MA №4")
 
  • 기존 20일선을 5일선으로 바꾸고 라인색을 빨간색으로 변경해볼게요. 아래 2개의 코드는 각각 위가 원래코드인 20일선이고 아래가 5일선으로 바꾼코드 입니다. 4번째 줄을 봐주세요. 단순하게 ma1_length=input.int(20...)을 5로 바꾼겁니다.
[원래코드]
show_ma1   = input(true   , "MA №1", inline="MA #1", display = display.data_window)
ma1_type   = input.string("SMA"  , ""     , inline="MA #1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma1_source = input(close  , ""     , inline="MA #1", display = display.data_window)
ma1_length = input.int(20     , ""     , inline="MA #1", minval=1)
ma1_color  = input(#f6c309, ""     , inline="MA #1", display = display.data_window)
ma1 = ma(ma1_source, ma1_length, ma1_type)
plot(show_ma1 ? ma1 : na, color = ma1_color, title="MA №1")
 
[수정코드]
show_ma1   = input(true   , "MA №1", inline="MA #1", display = display.data_window)
ma1_type   = input.string("SMA"  , ""     , inline="MA #1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma1_source = input(close  , ""     , inline="MA #1", display = display.data_window)
(아래줄에서 20을 5로 바꿈)
ma1_length = input.int(5     , ""     , inline="MA #1", minval=1)
ma1_color  = input(#f6c309, ""     , inline="MA #1", display = display.data_window)
ma1 = ma(ma1_source, ma1_length, ma1_type)
plot(show_ma1 ? ma1 : na, color = ma1_color, title="MA №1")
 
  • 그리고 코드 저장을하고 차트에 반영을 눌러보겠습니다. 짠 5일선으로 바뀌고 값도 바뀌었습니다.

 

  • 이번에는 라인색을 바꿀건데요. 이건 트레이딩뷰 파인스크립트에서 직접 수정하는게 편합니다. 원하는 색을 마우스로 클릭하기만 하면 되거든요. 스크립트에서 라인색이 지정된 네모를 클릭하고 원하는 색을 고르면 됩니다.

 

  • 이제 단순 반복작업만 남았습니다. 나머지도 원하는 일수로 바꾸고 색을 바꾸면 됩니다. 그리고 원래보다 1개의 이동평균선을 더 추가할거니까 복사해서 붙여넣기하고 ma5에 대한 내용을 집어 넣으면 됩니다.
  • 최종화면과 최종코드 입니다.
 
//@version=5
indicator("Moving Average Ribbon", shorttitle="지표만드는중(이동평균선)", overlay=true, timeframe="", timeframe_gaps=true)

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

show_ma1   = input(true   , "MA №1", inline="MA #1", display = display.data_window)
ma1_type   = input.string("SMA"  , ""     , inline="MA #1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma1_source = input(close  , ""     , inline="MA #1", display = display.data_window)
ma1_length = input.int(5     , ""     , inline="MA #1", minval=1)
ma1_color  = input(color.rgb(246, 41, 9), ""     , inline="MA #1", display = display.data_window)
ma1 = ma(ma1_source, ma1_length, ma1_type)
plot(show_ma1 ? ma1 : na, color = ma1_color, title="MA №1")

show_ma2   = input(true   , "MA №2", inline="MA #2", display = display.data_window)
ma2_type   = input.string("SMA"  , ""     , inline="MA #2", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma2_source = input(close  , ""     , inline="MA #2", display = display.data_window)
ma2_length = input.int(20     , ""     , inline="MA #2", minval=1)
ma2_color  = input(color.rgb(248, 132, 0), ""     , inline="MA #2", display = display.data_window)
ma2 = ma(ma2_source, ma2_length, ma2_type)
plot(show_ma2 ? ma2 : na, color = ma2_color, title="MA №2")

show_ma3   = input(true   , "MA №3", inline="MA #3", display = display.data_window)
ma3_type   = input.string("SMA"  , ""     , inline="MA #3", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma3_source = input(close  , ""     , inline="MA #3", display = display.data_window)
ma3_length = input.int(60    , ""     , inline="MA #3", minval=1)
ma3_color  = input(#f6ff00, ""     , inline="MA #3", display = display.data_window)
ma3 = ma(ma3_source, ma3_length, ma3_type)
plot(show_ma3 ? ma3 : na, color = ma3_color, title="MA №3")

show_ma4   = input(true   , "MA №4", inline="MA #4", display = display.data_window)
ma4_type   = input.string("SMA"  , ""     , inline="MA #4", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma4_source = input(close  , ""     , inline="MA #4", display = display.data_window)
ma4_length = input.int(120    , ""     , inline="MA #4", minval=1)
ma4_color  = input(color.rgb(0, 255, 47), ""     , inline="MA #4", display = display.data_window)
ma4 = ma(ma4_source, ma4_length, ma4_type)
plot(show_ma4 ? ma4 : na, color = ma4_color, title="MA №4")

show_ma5   = input(true   , "MA №5", inline="MA #5", display = display.data_window)
ma5_type   = input.string("SMA"  , ""     , inline="MA #5", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
ma5_source = input(close  , ""     , inline="MA #5", display = display.data_window)
ma5_length = input.int(240    , ""     , inline="MA #5", minval=1)
ma5_color  = input(color.rgb(10, 6, 243), ""     , inline="MA #5", display = display.data_window)
ma5 = ma(ma5_source, ma5_length, ma5_type)
plot(show_ma5 ? ma5 : na, color = ma5_color, title="MA №5")
 
 

오늘은 이동평균선을 복사해와서 입맛에 맞게 커스터마이징 해봤는데요. 이건 겁먹었던 것 보다는 좀 쉬웠던 것 같습니다. 다른 지표들도 이렇게 쉬울지는 아직은 잘 모르겠네요. 다음번에는 이동평균선이 크로스되면 차트에 표시되도록 하는 이동평균선 돌파(ma Cross)를 검색해서 수정해보고 최종적으로 2개를 합쳐서 1개의 지표로 만들어 보겠습니다. 감사합니다.

 

반응형