트레이딩뷰에서 기술적 분석 지표 만드는 방법
목차
들어가며
파인 스크립트란 무엇인가요?
설정하기
파인 에디터
이동 평균(MA) 표시하기
상대적 강도 지수(RSI) 지표 표시하기
백테스팅
모두 종합하기
마치며
트레이딩뷰에서 기술적 분석 지표 만드는 방법
아티클
트레이딩뷰에서 기술적 분석 지표 만드는 방법

트레이딩뷰에서 기술적 분석 지표 만드는 방법

고급
Published Aug 28, 2020Updated Oct 19, 2021
12m


들어가며

적절한 트레이딩 도구가 없다면 기술적 분석을 효과적으로 진행할 수 없습니다. 강력한 트레이딩 전략일반적인 실수를 방지하는 데 도움을 줄 것이며, 더 나은 위험 관리와 기회를 포착하고 이를 활용하는 능력을 향상시킬 수 있습니다.
많은 이들이 차트 작성 플랫폼으로 트레이딩뷰를 사용합니다. 수 백만 명의 사용자들이 외환, 암호화폐 및 전통 금융 시장 움직임을 추적하기 위해 중요한 기술적 분석 도구를 제공하는 강력한 트레이딩뷰 HTML5 웹 애플리케이션을 사용합니다.
트레이딩뷰에는 많은 강력한 기능들이 존재하며, 이를 통해 수 많은 트레이딩 플랫폼의 자산 가격을 추적하고 자체 소셜 네트워크에 트레이딩 아이디어를 게시할 수 있습니다. 이번 아티클에서 우리는 이를 개별 설정하는 방법에 대해 알아볼 것입니다. 트레이딩뷰의 자체 프로그래밍 언어 파인 스크립트(Pine Script)를 사용할 것이며, 이를 통해 차트 레이아웃을 세심하게 설정할 수 있습니다.

이제 시작해 봅시다!


파인 스크립트란 무엇인가요?

파인 스크립트은 트레이딩뷰 차트를 수정하는 데 사용할 수 있는 스크립팅 언어입니다. 해당 플랫폼에는 이미 많은 기능들이 탑재되어 있지만, 파인 스크립트를 통해 한 단계 더 나아갈 수 있습니다. 캔들스틱 색을 변경하거나 새로운 전략을 백테스트 하고 싶은 경우, 파인 에디어틀 사용해 실시간 차트를 원하는 대로 설정할 수 있습니다.
훌륭한 코드 문서가 존재하므로 사용자 설명서에서 자세한 정보를 꼭 확인해 보시기 바랍니다. 이번 튜토리얼의 목표는 몇 가지 기본 사항에 대해 논의하고 암호화폐 트레이딩에 유용한 지표를 소개하는 것입니다.


설정하기

아주 간단히 파인 스크립트를 시작할 수 있습니다. 작성하는 모든 코드는 트레이딩뷰의 서버에서 작동하며, 별도의 다운로드나 추가 설정없이 브라우저에서 에디터에 접속해 스크립트를 개발할 수 있습니다.

이번 튜토리얼에서 우리는 Bitcoin/Binance USD (BTCBUSD) 통화 쌍에 대한 차트를 구성할 것입니다. 계정이 없다면 무료 계정을 생성하시기 바랍니다(프로 서비스 신청도 가능하지만, 이번 설명에는 필요하지 않습니다). 
이 링크로 이동하면 다음과 같은 차트를 볼 수 있을 것입니다.


여러분에게는 보다 최신 차트가 표시될 것입니다.


이제 버튼을 클릭해 모든 기능을 갖춘 차트(full-featured chart)를 사용합니다. 이를 통해 훨씬 자세한 차트를 볼 수 있으며, 그리기 도구, 추세선 표시 등을 사용할 수 있습니다.


'모든 기능을 갖춘 차트'입니다. 하이라이트된 탭 위의 보기를 클릭하여 타임프레임을 조절할 수 있습니다.


