초보자를 위한 Pine Script v5 입문: indicator() 함수와 차트 오버레이 쉽게 풀이

 파인 스크립트(Pine Script) v5는 트레이딩뷰(TradingView)에서 자신만의 지표와 전략을 구현하기 위해 사용하는 전용 스크립트 언어입니다. 스크립트 작성의 첫걸음은 스크립트의 선언문(Declaration Statement)과 차트 오버레이(Overlay)의 작동 방식 및 메커니즘을 정확히 이해하는 것입니다.

Pine Script v5 기초 구조: indicator() 함수 옵션과 차트 오버레이 개념 완벽 정리 썸네일 이미지. 트레이딩뷰 차트와 코드가 띄워진 모니터, 손가락으로 텍스트를 가리키는 남성 캐릭터 일러스트.

Pine Script v5의 핵심 선언 함수인 indicator()의 주요 옵션부터 차트 오버레이 개념, 실행 메커니즘까지 완벽히 정리를 진행해보겠습니다.

1. Pine Script v5 코드의 기본 구조

Pine Script 파일은 단순한 코드 모음이 아니라 트레이딩뷰 엔진이 해석하는 규칙적인 구조를 갖추고 있습니다. 최소한의 작동 가능한 Pine Script v5 코드는 다음과 같습니다.

//@version=5

indicator("나의 첫 지표", overlay=true)

plot(close)

이 세 줄은 파인 스크립트의 3대 핵심 요소를 나타냅니다.

  1. 컴파일러 버전 지정 (//@version=5): 반드시 첫 번째 혹은 두 번째 줄에 위치해야 하며, 현재 메인 버전인 v5를 사용함을 명시합니다.

  2. 지표 선언 (indicator(...)): 스크립트의 종류, 이름, 차트 표시 방식 등 메타데이터를 정의합니다.

  3. 출력/계산 로직 (plot(...)): 실제 차트에 데이터를 시각화하거나 계산을 수행하는 구문입니다.


2. indicator() 함수와 핵심 옵션 완벽 분석

indicator() 함수는 스크립트가 실행될 때 트레이딩뷰 엔진에 지표의 기본 속성을 전달합니다. 주요 옵션들을 파악해 두면 목적에 맞는 지표를 훨씬 정교하게 설계할 수 있습니다.

주요 매개변수(Parameters) 상세 정리

옵션명타입기본값역할 및 설명
titlestring필수 입력지표의 공식 이름입니다. 지표 검색창 및 차트 좌측 상단에 표시됩니다.
shorttitlestringtitle과 동일차트 상단 레이블에 짧게 표시할 이름입니다. (예: title="Relative Strength Index", shorttitle="RSI")
overlayboolfalse가장 중요한 옵션. 메인 가격 차트 위에 그릴지(true), 하단 별도 패널에 그릴지(false) 결정합니다.
formatstringformat.inherit축에 표시되는 수치 포맷을 설정합니다. (format.price, format.volume, format.percent 등)
precisionintnone소수점 아래 표시할 자릿수를 지정합니다. (예: precision=2)
explicit_implements_timeframeboolfalse멀티 타임프레임(MTF) 계산 시 지표가 해당 타임프레임을 직접 제어함을 명시할 때 사용합니다.
timeframestring""지표 계산의 기본 타임프레임을 고정합니다. (예: timeframe="D"로 설정 시 5분봉 차트에서도 일봉 데이터를 계산)
timeframe_gapsbooltrue상위 타임프레임 데이터 사용 시 봉 사이에 발생하는 빈 곳(Gap) 처리 여부를 결정합니다.
예시 코드로 보는 indicator() 활용
//@version=5
indicator(
     title="이동평균선 및 RSI 통합 지표", 
     shorttitle="MA_RSI", 
     overlay=true, 
     precision=2
     )

// overlay=true 이므로 메인 차트에 이동평균선이 그려집니다.
ma20 = ta.sma(close, 20)
plot(ma20, title="20일 이동평균", color=color.blue, linewidth=2)


3. 차트 오버레이(Overlay) 개념과 작동 메커니즘

Pine Script를 처음 작성할 때 가장 흔히 하는 실수 중 하나가 오버레이 옵션 설정 오류입니다.

1) overlay = true (메인 차트 오버레이)

  • 개념: 주가 캔들스틱(Price Candles)이 위치한 메인 차트 창 위에 지표를 직접 포개어 그리는 방식입니다.

  • 주요 용도: 가격(Price)과 동일한 단위를 공유하는 지표에 사용됩니다.

    • 이동평균선(SMA, EMA)

    • 볼린저 밴드(Bollinger Bands)

    • 일목균형표(Ichimoku Cloud)

    • 엔벨로프, 피봇 포인트 등

  • 주의사항: 가격 축(Y축)을 주가와 공유하므로, 값이 0~100 사이로 고정된 오실레이터 지표를 overlay=true로 설정하면 주가 차트 바닥에 납작하게 누워서 표시되어 식별이 불가능해집니다.

