트레이딩뷰 파인스크립트 기초부터 실전까지 완벽 가이드
목차
머리말
안녕하세요, 디셉티콘입니다.
데이터 분석과 자동매매 전문가로서, 트레이딩뷰의 전략을 활용해 수익 창출의 길을 걷고 있습니다.
트레이딩뷰 파인스크립트 활용에 대한 여러분의 궁금증을 해소하기 위해, 기초부터 시작하여 실제 지표를 개발하는 방법까지 단계별로 안내해드리는 포스트를 준비했습니다.
트레이딩뷰(TradingView)는 금융 시장 분석을 위한 필수 플랫폼으로, 다양한 지표와 도구를 제공합니다.
사용자는 자신의 트레이딩 아이디어를 커뮤니티와 공유할 수 있으며, 특히 파인스크립트를 통해 개인화된 지표와 전략을 개발할 수 있습니다. 이 글에서는 파인스크립트의 기초부터 시작하여, 상대강도지수(RSI) 지표를 직접 만드는 과정까지 살펴보겠습니다.
파인스크립트는 트레이딩뷰 전용 프로그래밍 언어로, 금융 데이터 분석과 자동화된 트레이딩 전략 개발에 최적화되어 있습니다. 코딩 경험이 있다면 빠르게 배울 수 있으며, 최신 버전인 파인스크립트 버전 5의 새로운 기능을 활용하여 더 효율적으로 작업할 수 있습니다.
본 글은 트레이딩뷰 계정 설정부터 시작하여, 파인스크립트의 핵심 개념, 기본 데이터 타입, 연산자, 함수 사용법, 그리고 실제 지표 개발까지의 과정을 담고 있습니다. 또한, 개발한 지표를 테스트하고 트레이딩뷰 커뮤니티에 공유하는 방법도 안내해드립니다.
트레이딩뷰 계정 설정
TradingView 플랫폼을 활용하여 자신만의 사용자 정의 지표를 만드는 여정을 시작하기 위한 첫 걸음은 무료 계정을 생성하는 것입니다. TradingView의 무료 계획은 이 튜토리얼을 따라 지표를 개발하고 게시하는 데 충분한 기능을 제공합니다.
계정을 등록하고 로그인하면 TradingView의 차트 홈페이지에 접속할 수 있습니다. 여기서는 글로벌 시장의 다양한 가격 차트를 분석할 수 있는 차트 탭에 주목할 것입니다. 또한, Pine 편집기를 통해 사용자 정의 지표와 스크립트를 코딩할 수 있습니다. 이제 모든 준비가 완료되었으니, PineScript 학습을 시작할 준비가 되었습니다.
파인스크립트 소개
PineScript는 TradingView에서 자신만의 트레이딩 알고리즘, 지표, 전략 등을 생성하기 위해 설계된 전용 프로그래밍 언어입니다. JavaScript와 유사한 구문을 사용하며, TradingView 차트 환경 내에서 직접 실행됩니다. PineScript의 몇 가지 주요 특징은 다음과 같습니다:
TradingView 플랫폼 내에서만 사용되며, 해당 서버에서 스크립트를 해석하고 실행합니다.
- 금융 데이터 분석을 위해 설계된 다양한 변수와 함수를 내장하고 있습니다.
- PineScript 버전 5는 새로운 기능과 개선 사항을 포함하는 최신 버전입니다.
- 대규모 커뮤니티에 의해 기여된 다양한 스크립트가 오픈 소스로 제공됩니다.
Pine 코드 편집기에 접근하기 위해서는 플랫폼 상단의 Pine 에디 탭을 클릭하면 됩니다. 이를 통해 지표 코딩을 시작할 수 있는 빈 편집기 패널이 열리며, 이 공간을 사용자 정의 PineScript 프로그램을 구축하기 위한 작업대로 활용할 수 있습니다.
트레이딩뷰의 Pine 에디터를 처음 열면, 사용자는 변수 할당, 플롯 기능 등을 보여주는 몇 가지 기본 코드가 포함된 샘플 스크립트를 볼 수 있습니다. 이 샘플 스크립트는 PineScript의 기본적인 사용 방법을 이해하는 데 도움이 되도록 설계되었습니다. 사용자는 이 샘플 코드를 참조 자료로 남겨둘 수도 있고, 원한다면 삭제하고 새로운 프로젝트를 시작할 수도 있습니다.
PineScript 코딩을 시작하기 전에, 이 프로그래밍 언어의 기본 사항을 파악하는 것이 중요합니다. PineScript는 특히 금융 시장 데이터를 분석하고 트레이딩 전략을 자동화하는 데 사용되는 프로그래밍 언어로, 트레이딩뷰 사용자들이 자신만의 맞춤형 지표와 전략을 개발할 수 있도록 해줍니다. 기본적으로, PineScript는 다음과 같은 주요 개념들을 포함합니다:
- 변수 할당 : 데이터나 계산 결과를 저장하는 데 사용되는 변수를 생성하고 할당하는 방법
- 플롯 기능 : 차트에 데이터 시리즈나 계산 결과를 시각화하는 방법. 이를 통해 사용자는 자신의 지표나 계산 결과를 차트 상에 직접 표시할 수 있습니다.
- 조건문과 반복문 : 특정 조건에 따라 코드 실행을 제어하거나, 박본적인 작업을 자동화하는 구문.
- 함수 사용 : PineScript 내장 함수 또는 사용자 정의 함수를 사용하여 복잡한 계산과 작업을 수행하는 방법.
이러한 기본 사항을 이해하는 것은 PineScript로 작업을 시작하는 데 있어 필수적입니다. 사용자는 이 기본적인 구조와 명령어를 바탕으로, 점차 더 복잡한 지표와 전략을 개발할 수 있게 됩니다.
파인스크립트의 기본 이해
PineScript는 자바스크립트(Javascript)와 C 언어와 구문 및 기능 면에서 유사성을 공유합니다. 첫 번째 지표를 만들기 위해 필요한 몇 가지 핵심 개념과 구성 요소를 살펴보겠습니다:
시리즈(Series)
PineScript에서 시리즈는 시간에 따른 순차적 데이터를 말합니다. 이는 OHLC(시가, 고가, 저가, 종가) 가격, 지표 값, 거래량 등을 포함할 수 있습니다. 시리즈는 스크립트에서 데이터에 접근하고 조작하는 기반을 제공합니다.
핵심 가격 시리즈
PineScript에는 OHLC 데이터를 위한 네 가지 내장 시리즈가 있습니다:
- Open : 각 바(Bar)의 시가
- High : 각 바(Bar)의 고가
- Low : 각 바(Bar)의 저가
- Close : 각 바(Bar)의 종가
예를 들어:
// 현재 바의 종가에 접근하기
currentClose = close
// 이전 바의 시가에 접근하기
pastOpen = open[2]
사용자 정의 시리즈 선언하기
자신만의 지표 값을 저장하기 위해 사용자 정의 시리즈를 선언할 수 있습니다:
// 시리즈 선언
var mySeries = na
// 값 할당
mySeries := close
이전 값에 접근하기
시리즈 내의 과거 값에 접근하기 위해 배열 인덱스 표기법을 사용합니다:
// 1 바 전의 종가
prevClose = close[1]
// 5 바 전의 종가
pastClose = close[5]
시리즈의 Lifespan
시리즈는 차트에 표시되는 바에 대해서만 존재합니다. 차트를 좌우로 스크롤할 경우, 시리즈 값은 다시 계산됩니다.
일반적인 연산
수학적 연산, 시리즈 결합, 최소/최대값 찾기 등을 수행할 수 있습니다:
// 두 시리즈의 합
sum = series1 + series2
// 두 시리즈 중 높은 값
hi = math.max(series1, series2)
// 시리즈의 이동 평균
sma = sma(mySeries, 20)
데이터 타입
변수를 명시적으로 타입과 함께 선언합니다:
// 정수
var int myInteger = 10
// 실수
var float myFloat = 10.5
// 문자열
var string myString = "Hello"
// 불린
var bool myBool = true
연산자
산술 연산, 비교 등의 작업을 수행합니다:
// 산술 연산
int sum = 10 + 15
int diff = 20 - 7
int product = 2 * 10
// 비교
if close > open
// 무언가를 수행
// 논리 연산
if (trend == "up") and (momentum > 100)
// 무언가를 수행
함수
특정 작업을 실행하기 위한 재사용 가능한 코드 블록:
// 내장 함수
ema20 = ta.ema(close, 20)
// 사용자 정의 함수
foo() =>
int sum = 10 + 15
sum
// 함수 호출
value = foo()
제어 흐름
조건적 논리를 기반으로 실행 경로를 제어합니다:
// if/else 문
if close > open
// 양봉
else
// 음봉
// for 반복문
for i=0 to 10
// 무언가를 수행
// while 반복문
while close > open
// 상승 추세
이것은 몇 가지 핵심 개념을 다루는 것입니다.
문법이 낯설게 느껴질 수 있지만, 예제를 통해 점차 익숙해질 것입니다.
이제 실제로 지표를 구축해 나가는 단계로 넘어가 봅시다!
첫 번째 지표 만들기
Pine Script의 기본 사항을 다루었으니, 이제 실제로 실용적인 트레이딩 지표를 처음부터 구축하는 과정을 살펴보겠습니다.
이 예제에서는 상대강도지수(Relative Strength Index, RSI) 지표를 코딩할 것입니다.
RSI는 트레이더들이 과매수 및 과매도 상태를 식별하기 위해 사용하는 인기 있는 모멘텀 오실레이터입니다.
RSI 작동 원리에 대한 개요는 다음과 같습니다:
- 가격 변화의 속도와 비율을 계산합니다.
- 0에서 100사이에서 변동합니다.
- 70 이상의 값은 과매수 상태를 나타냅니다.
- 30 이하의 값은 과매도 상태를 나타냅니다.
- 반전이나 발산을 감지하는 데 사용됩니다.
단계별 과정을 자세히 살펴보겠습니다:
스텝 0 — 스크립트 선언
먼저, PineScript의 버전을 V5로 정의하고 지표 이름을 "RSI"로 지정합시다.
//@version=5
indicator("RSI", overlay=false)
overlay=true는 이 지표가 차트에 겹쳐 표시되지 않음을 의미합니다.
스텝 1 — 사용자 입력 정의
RSI 기간 길이를 사용자가 사용자화할 수 있도록 하려면 input() 함수를 사용합니다:
// RSI 기간 입력
period = input(title="RSI Period", type=input.integer, defval=14)
input() 함수는 사용자가 변경할 수 있는 설정을 생성합니다.
스텝 2 — RSI 변수 선언
각 바에 대한 RSI 값을 저장할 변수가 필요합니다:
// RSI 시리즈
var rsi = na
na 값은 첫 번째 값이 계산되기 전까지 적용되지 않음을 초기화합니다.
스텝 3 — 함수에서 RSI 계산
별도의 함수에서 RSI 계산 로직을 코딩합니다:
// RSI 계산
rsi(period) =>
up = ta.rma(math.max(ta.change(close), 0), period)
down = ta.rma(-math.min(ta.change(close), 0), period)
rsi := down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
이는 change() 및 rma() 함수를 사용하여 상대 강도를 계산합니다.
스텝 4 — 차트에서 RSI 표시
다음으로 차트에 RSI를 선으로 시각화합니다:
// 플롯
plot(rsi, title="RSI", style=plot.style_line, linewidth=2, color=#FF7200)
주황색의 더 두꺼운 선으로 스타일을 설정합니다.
스텝 5 — 과매수/과매도 수준 추가
마지막으로, 과매수/과매도 참조를 위해 70과 30에서 수평선을 그립니다:
// 상단 밴드
h1 = hline(70, "Upper Band", color=#C0C0C0)
// 하단 밴드
h2 = hline(30, "Lower Band", color=#C0C0C0)
이로써 처음부터 RSI 지표를 코딩하는 과정을 완성했습니다.
이는 기본을 설명하기 위한 매우 간단한 예제였습니다.
추가 구성 옵션, 최적화, 알림 등을 통해 이를 더 발전시킬 수 있습니다.
이제 PineScript에서 아이디어를 코딩된 지표로 전환하는 방법을 이해해야 합니다.
RSI 지표 예제에 더 많은 기능을 추가하는 두 가지 방법은 테이블과 알림을 사용하는 것입니다:
1. RSI값 테이블 생성
RSI 값들을 쉽게 참조하기 위해 테이블에 저장할 수 있습니다:
// RSI 테이블 정의
table rsiTable(symbol, rsi)
// 각 바마다 RSI 기록
table.push(rsiTable, symbol, rsi)
이제 사용자는 차트 라인뿐만 아니라 데이터 창에서 정확한 RSI 숫자를 볼 수 있습니다.
2. 과매수/과매도 알림 추가
RSI가 70을 초과하거나 30 이하로 떨어질 때 알림을 발생시킬 수 있습니다:
// 과매수 알림
if rsi > 70
alert("RSI 과매수!")
// 과매도 알림
if rsi < 30
alert("RSI 과매도!")
이를 통해 트레이더들은 지표가 중요한 과매수 또는 과매도 조건을 신호할 때 실시간으로 알림을 받을 수 있습니다.
테이블은 역사적 데이터 접근을 제공하고 알림은 실행 가능한 신호를 생성합니다 — RSI 지표를 사용하는 트레이더들에게 유용한 기능입니다. 차트 상의 시각화를 넘어 지표를 확장할 수 있는 많은 가능성이 있습니다.
완성된 코드는 다음과 같습니다!
//@version=5
indicator("RSI", overlay=false)
// 사용자 입력
period = input(title="RSI 기간", type=input.integer, defval=14)
// RSI 시리즈
var rsi = na
// RSI 계산
rsi(period) =>
up = ta.rma(math.max(ta.change(close), 0), period)
down = ta.rma(-math.min(ta.change(close), 0), period)
rsi := down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// RSI 플롯
plot(rsi, title="RSI", style=plot.style_line, linewidth=2, color=#FF7200)
// 과매수 수준
h1 = hline(70, "Upper Band", color=#C0C0C0)
// 과매도 수준
h2 = hline(30, "Lower Band", color=#C0C0C0)
// RSI 테이블
table rsiTable(symbol, rsi)
table.push(rsiTable, symbol, rsi)
// 알림
if rsi > 70
alert("RSI 과매수!")
if rsi < 30
alert("RSI 과매도!")
이제 스크립트를 테스트하고 TradingView 커뮤니티에 발행하는 과정을 살펴보겠습니다.
지표 구성 및 테스트
EMA 지표를 발행하기 전에 구성하고 예상대로 작동하는지 테스트해야 합니다.
TradingView는 차트 환경을 통해 이를 쉽게 만들어 줍니다:
1. 기본 설정 추가하기
EMA 선의 색상과 두께를 사용자가 커스터마이징할 수 있도록 합시다:
// 색상 설정
col = input(title="Color", type=input.color, defval=#2962FF)
// 두께
thm = input(title="Thickness", type=input.integer, defval=2)
// 플롯 함수 업데이트
plot(ema_values, "EMA", color=col, linewidth=thm)
2. 차트에 스크립트 추가하기
Pine 에디터에서 하단에 있는 '차트에 넣기'를 클릭합니다. 이렇게 하면 지표가 가격 차트에 로드됩니다.
3. 지표 값 관찰하기
심볼과 시간 프레임을 변경해보세요. EMA 선이 예상대로 플롯되는지 확인합니다.
길이와 평활 입력을 조정하고 효과를 확인해보세요.
실제 계산되는 EMA 값들을 검사하기 위해, 차트에 값을 출력하는 plotchar() 함수를 사용할 수 있습니다:
// 차트에 EMA 값 출력하기
plotchar(ema_values, "EMA", "▲", location.bottom)
데이터 창은 디버깅을 위해 모든 지표 값들을 볼 수 있는 기능을 제공합니다.
데이터 창을 열고 "EMA" 시리즈를 찾아보세요.
4. 디버깅하기
지표가 오류를 출력하거나 이상하게 동작한다면, 스크립트로 돌아가서 디버깅하세요. 오타나 논리 오류 등을 수정하세요.
차트에 출력된 EMA 값들을 확인하고, 계산 문제를 식별하고 해결하는 데 도움이 됩니다. 데이터 창을 사용하면 각 바에서 정확한 EMA 숫자들을 검사하여 정확성을 보장할 수 있습니다.
지표 발행 및 공유하기
TradingView는 당신이 만든 PineScript 작품을 저장하고 그들의 공개 지표 라이브러리에 공유하는 것을 간단하게 만들어 줍니다:
1. 스크립트 저장하기
Pine 에디터에서 '저장'을 클릭하세요. 지표의 이름을 설정하고 저장하세요.
2. 공개로 설정하기
지표 설정에서 '개인 정보 설정'를 '퍼블릭'으로 변경하세요.
3. 설명 추가하기
지표가 무엇을 하는지 설명하는 내용을 '전략 설명하기' 필드에 기재하세요.
4. 커뮤니티 피드백 얻기
지표를 발행하고 다른 사용자들이 사용해보도록 권장하세요!
그들의 평가와 피드백을 관찰하여 시간이 지남에 따라 개선하세요.
그리고 이것이 바로 당신의 TradingView 지표를 세계와 공유하는 데 필요한 모든 것입니다!
PineScript는 지원이 많은 커뮤니티를 가지고 있으므로, PineCoders 채팅방과 위키와 같은 자원을 활용하여 당신의 창작물을 계속해서 개선하세요.
맺음말
트레이딩뷰와 파인스크립트를 활용한 지표 개발은 금융 시장 분석과 트레이딩 전략 수립에 큰 도움을 줍니다.
이 가이드가 여러분이 자신만의 지표를 개발하고, 트레이딩 전략을 자동화하는 데 필요한 기초를 마련하는 데 도움이 되길 바랍니다. 파인스크립트 커뮤니티는 항상 새로운 아이디어와 창작물을 환영합니다.
여러분의 독특한 지표를 개발하고 공유해보세요. 질문이 있거나 추가적인 도움이 필요하다면 언제든지 연락주세요.
여러분의 트레이딩 여정에 성공이 함께하기를 바랍니다. Happy coding!