다양한 도구를 사용하는 방법에 대해서는 다루지 않을 것이지만, 여러분이 진지하게 기술적 분석을 진행하신다면 이를 잘 숙지하시기 바랍니다. 왼쪽 아래(이미지에 표시됨)에 있는 몇 가지 탭 중에서 파인 에디터(Pine Editor)를 클릭합니다.


파인 에디터



파인 에디터는 훌륭한 도구입니다. 우리는 에디터를 통해 작업을 진행하고, 차트에 추가를 클릭하여 이를 표시할 것입니다. 한 번에 여러가지를 추가하면 복잡해질 수 있으므로, 예제를 살펴보는 동안에는 없애도록 하겠습니다(차트에서 오른쪽 클릭하여 지표들을 제거).
여러분은 이미 몇 줄의 코드가 표시되고 있다는 것을 볼 수 있을 것입니다. 차트에 추가를 클릭하여 어떤 일이 일어나는지 살펴보겠습니다.



기존 차트 아래에 두 번째 차트가 추가됩니다. 새 차트는 동일한 데이터를 표시합니다.  My Script 위로 마우스를 이동한 다음, 십자 기호를 클릭해 제거합니다. 자, 이제 코드를 자세히 살펴보도록 하겠습니다.
study("My Script")
첫 번째 줄에서는 주석을 설정합니다. 지표를 지칭할 이름("My Script"와 같은)만 있으면 되지만, 몇 가지 부가적인 매개 변수를 추가할 수도 있습니다. 그 중 하나는 overlay이며 이는 새로운 부분이 아닌 기존 차트 위에 지표를 표시하는 것입니다. 우리의 첫 번째 예시를 통해 알 수 있듯, 기본값은 false입니다. 현재는 활성화하지 않을 것이지만 overlay=true를 통해 기존 차트에 지표를 추가할 수 있습니다.
plot(close)
이는 비트코인의 종가를 표시하라는 명령어입니다. plot를 통해 간단한 선 차트를 표시할 수 있지만, 캔들 스틱 및 막대도 표시할 수 있습니다. 이에 대해서는 곧 살펴볼 것입니다. 

이제 다음을 확인해 보도록 하겠습니다.

//@version=4
study("My Script", overlay=true)
plot(open, color=color.purple)
이를 추가하면 두 번째 차트(왼쪽 차트가 오른쪽으로 이동한 것처럼 보임)가 표시될 것입니다. 우리는 시가를 표시한 것이며, 오늘의 시가는 어제의 종가이므로 당연히 동일한 형태입니다.
좋습니다! 현재 주석을 제거해보겠습니다(오른쪽 버튼을 클릭해 지표 삭제). Bitcoin / BUSD  위로 마우스를 이동하고 Hide 버튼을 클릭하여 현재 차트 또한 제거합니다.

많은 트레이더들이 캔들스틱 차트를 선호하는데, 이는 앞서 우리가 표시한 것보다 더 많은 정보를 제공하기 때문입니다. 이를 추가해보겠습니다.

//@version=4
study("My Script", overlay=true)
plotcandle(open, high, low, close)
나쁘지 않습니다만, 색상이 조금 아쉽습니다. 이상적으로 특정 타임프레임 내 시가가 종가보다 높을 경우 빨간색 캔들을, 종가가 시가보다 높을 경우 초록색 캔들을 사용합니다. plotcandle() 함수 위에 한 줄을 추가합니다.
//@version=4
study("My Script", overlay=true)
colors = open >= close ? color.red : color.green
plotcandle(open, high, low, close)

이는 모든 캔들스틱의 시가가 종가보다 크거나 같은 지 확인합니다. 시가가 종가보다 높다면 가격이 하락했다는 의미이므로 캔들스틱은 빨간색일 것입니다. 반대의 경우에는 초록색일 것입니다. plotcandle() 함수를 수정하여 다음 색상 체계를 적용합니다.