2) overlay = false (하단 별도 패널)

  • 개념: 메인 가격 차트 아래에 독립된 새로운 패널(Panel)을 생성하여 지표를 표시합니다.

  • 주요 용도: 가격과 단위가 다르거나 0을 기준선으로 상하 움직임을 보이는 오실레이터 지표에 사용됩니다.

    • RSI (Relative Strength Index)

    • MACD (Moving Average Convergence Divergence)

    • 스토캐스틱 (Stochastic)

    • 거래량(Volume - 메인 차트와 분리할 경우)


4. Pine Script의 핵심 실행 구조: 봉 단위(Bar-by-Bar) 실행

Pine Script는 일반적인 프로그래밍 언어와 다른 고유한 실행 모델을 가지고 있습니다. 이를 'Bar-by-Bar Execution(봉 단위 실행)'이라고 합니다.

[차트의 첫 봉 (Bar Index 0)] -> [두 번째 봉] -> ... -> [현재 진행 중인 봉 (Real-time Bar)] │ │ │ 코드 1회 실행                             코드 1회 실행                  가격 변동마다 반복 실행

  1. 역사적 데이터(Historical Bars) 계산: 차트에 로드된 과거 데이터의 가장 첫 번째 봉(Bar 0)부터 시작하여, 마지막 완료된 봉까지 스크립트 전체가 봉 1개당 1회씩 순차적으로 실행됩니다.

  2. 실시간 봉(Real-time Bar) 계산: 현재 진행 중인 봉에서는 가격이 변할 때마다(Tick 단위) 스크립트 전체가 계속 다시 계산됩니다. 봉이 종가(Close)를 확정 짓는 순간 해당 값이 저장되고 다음 봉으로 넘어갑니다.

이 동작 메커니즘을 이해해야 ta.sma(), ta.rsi() 같은 내장 함수들이 봉이 이동할 때마다 과거 값을 기억하고 연속적인 선을 그릴 수 있는 이유를 이해할 수 있습니다.


5. 실전 응용 예제

오버레이 유무에 따른 두 가지 지표를 각각 작성해보며 구조 차이를 확인해보겠습니다.

예제 1: 메인 차트에 그려지는 '이중 지수이동평균(EMA) 지표' (overlay=true)

//@version=5
indicator("단기/장기 EMA 오버레이", shorttitle="Dual EMA", overlay=true)

// 입력값 정의
shortLen = input.int(9, title="단기 주기")
longLen  = input.int(21, title="장기 주기")

// 지표 계산
emaShort = ta.ema(close, shortLen)
emaLong  = ta.ema(close, longLen)

// 차트 시각화 (메인 캔들 위에 그려짐)
plot(emaShort, title="단기 EMA", color=color.green, linewidth=2)
plot(emaLong, title="장기 EMA", color=color.red, linewidth=2)

예제 2: 하단 패널에 그려지는 'RSI & 과매수/과매도 기준선' (overlay=false)
//@version=5
indicator("RSI 하단 패널 지표", shorttitle="My RSI", overlay=false, precision=1)

// 입력 및 계산
rsiLength = input.int(14, title="RSI 기간")
rsiVal = ta.rsi(close, rsiLength)

// 지표 시각화 (하단 분리 패널에 그려짐)
plot(rsiVal, title="RSI", color=color.purple, linewidth=2)

// 기준선 설정 (70: 과매수, 30: 과매도)
hline(70, "과매수 기준선", color=color.red, linestyle=hline.style_dashed)
hline(30, "과매도 기준선", color=color.green, linestyle=hline.style_dashed)
fill(hline(70), hline(30), color=color.rgb(126, 87, 194, 90), title="평균 구간 배경")

요약 정리

  1. Pine Script v5는 //@version=5 명시로 시작해야 합니다.

  2. indicator() 함수는 지표의 이름과 표시 방식을 설정하는 메타데이터 선언부입니다.

  3. overlay=true는 이동평균선처럼 주가 차트에 포개어 그릴 때 사용하며, overlay=false는 RSI/MACD처럼 하단 패널에 별도로 나타낼 때 사용합니다.

  4. 파인 스크립트 코드는 차트의 과거 봉부터 현재 봉까지 한 봉씩 순차적으로 순회하며 실행됩니다.

댓글

이 블로그의 인기 게시물

엔트로픽 상장일 전망과 관련주 총정리: 클로드(Claude) 개발사의 IPO 주식 투자 가이드

RSI와 MACD를 결합한 나만의 커스텀 다중 하단 지표 제작 완벽 가이드

[파이썬 자동매매] CCXT 웹소켓(WebSocket)으로 해외 거래소 호가창 실시간 수집 및 DataFrame 재구성