
TradingView 매뉴얼: 구현 함수
*2022-02-28 글
저번 "난 내가 코딩해서 투자해" 시리즈에서는 자주사용되는 함수, 즉 코드의 몸통 부분에 대해서 알아보았습니다.
이번 게시물에서는 코드의 꼬리에 해당되는 부분, 즉 정의를 내린 단어들을 어떻게 지표로 그려낼지에 대해 알아보는 과정을 가질 예정입니다.
현재 최신 버전은 5이나, 개인적으로 더 정확한 전달을 위해
이후의 모든 글은 Version 4 기준으로 작성할 예정입니다.
대표적으로 자주 사용되는 구현함수들의 분류는 다음과 같이 나눌 수 있습니다.
1. 모양, 2. 색, 3. 배경
지표의 구현은 무엇을 의미할까요? 저는 그림을 그리는 것, 즉 시각화를 의미한다고 생각합니다.
이에 따라 보다 나은 시각화를 위해, 우리는 데이터의 특성이나 데이터 간 격차 등을 파악하고 그에 맞는 형태를 만들어주어야 할 필요가 있습니다.
예시 자료입니다. 하나의 선으로 표현 된 해당 지표를 확인해보면, 어떤 것을 보여주고 싶은지, 어떤 데이터를 가공했는지 조차 감이 오지 않을 정도로 직관적이지 못합니다.
같은 지표의 모양과 색만 바꾸어주어도, 훨씬 직관적인 지표의 구현이 가능합니다.
구현하는 과정에서의 모양과 색은 조건부로 바뀌게 만들 수 있기에, 상황에 대해 상대적으로 더 객관적인 접근이 가능하게 합니다.
1. 모양
그렇다면 데이터를 가공할 수 있는 모양에는 어떠한 것들이 있으며, 어떠한 상황에 적합할까요?
a. 선
"style=plot.style_line", "style=plot.style_linebr", "style=plot.style_stepline"
먼저 기본적인 선을 빼놓을 수 없겠죠?
선은 장기적인 트렌드를 표시할때나, 기준 대비 위치를 판단하고 싶을 때 주로 사용됩니다.
때문에 코드의 머리 부분에서 "overlay = true" (차트 위에 표시) 인 경우에 line의 사용 빈도수가 많은 편입니다.
linebr에서 br의 뜻은 break으로, 데이터 간 갭이 존재할 때 그 갭을 채우지 않는 모양을 뜻합니다.
사실 상 line과 linebr는 같은 함수라고 생각하셔도 무방합니다.
stepline은 계단형 선으로, 데이터를 임의의 값과 비교할 때 사용됩니다.
b.점
"style=plot.style_cross", "style=plot.style_circles"
cross와 circles는 모두 점형 함수로, 자료(Parabolic SAR)와 같이 특정 상황에 따라 데이터의 위치가 바뀌어야 할 때 주로 사용됩니다.
해당 지표를 선으로 구현하게되면 모든 점들이 이어져 구현되기 때문에, 보기 불편할 수 있겠죠?
c. 면
"style=plot.style_area", "style=plot.style_areabr","style=plot.style_histogram", "style=plot.style_columns"
area와 히스토그램형(histogram, columns)은 데이터가 양수와 음수로 넘나드는 경우 주로 사용됩니다.
구현 함수 중 양수와 음수의 차이가 가장 눈에 띄는 함수이기 때문입니다.
area와 areabr는 line과 linebr 간 관계와 동일하며, columns는 굵은 히스토그램으로 해석하시면 됩니다.
모든 형태의 굵기는 linewidth=(1부터 4까지)
로 설정하실 수 있습니다.
2. 색
색은 "color=color.blue"의 형태로 plot할 수 있습니다.
이 때, TradingView에서 제공하는 색 함수는
blue, black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, teal, aqua, orange까지이며,
원하는 색상에 따라 단어를 "color=color. " 뒤에 적어주시면 적용할 수 있습니다.
제공되는 색 이외에 원하는 색상이 있으시다면
"color=color(#000000)"
의 형태로, 괄호안에 #을 포함한 색상코드를 기입해주시면 해당 색을 불러올 수 있습니다.
참고 = HTML 색상코드
조건에 따른 색상의 변경은 "?:"함수로 쉽게 설정하실 수 있습니다.
"color=조건?color.red:color.blue"
= 조건이 충족된다면 적색, 충족되지 않는다면 청색
+ 투명도는 "transp"으로,
"plot()"함수 내에 색을 지정하주시면서 transp또한 0에서 100사이의 숫자로 지정해주시면 됩니다.
plot(구현할 것, color=color.색상, transp = 50)
= 구현할 것을 구현, 색상은 color.색상의 색, 투명도는 50
3. 배경
마지막으로 배경입니다.
배경은 "bgcolor()" 함수를 사용하시면 됩니다.
조건을 붙이기 위해서는 동일하게 "?:" 함수를 사용하시면 됩니다.
"bgcolor(color=조건?color.blue:color.red)"
=조건이 충족된다면 배경색이 청색, 안된다면 배경색이 적색
일부 배경만을 바꾸는 방법도 존재합니다.
위 자료와 같이 전체배경이 아닌, 일부 배경을 변경하고 싶은 경우는 "fill()"함수를 사용하시면 됩니다.
채우고 싶은 구간의 경계를 먼저 정의해주신 이후 (자료 상의 Upper Band, Lower Band)
fill(UpperBand, LowerBand,color=color.색상)
=UpperBand, LowerBand의 색상을 color.색상의 색으로 채우기
이 때, 정의한 경계는 plot이 되어있는 경계여야합니다.
아래에서 설명드리겠습니다.
예시코드
복습해보겠습니다.
A=sma(close,20)
B=sma(close,50)
A는 20일 이동평균선, B는 50일 이동평균선으로 정의하였습니다.
이제 이 두개를 구현(plot)하여야 합니다.
C=plot(A, style=plot.style_line,color=A>A[1]?color.green:color.red, linewidth=2)
D=plot(B, style=plot.style_line,color=B>B[1]?color.blue:color.orange, linewidth=2)
둘 모두 형태는 선으로 하고싶기에 style=plot.style_line
조건에 따라 색을 바꾸고싶었습니다.
둘 모두 상승 중이면(=전일 값보다 높으면) green혹은 blue, 아니라면 red 혹은 orange
굵기는 2
bgcolor(color=(A>A[1] and A[1] > A[2])?color.purple:na, transp = 70)
배경색은 A가 2일 연속 상승할 때(=A>A[1] and A[1]>A[2])
보라색, 아니라면 색상 없음 (na), 투명도는 70
fill(C,D,color=A>B?color(#000000):color.gray, transp=70)
배경 파트에서 말씀드렸던 부분입니다.
우리는 이동평균선을 A와 B로 정의했지만, 구현된 실질적인 선을 C와 D로 정의했기에,
C와 D를 fill하겠다고 코드를 짜주셔야 합니다.
A가 B보다 크다면 C와 D 사이를 색상코드 #000000의 색으로, 아니라면 회색으로 채우기, 투명도는 70
정상적으로 완성된다면 다음과 같은 지표에 도달하실 수 있습니다.
코딩 도중 오류발생 혹은 질문사항이 있는 경우, AWARE 텔레그램 채팅을 통해 말씀주시기 바랍니다.