//@version=4
study("My Script", overlay=true)
colors = open >= close ? color.red : color.green
plotcandle(open, high, low, close, color=colors)

다른 지표를 아직 삭제하지 않았다면 삭제하고, 이를 차트에 추가합니다. 이제 다음과 같은 일반 캔들스틱 차트가 표시됩니다.


훌륭합니다!


이동 평균(MA) 표시하기

우리는 몇 가지 기본 사항을 살펴봤습니다. 이제 우리만의 첫 번째 지표를 위해 지수 이동 평균(EMA)로 이동해 보겠습니다. 이는 시장의 잡음을 걸러내고 가격 움직임을 부드럽게 표현하는 소중한 도구입니다. 
지수 이동 평균은 단순 이동 평균(SMA)와 약간 다르며, 가장 최근의 데이터에 가중치를 부여합니다. 이는 갑작스러운 움직임에 보다 반응적이기 마련이며, 단기 참여자(예를 들면, 일간 트레이딩)에 종종 사용됩니다.


단순 이동 평균(SMA)

나중에 두 가지를 비교하기 위해 단순 이동 평균 또한 표시할 수 있습니다. 스크립트에 다음을 추가합니다.

plot(sma(close, 10))

이는 지난 10일 간의 평균을 표시합니다. 다양한 길이에 따른 곡선의 변화 정도를 확인하려면 괄호 안의 숫자를 변경합니다.


지난 10일 기준 단순 이동 평균


지수 이동 평균(EMA)

지수 이동 평균은 이해하기 조금 더 까다롭지만, 걱정마시기 바랍니다. 먼저 공식을 살펴보도록 하겠습니다.

지수 이동 평균 = (종가 - 이전 일의 지수 이동 평균) * 승수 - 이전 일의 지수 이동 평균

이는 어떤 의미일까요? 우리는 매일 이전 일의 이동 평균을 기반으로 새로운 이동 평균을 계산합니다. 승수는 가장 최근 기간에 대한 “가중치”이며 이는 다음 공식을 따라 계산됩니다.

승수 = 2 / (지수 이동 평균의 길이 + 1)

단순 이동 평균과 마찬가지로 지수 이동 평균에도 기간을 지정해야 합니다. 단순 이동 평균의 구문론과 유사한 방법으로 지수 이동 평균을 표시할 수 있습니다. 이를 단순 이동과 함께 표시하여 둘을 비교할 수 있습니다.

//@version=4
study("My Script", overlay=true)
plot(sma(close, 10))
plot(ema(close,10))


두 가지 이동 평균이 약간의 차이를 보이고 있습니다.



내장 스크립트

이제까지 우리는 이해를 위해 코드를 직접 작성했습니다. 그러나 시간을 절약할 수 있는 방법이 있습니다. 특별히 복잡한 스크립트를 작성할 때, 처음부터 이를 다시 작성하고 싶지 않을 때 유용한 방법입니다.

에디터 오른쪽 상단의 New를 클릭합니다. 다양한 기술적 지표가 포함된 드롭다운 메뉴가 표시됩니다. 이동 평균 설명을 클릭하여 지수 이동 평균 지표 소스 코드를 확인합니다.



이를 차트에 추가합니다.


이 코드는 우리의 것과는 다르게 input() 함수를 갖고 있습니다. 이 박스를 클릭할 수 있기 때문에 사용성 측면에서 좋습니다.



또한 쉽게 Settings 톱니바퀴를 클릭하여 팝업 창에서 일부 값을 쉽게 변경할 수 있습니다.



다음 스크립트에서는 몇 가지 input() 함수를 추가해 이를 사용해 볼 것입니다.


상대적 강도 지수(RSI) 지표 표시하기

