안녕하세요! 이번 글에선 가장 기초라고 할 수 있는 변수와 자료형에 대해 알아보도록 하겠습니다.
변수란 무엇인가요? — “값을 담는 상자”
- 변수(variable) = “필요한 값을 잠시 보관했다가 꺼내 쓰는 상자”
- 주가·거래량처럼 시계가 흐르며 계속 변하는 숫자도,
‘매수 신호인가?’ 같은 참/거짓,
‘알림 메시지’ 같은 글자도 모두 변수에 담아 둡니다.
변수 이름 짓기 — 상자에 라벨 붙이기
추천 |
비추천 |
이유 |
todayClose |
tc |
글자만 봐도 ‘오늘 종가’임을 알 수 있어요. |
isBullish |
flag1 |
목적이 분명해야 나중에 찾기 쉽습니다. |
팁: 띄어쓰기 대신 대문자(camelCase)나 밑줄(snake_case)을 씁니다.
한글도 기술적으로 가능하지만, 해외 사용자와 코드 공유 시 깨질 수 있어 영어를 권장합니다.
값의 종류(자료형)
자료형 |
일상 속 예 |
파인스크립트에서 주로 쓰는 값 |
숫자(정수) int |
사람 수 “3명” |
봉 개수, 카운터 |
숫자(실수) float |
체중계 65.3 kg |
가격, 이동평균 |
참/거짓 bool |
전구 스위치 ON/OFF |
조건 만족 여부 |
글자 string |
포스트잇 문장 |
알림 메시지 |
색깔 color |
형광펜 컬러 |
상승·하락 표시 |
목록 array |
10칸 달걀 판 |
최근 N개의 값 묶음 |
변수 선언 방식 3가지 + 기초 코드 예시
1. 암시적(자동) 선언 — 빠르지만 오타 주의!
//@version=5
indicator("암시적 선언", overlay=true)
// 값 저장 상자를 따로 선언하지 않고 바로 대입
price = close // 실수(float) 시계열
isUpBar = close > open // 참/거짓(bool)
plot(price, color=isUpBar ? color.lime : color.red)
- 대입(
=
)과 함께 자동으로 상자가 만들어집니다. - 오타(
prcie
)를 내면 새로운 변수로 인식하니 코드를 잘못 이해할 위험이 있습니다.
2. 명시적 선언 — 팀 작업·대형 스크립트에 필수
//@version=5
indicator("명시적 선언", overlay=true)
// 자료형 + 이름 = 값
float todayClose = close
bool isUpBar = close > open
int count20 = 20
plot(todayClose, title="종가")
float todayClose
처럼 자료형을 앞에 써서
“저 상자 안에는 실수가 들어 있다”는 걸 확실히 합니다.- 유지보수와 협업 시 가독성이 훨씬 좋아집니다.
3. var
고정 변수 — 한 번만 초기화하고 평생 기억
//@version=5
indicator("var 변수", overlay=false)
// 첫 캔들에서만 값을 넣고, 이후로는 유지
var float highestClose = na // 아직 모르면 na(비어 있음)
if na(highestClose) or close > highestClose
highestClose := close // := 는 상자 내용 바꾸기
plot(highestClose, color=color.orange, title="역대 최고 종가")
var
는 첫 번째 봉에서 딱 한 번 실행됩니다.- 백테스트 기간이 길어져도 최고값이 초기화되지 않아 효율적입니다.
“값을 꺼내 쓰는” 3가지 패턴 예제
1. 오늘 종가가 어제 종가보다 높을 때 색상 바꾸기
//@version=5
indicator("전일 대비 상승", overlay=true)
// 어제 종가 = close[1] ← 과거 값은 대괄호 [1], [2] …
bool isUpFromYesterday = close > close[1]
barcolor(isUpFromYesterday ? color.new(color.green, 0)
: color.new(color.red, 0))
close[1]
은 “하나 전 봉” 종가입니다.
2. 최근 5봉 평균 가격 계산하기
//@version=5
indicator("최근 5봉 평균", overlay=true)
float avg5 = ta.sma(close, 5) // Simple Moving Average(단순 평균)
plot(avg5, color=color.yellow, title="5봉 평균")
- 내장 함수
ta.sma()
를 쓰면 “5개 값 합 ÷ 5”를 자동으로 해줍니다. ta
접두사는 “Technical Analysis(기술적 분석)” 함수 모음을 뜻합니다.
3. 상승 신호 발생 횟수 세기
//@version=5
indicator("신호 카운터", overlay=false)
float sma20 = ta.sma(close, 20)
bool buyCond = ta.crossover(close, sma20)
// 신호가 나올 때마다 1씩 증가 (var 로 고정)
var int buyCount = 0
if buyCond
buyCount += 1
label.new(bar_index, high, text="총 신호: " + str.tostring(buyCount))
var int buyCount = 0
→ 첫 봉에 0 저장, 이후 카운터 역할str.tostring()
으로 숫자를 문자로 바꿔 라벨에 표시합니다.
초보자가 가장 많이 묻는 “에러·궁금증 TOP 3”
상황 |
쉬운 해결책 |
Cannot use 'series float' in 'if' condition |
값이 비어 있으면(na) 참/거짓을 판단 불가. if not na(price) 로 먼저 확인 |
Index can't be negative |
close[-1] 처럼 음수는 불가. 0 이상 인덱스만 사용하세요. |
변수 이름에 한글 썼더니 깨져요 |
에디터·브라우저마다 인코딩 이슈가 있으니 영어로 바꾸면 해결됩니다. |
핵심 5줄 요약
- 변수 = 값 보관 상자 (우편함처럼 꺼내 쓰기)
- 상자에 라벨(이름) 을 붙여야 헷갈리지 않음
- 숫자·글자·참/거짓 등 값 종류(자료형) 에 맞는 상자를 선택
var
를 쓰면 한 번만 값 넣고 평생 유지할 수 있음- 직접 작은 코드를 타이핑해 보며 “상자 안 값이 바뀌는 순간”을 눈으로 확인해 보세요!
다음 강의 예고
다음 글에서는 연산자와 조건문을 배웁니다.
오늘 만든 변수들을 더하고, 빼고, 비교해서
“3일 연속 상승” 같은 매매 조건을 완성하는 방법을 다룰 예정입니다.
쉽고 재미있는 예제도 많이 준비했으니 기대해 주세요!