상대적 강도 지수(RSI)는 또 다른 필수 기술적 분석 지표입니다. 이는 모멘텀 지표라고도 알려져 있으며, 자산의 구매 및 판매 비율을 측정합니다. 0에서 100사이의 숫자로 표시되는 상대적 강도 지수는 자산의 과매수 또는 과매도 상태에 대한 정보를 제공합니다. 일반적으로, 상대적 강도 지수가 30이하일 경우 과매도, 70이상일 경우 과매수 상태로 간주됩니다.
New > RSI Startegy로 이동하여 이를 확인할 수 있습니다. 상대적 강도 지수는 일반적으로 14 기간(14시간 또는 14일 등) 동안 측정되며, 여러분의 전략에 맞게 이를 수정할 수 있습니다.
이를 차트에 추가해 봅시다. 몇 개의 화살표가 표시될 것입니다(코드 내 strategy.entry() 함수에 의해 정의된). RsiLE는 자산이 과매도 상태일 수 있으며 향후 의 가능성을 제시합니다. RsiSE는 자산이 과매도 되었을 수 있으며, 향후 의 가능성을 제시합니다. 한 가지 알아둘 것은 모든 지표가 반드시 가격 하락/상승을 확정하는 것으로 간주되어서는 안 된다는 것입니다.


백테스팅

우리가 만든 개별 지표를 테스트할 수 있는 방법이 존재합니다. 과거의 실적이 미래의 결과를 보장하지는 않지만, 백테스팅을 통해 우리의 스크립트가 신호를 발견하는 데 얼마나 효과적인지 알 수 있습니다.

아래의 간단한 스크립트를 예로 들어 보겠습니다. 우리는 BTC 가격이 11,000 달러 아래로 하락할 때 롱 포지션에 진입하고, 11,300 달러 이상으로 상승할 때 포지션을 종료하는 간단한 전략을 만들어 볼 것입니다. 그리고 이 전략이 역사적으로 얼마나 수익성이 있었는지 확인할 수 있습니다.

//@version=4
strategy("ToDaMoon", overlay=true)
enter = input(11000)
exit = input(11300)
price = close

if (price <= enter)
    strategy.entry("BuyTheDip", strategy.long, comment="BuyTheDip")
if (price >= exit)
    strategy.close_all(comment="SellTheNews")
여기서는 entryexit을 변수로 정의하며, 이는 향후 변경할 수 있는 입력값입니다. 또한 price 변수를 설정하여, 각 기간의 종가를 취합니다. 이후 if 구문을 통한 몇 가지 논리가 존재합니다. 괄호 안의 값이 참인 경우, 아래의 들여쓰기 된 블록이 실행됩니다. 그렇지 않을 경우, 이를 건너뜁니다.

따라서 가격이 원하는 진입가 이하일 경우, 첫 번째 표현식이 참이므로 롱 포지션이 개설됩니다. 가격이 원하는 종료가 이상일 경우, 두 번째 표현식이 실행되어 모든 미결제 포지션이 종료됩니다.

우리는 우리의 진입/종료 시점을 표시하는 화살표를 차트에 주석으로 표시할 것이며, 이를 comment 변수를 통해 해당 지점의 라벨을 지정했습니다(이 경우, “BuyTheDip” and “SellTheNews”). 코드를 복사한 다음, 이를 차트에 추가합니다.


이제 차트 위에 지표가 표시됩니다. 이를 확대할 수도 있습니다.


트레이딩뷰는 자동으로 여러분의 규칙을 이전 데이터에 적용합니다. 또한 파인 에디터에서 전략 테스터 탭으로 이동한 것을 알 수 있을 것입니다. 이를 통해 잠재적인 수익 개괄, 거래 목록 및 개별 실적을 확인할 수 있습니다.


우리가 진입하고 종료한 포지션입니다.


모두 종합하기

지금까지 살펴본 몇 가지 개념을 사용하여 우리만의 스크립트를 작성해 볼 차례입니다. 지수 이동 평균과 상대적 강도 지수를 조합할 것이며, 이 값을 캔들스틱 색상을 통해 표현하고 쉽게 시각화할 수 있는 인사이트를 만들어볼 것입니다.

이는 결코 투자 조언이 아니며, 이 지표를 사용하는 객관적으로 올바른 방법은 존재하지 않습니다. 다른 지표와 마찬가지로 자신만의 전략을 개발하기 위해 이를 다른 도구와 함께 사용해야 합니다.

이제 우리의 새 스크립트를 만들어 보겠습니다. 모든 지표를 차트에서 제거하고, Bitcoin/BUSD 차트 또한 감춥니다. 이제 작업할 깨끗한 캔버스가 보일 것입니다.

먼저 이름을 붙여보겠습니다. 원하는 이름을 지정하고, overlay=true를 설정합니다.
study(title="Binance Academy Script", overlay=true)
이전의 지수 이동 평균 공식을 잊지마시기 바랍니다. 지수 이동 평균 길이의 승수를 제공해야 합니다. 이를 정수 입력값(소수 자리는 불가)으로 지정합니다. 또한 최소값(minval)과 기본 값(defval)을 설정합니다.
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)


이 새로운 변수를 사용해 차트의 각 캔들의 지수 이동 평균 값을 계산할 수 있습니다.

study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)


좋습니다. 이제 상대적 강도 지수 차례입니다. 비슷한 방법으로 길이를 지정할 것입니다.

study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)

이제, 이를 계산할 수 있습니다.

study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)

이 단계에서 지수 이동 평균 및 상대적 강도 지수 값에 따라 캔들스틱 색이 변하는 논리를 추가하겠습니다. 캔들의 종가 (a)가 지수 이동 평균과 상대적 강도 지수가 50 이상인 (b) 보다 높은 상황을 가정해 보겠습니다.

그 이유는 무엇일까요? 여러분은 이를 비트코인 롱 또는 숏 진입을 위한 지표에 이를 함께 사용할 수도 있습니다. 예를 들어, 두 조건을 모두 만족하면 롱 포지션에 진입하기 좋은 시점이라는 의미일 수 있습니다. 또는 역으로 숏에 진입하면 안 되는 시점을 제공하는 것으로 이를 활용할 수 있습니다. 다른 지표에서는 다른 신호가 발생하더라도 말입니다.

이어지는 코드는 다음과 같습니다.

study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
이를 보통의 영어로 해석하자면, 지수 이동 평균 값이 종가보다 높으며 동시에 상대적 강도 지수가 50보다 높은 경우, 초록색 캔들스틱이 된다는 의미입니다. 반대의 경우에는 빨간색 캔들스틱이 될 것입니다. 

다음으로 지수 이동 평균을 표시합니다.

study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
plot(emaVal, "EMA")
마지막으로 캔들스틱을 표시합니다. 색상 변수를 잊지마시기 바랍니다.
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
plot(emaVal, "EMA")
plotcandle(open, high, low, close, color=colors)

스크립트가 완성됐습니다! 이를 차트에 추가하여 살펴봅니다.


EMA/RSI 지표를 사용한 BTC/BUSD 차트.


마치며

이번 아티클에서 우리는 트레이딩뷰의 파인 에디터를 사용하여 진행할 수 있는 몇 가지 기본적인 예시들을 살펴봤습니다. 이제 가격 차트에 대한 주석을 표시하여 여러분만의 지표에서 추가적인 인사이트를 얻을 수 있습니다.

우리는 단지 몇 가지 지표만을 살펴봤지만, New에서 기본 제공 스크립트를 선택하거나 직접 스크립트를 작성하여 보다 복합적인 지표를 간단히 구성할 수 있습니다.

영감이 필요하신가요? 다음 아티클을 통해 여러분의 다음 프로젝트의 아이디어를 발견해 보시기 바랍니다.