기술적 투자는 차트 점술이 아니다
기술적 투자라는 말을 들으면 초보자는 대개 이런 장면을 떠올린다. 차트에 선이 여러 개 그어져 있고, 누군가가 “RSI가 낮다”, “MACD가 꺾였다”, “20일선이 깨졌다”라고 말한다. 그 말이 맞는 것처럼 들리면 사고, 틀린 것처럼 들리면 팔아야 할 것 같다. 그런데 그렇게 시작하면 보조지표는 공부 도구가 아니라 주문 버튼처럼 변한다.
기술적 투자의 출발점은 훨씬 단순하다. 주가와 거래량은 시장 참여자가 실제로 거래한 흔적이다. 그 흔적을 기간, 일봉, 주봉, 거래량, 이동평균, 변동성 같은 기준선으로 다시 정리하는 방식이 기술적 투자다. 가격이 왜 그 자리에서 멈췄는지, 어느 구간에서 매수와 매도가 부딪혔는지, 상승이 거래량을 동반했는지, 하락이 단기 흔들림인지 추세 변화인지 묻는 언어라고 보는 편이 맞다.

이 글은 특정 종목을 사거나 팔라는 글이 아니다. 샘플 종목 코드는 dartlab에서 price 데이터를 호출하는 방법을 보여주기 위한 재현 예시다. 핵심은 “어떤 지표가 몇이면 매수”가 아니라 데이터를 부르는 법, 터미널에서 보는 법, 지표가 무엇을 요약하는지, 언제 틀리는지를 초보자가 같은 순서로 따라갈 수 있게 만드는 것이다.
초보자가 먼저 버려야 하는 생각은 두 가지다. 첫째, 보조지표 하나가 결론 하나를 준다는 생각이다. 둘째, 지지선과 저항선이 정확한 가격 하나로 고정된다는 생각이다. 실제로는 기간을 일봉으로 보느냐 주봉으로 보느냐, 20일 이동평균을 쓰느냐 60일 이동평균을 쓰느냐, 거래량이 동반되었느냐에 따라 같은 가격도 다른 의미가 된다.
dartlab에서 price 데이터를 부르는 법
DartLab에서 가장 짧은 가격 데이터 호출은 dartlab.gather("price", "005930") 형태다. 국내 종목은 숫자 종목코드를 넣고, 미국 종목은 market="US"를 같이 넣는 식으로 시작한다. README의 기본 예시도 같은 방향이다. 초보자는 먼저 전체 전략을 세우기보다, 터미널에서 표가 어떻게 나오는지 확인하는 것이 좋다.
import dartlab
price = dartlab.gather("price", "005930")
print(price.tail(3)) 미국 종목은 이렇게 호출한다.
import dartlab
apple = dartlab.gather("price", "AAPL", market="US")
print(apple.tail(3)) Company 객체를 쓰면 같은 종목을 여러 관점으로 이어서 볼 때 편하다. 예를 들어 price 원천 표를 보고, 이어서 기술적 지표 표와 판단 요약을 같은 객체에서 호출할 수 있다.
from dartlab import Company
c = Company("005930")
raw_price = c.gather("price")
indicators = c.quant("지표")
verdict = c.quant("판단")
print(raw_price.columns)
print(indicators.select(["date", "close", "sma20", "sma60", "rsi", "macd", "adx", "atr"]).tail(3))
print(verdict) 여기서 중요한 점은 price 호출이 종가만 주는 함수가 아니라는 것이다. 로컬에서 확인한 dartlab.gather("price", "005930") 결과는 date, open, high, low, close, volume 같은 OHLCV 기본 데이터와 함께 sma5, sma20, sma60, ema12, ema26, rsi14, macd, atr14, obv를 같이 반환한다. 즉 가격 데이터는 “오늘 얼마에 끝났나”만 보는 표가 아니라, 초보자가 첫 번째 보조지표 묶음을 함께 확인하는 표다.
2026년 7월 8일 로컬 호출 기준으로 샘플 종목의 최근 3개 행을 좁혀 보면 이런 식으로 읽을 수 있다.
| date | close | volume | sma20 | sma60 | rsi14 | macd | atr14 | obv |
|---|---|---|---|---|---|---|---|---|
| 2026-07-06 | 318000 | 23872879 | 328800.00 | 283708.33 | 50.00 | 3316.31 | 25302.03 | 1160700000 |
| 2026-07-07 | 296000 | 32421032 | 327500.00 | 285133.33 | 45.39 | 994.71 | 25780.45 | 1128300000 |
| 2026-07-08 | 277500 | 22653809 | 326250.00 | 286358.33 | 41.90 | -2311.32 | 25688.99 | 1105600000 |
이 표를 보고 바로 “싸다” 또는 “비싸다”라고 말하면 안 된다. 이 표가 말해주는 것은 다르다. 7월 8일 종가는 20일 평균보다 낮고, 60일 평균보다도 낮다. RSI는 50 아래로 내려와 단기 상승 탄력이 약해졌다. MACD는 음수로 돌아섰다. ATR은 하루 변동 폭이 작지 않다는 점을 보여준다. OBV는 거래량을 가격 방향과 묶어서 누적한 값인데 최근 행에서는 줄어든다. 이 모든 것은 결론이 아니라 질문이다. “이 하락이 일시 조정인가, 추세 이탈인가?”, “거래량이 매도 압력으로 읽힐 만큼 충분한가?”, “20일선과 60일선이 저항으로 바뀌는가?”를 묻게 만든다.
Terminal에서는 어떤 방식으로 보는가
DartLab의 Terminal 화면은 시세, 재무, 공시 데이터를 한 화면에서 보는 워크벤치다. 주가 영역에서는 가격 차트와 보조지표 메뉴를 함께 쓴다. 코드로 price 표를 불러오는 방식이 표 중심이라면, Terminal은 같은 데이터를 시간의 모양으로 보여준다.
Terminal의 주가 차트 패널은 기본적으로 가격을 위에 놓고, 거래량과 RSI 같은 하단 보조지표를 함께 볼 수 있게 설계되어 있다. chartState 기준 기본 overlay는 이동평균 계열이고, 기본 sub indicator에는 거래량과 RSI가 들어간다. 메뉴에서는 MA, EMA, SMA, Bollinger, SAR 같은 주가 overlay와 MACD, RSI, KDJ, OBV, CCI, Williams %R, DMI, ROC 같은 하단 지표를 켜고 끌 수 있다.

초보자에게 Terminal이 좋은 이유는 한 가지다. 한 표의 숫자만 볼 때보다 지표가 가격을 얼마나 늦게 따라오는지 보기 쉽다. RSI가 낮아졌다고 해서 바로 반등하는 것이 아니고, MACD가 돌아섰다고 해서 바로 추세가 바뀌는 것도 아니다. 차트 위에서 보면 지표는 대개 가격 움직임을 요약해서 늦게 보여준다. 그래서 기술적 투자에서 지표는 신호등이 아니라 계기판에 가깝다. 속도를 보여주지만 목적지를 대신 정하지 않는다.
Terminal에서 초보자가 먼저 볼 순서는 이렇게 단순하게 잡으면 된다.
- 기간을 정한다. 처음에는 일봉 6개월 또는 1년처럼 너무 짧지 않은 범위가 좋다.
- 종가가 20일, 60일 이동평균 위인지 아래인지 본다.
- 하락일의 거래량이 평소보다 큰지 본다.
- RSI가 30 근처인지, 50 아래에서 약해지는지, 70 위에서 과열되는지 본다.
- MACD가 0선 위인지 아래인지, signal과의 간격이 벌어지는지 줄어드는지 본다.
- ATR이나 볼린저 밴드로 변동성이 커지는지 확인한다.
이 순서가 중요한 이유는 지표가 많아질수록 마음에 드는 지표만 고르는 문제가 생기기 때문이다. 가격은 이동평균 아래에 있는데 RSI가 낮다는 이유로만 매수 근거를 만들 수 있고, 거래량 없는 반등인데 MACD 히스토그램만 보고 추세 전환이라고 말할 수도 있다. 초보자는 지표를 많이 켜기보다 읽는 순서를 고정해야 한다.
보조지표는 서로 다른 질문에 답한다
보조지표는 모두 같은 말을 하지 않는다. 어떤 지표는 추세를 묻고, 어떤 지표는 속도를 묻고, 어떤 지표는 변동성을 묻고, 어떤 지표는 거래량의 힘을 묻는다. 이 차이를 모르면 “RSI는 괜찮은데 MACD는 나쁘다” 같은 문장이 혼란스럽게 들린다. 사실 두 지표가 충돌하는 것이 아니라 서로 다른 질문에 답하는 경우가 많다.
초보자를 위한 번역표는 이렇게 잡을 수 있다.
| 지표 | 초보자용 질문 | 대략적 의미 | 자주 하는 오해 |
|---|---|---|---|
| 이동평균 SMA | 최근 평균 가격보다 위인가 아래인가 | 5일, 20일, 60일 평균을 기준선으로 삼아 단기와 중기 추세를 본다 | 평균선 아래면 무조건 나쁘다고 단정한다 |
| EMA | 최근 가격 변화에 더 민감한 평균은 어떤가 | 최근 가격에 더 큰 가중치를 주어 빠른 변화를 본다 | SMA보다 빠르니 항상 더 정확하다고 믿는다 |
| RSI | 최근 상승과 하락의 힘이 어느 쪽인가 | 보통 30 아래는 과매도, 70 위는 과열 후보로 본다 | 30 아래면 반드시 반등한다고 생각한다 |
| MACD | 단기 평균과 장기 평균의 차이가 벌어지는가 | 추세 전환과 모멘텀 변화를 본다 | 교차 하나만 보고 즉시 매매 신호로 해석한다 |
| 볼린저 밴드 | 가격이 평균 주변에서 얼마나 멀어졌나 | 중심선과 상단, 하단 밴드로 변동성 확장을 본다 | 하단 밴드 터치가 항상 매수 기회라고 믿는다 |
| ATR | 하루 변동 폭이 얼마나 커졌나 | 방향이 아니라 변동성 크기를 본다 | ATR 상승을 상승 신호로 착각한다 |
| OBV | 거래량이 가격 방향과 함께 쌓이는가 | 상승일 거래량은 더하고 하락일 거래량은 빼 누적 흐름을 본다 | 값의 절대 크기만 비교한다 |
| ADX | 추세가 강한가 약한가 | 상승과 하락 방향보다 추세 강도를 본다 | ADX 상승을 주가 상승으로 오해한다 |
이동평균은 기술적 투자에서 가장 먼저 배우는 기준선이다. 5일선은 매우 짧은 호흡, 20일선은 대략 한 달 거래일에 가까운 단기 기준, 60일선은 분기 흐름에 가까운 중기 기준으로 많이 쓴다. 종가가 20일선 위에서 유지되면 단기 추세가 살아 있다고 해석할 수 있지만, 이 말은 “무조건 오른다”가 아니다. 가격이 평균보다 위에 있다는 관찰일 뿐이다.
RSI는 최근 상승 폭과 하락 폭의 비율을 0부터 100 사이로 만든 모멘텀 지표다. 널리 쓰이는 기본 기간은 14다. 70 위는 과열, 30 아래는 과매도 후보라고 말하지만, 강한 상승 추세에서는 RSI가 오래 70 근처에 머물 수 있고, 강한 하락 추세에서는 30 아래에서도 더 내려갈 수 있다. 그래서 RSI는 독립 결론보다 “속도가 과하게 한쪽으로 쏠렸는가”를 묻는 도구로 쓰는 편이 낫다.
MACD는 EMA 12와 EMA 26의 차이를 기본으로 만든다. 짧은 평균이 긴 평균보다 빠르게 올라가면 MACD가 개선되고, 반대로 짧은 평균이 약해지면 MACD도 내려간다. 여기에 signal 선과 histogram을 붙여 추세 변화의 속도를 본다. 초보자가 특히 조심할 점은 MACD가 후행 지표라는 사실이다. 가격이 먼저 움직이고, 평균이 따라 움직이며, 그 차이가 다시 MACD가 된다.
볼린저 밴드는 중심 이동평균과 표준편차를 이용해 가격이 평균에서 얼마나 멀어졌는지 보여준다. 하단 밴드에 닿으면 싸 보이지만, 하락 추세에서는 밴드를 타고 계속 내려갈 수 있다. 상단 밴드에 닿으면 비싸 보이지만, 강한 추세에서는 상단 밴드를 따라 더 오를 수 있다. 그래서 볼린저는 매수와 매도 버튼이 아니라 변동성이 넓어졌는지 좁아졌는지 보는 도구다.
ATR은 방향을 말하지 않는다. 평균 진폭, 즉 가격이 하루에 얼마나 크게 흔들리는지를 보여준다. ATR이 커진다는 것은 상승이 강하다는 뜻이 아니라 불확실성이 커졌다는 뜻에 가깝다. 손절이나 포지션 크기를 고민하는 사람에게는 유용하지만, 초보자가 방향 지표로 착각하면 위험하다.
OBV는 거래량을 가격 방향과 함께 누적한다. 가격이 오른 날의 거래량은 더하고, 가격이 내린 날의 거래량은 뺀다. 가격은 횡보하는데 OBV가 꾸준히 오른다면 누군가가 물량을 모으는지 질문해볼 수 있다. 반대로 가격은 버티는데 OBV가 빠지면 수급이 약해지는지 볼 수 있다. 다만 OBV도 절대값보다 방향과 가격의 괴리를 보는 쪽이 낫다.
지지선과 저항선은 가격 하나가 아니라 구간이다
초보자가 기술적 투자를 배우면 곧바로 묻는 질문이 있다. “지금 주가가 떨어지면 지지선은 얼마인가?” 이 질문 자체는 좋다. 다만 답을 하나의 숫자로 고정하면 곧바로 위험해진다. 지지선은 많은 참여자가 다시 사볼 만하다고 생각하는 구간이고, 저항선은 팔거나 관망하려는 힘이 커지는 구간이다. 그래서 지지선은 가격 하나가 아니라 거래가 많이 부딪힌 구간으로 봐야 한다.
지지선 후보는 보통 세 곳에서 나온다.
- 이전에 가격이 여러 번 멈춘 저점 구간
- 20일, 60일, 120일 이동평균 같은 기준선
- 거래량이 크게 터진 가격대 또는 갭이 생긴 구간
예를 들어 종가가 20일선 아래로 내려오고, 60일선 근처까지 밀렸다고 하자. 초보자는 “60일선이 지지선이니 산다”라고 말하기 쉽다. 더 좋은 질문은 다르다. 첫째, 60일선 근처에서 거래량이 줄며 매도가 약해지는가. 둘째, 다음 반등에서 20일선을 다시 회복하는가. 셋째, 회사의 실적이나 공시, 산업 뉴스가 기존 기대를 훼손했는가. 셋 중 하나라도 나쁘면 지지선은 의미가 약해진다.
지지선이 깨졌다는 말도 조심해야 한다. 장중 저가가 잠깐 밑으로 내려갔는지, 종가가 확실히 밑에서 끝났는지, 다음 날까지 회복하지 못했는지에 따라 의미가 다르다. 그래서 기술적 투자에서는 “일봉 종가 기준”, “주봉 종가 기준”, “거래량 동반 이탈” 같은 말을 붙인다. 기준을 미리 정하지 않으면 차트를 보고 나서 해석을 바꾸게 된다.
이 지점에서 기술적 투자는 기업이야기와 연결된다. 어떤 종목이 HBM, AI, 로봇 같은 기술 서사로 올랐다면 차트만으로 그 상승을 설명할 수 없다. 기술이 실제 병목인지, 수율과 인증이 있는지, 고객과 CAPEX가 붙는지 봐야 한다. 예를 들어 기술 서사가 주가 기대와 연결되는 방식은 HBM 스택 패키징 테스트 같은 글을 함께 읽으면 더 잘 보인다. 차트가 기대를 보여준다면, 기술 글은 그 기대가 어디에서 생겼는지를 묻는다.
주가 랠리 자체를 읽을 때도 같은 원칙이 필요하다. 삼성전자 랠리는 반도체 이익 회복과 기대가 차트 위로 어떻게 번역되는지를 보여주고, SK하이닉스 시장 견인은 한 종목의 강한 추세가 지수와 수급 언어로 확장되는 장면을 보여준다. 이런 글을 같이 읽으면 20일선 회복 같은 기술적 신호가 왜 산업 서사와 분리될 수 없는지 이해하기 쉽다.
반대로 가격이 싸 보인다는 이유만으로도 부족하다. 재무 체력과 밸류에이션을 같이 봐야 한다. 차트상 반등 후보처럼 보여도 현금흐름, 부채, 이자비용이 약하면 반등은 짧게 끝날 수 있다. 이런 재점검은 순현금이 시가총액보다 큰 회사나 이자보상배율로 보는 좀비기업 같은 데이터 글이 맡는 역할이다. 투자이야기의 차트 설명은 그런 선행 글로 넘어가는 입구여야지, 공시와 재무를 대체해서는 안 된다.
dartlab 결과를 초보자용 체크표로 바꾸기
dartlab.gather("price")가 반환하는 기본 컬럼을 초보자용으로 줄이면 아래 정도가 좋다.
import dartlab
price = dartlab.gather("price", "005930")
watch = price.select([
"date",
"close",
"volume",
"sma20",
"sma60",
"rsi14",
"macd",
"atr14",
"obv",
])
print(watch.tail(5)) 이 표에서 초보자가 각 열을 읽는 순서는 다음과 같다.
| 열 | 먼저 볼 질문 | 해석의 출발점 |
|---|---|---|
date | 어느 기준일의 데이터인가 | 가격 데이터는 최신성부터 확인한다. 국내 EOD 데이터는 장 마감 이후 반영 시차가 있을 수 있다. |
close | 종가가 기준선 위인가 아래인가 | 장중 고가와 저가보다 종가가 더 중요한 기준이 되는 경우가 많다. |
volume | 움직임에 거래량이 붙었나 | 가격 변화가 시장 참여자의 힘을 동반했는지 본다. |
sma20 | 단기 평균을 회복했나 | 20일선은 단기 추세의 기준선 후보로 많이 쓴다. |
sma60 | 중기 추세가 살아 있나 | 60일선 이탈은 단기 조정보다 더 큰 재점검 신호일 수 있다. |
rsi14 | 상승과 하락의 힘이 어디로 쏠렸나 | 30과 70은 절대 규칙이 아니라 과매도와 과열 후보 구간이다. |
macd | 단기 평균과 장기 평균의 차이가 개선되나 | 0선 위아래, signal과의 관계를 함께 본다. |
atr14 | 변동성이 커졌나 | 방향이 아니라 흔들림의 크기를 본다. |
obv | 거래량 흐름이 가격과 같은 방향인가 | 값 자체보다 방향과 괴리가 중요하다. |
Company.quant("지표")를 쓰면 더 많은 지표가 붙는다. 로컬 확인 기준으로 sma120, macdSignal, macdHist, adx, psar, supertrend, stDirection, stochK, stochD, roc, momentum, williamsR, cci, cmo, bbUpper, bbLower, atr, keltUpper, keltLower, donchianUpper, donchianLower, mfi, forceIndex, bullPower, bearPower 같은 열을 볼 수 있다.
이 지표들이 많아 보이지만 분류하면 단순하다. 추세 지표는 가격이 어느 방향으로 움직이는지 묻는다. 모멘텀 지표는 그 움직임의 속도가 강한지 약한지 묻는다. 변동성 지표는 가격의 흔들림이 커졌는지 묻는다. 거래량 지표는 그 움직임에 실제 거래가 붙었는지 묻는다. 초보자는 모든 지표를 외우기보다 이 네 칸 중 어디에 속하는지만 먼저 구분하면 된다.
Company.quant("판단")은 더 요약된 판단을 돌려준다. 예를 들어 verdict, score, rsi, adx, aboveSma20, aboveSma60, bbPosition, signals 같은 정보를 묶는다. 이 결과를 볼 때도 “약세니까 판다”가 아니라 “왜 약세로 분류되었나”를 역추적해야 한다. 종가가 20일선과 60일선 아래인지, RSI가 50 아래인지, MACD signal이 나빠졌는지, ADX가 추세 강도를 얼마나 보여주는지 확인하는 식이다.
보조지표가 틀리는 조건
기술적 투자가 유용하려면 틀리는 조건을 같이 배워야 한다. 보조지표는 과거 가격과 거래량을 계산한 결과다. 그래서 새로운 정보가 들어오면 쉽게 무효가 된다. 실적 발표, 대규모 수주, 고객 이탈, 규제, 금리 급등, 환율 급변, 유상증자, 블록딜, 공매도 제한 같은 사건은 지표가 천천히 반영하기 전에 가격을 먼저 바꾼다.
첫 번째 한계는 후행성이다. 이동평균, MACD, RSI 대부분은 이미 지나간 가격을 계산한다. 가격이 급락한 뒤 RSI가 낮아지는 것은 당연하다. 낮아졌다는 사실이 곧 반등을 뜻하지 않는다.
두 번째 한계는 기간 선택이다. 5일선에서는 약세인데 60일선에서는 아직 상승 추세일 수 있다. 일봉에서는 과매도인데 주봉에서는 이제 막 하락이 시작될 수도 있다. 그래서 글이나 리포트에서 “지지선”이라는 말을 볼 때는 반드시 기간과 봉 단위를 물어야 한다.
세 번째 한계는 거래량 없는 신호다. 가격이 기준선을 살짝 회복해도 거래량이 너무 작으면 신뢰도가 낮다. 반대로 큰 거래량으로 지지선을 깨면 기존 시나리오는 더 엄격하게 재점검해야 한다. 거래량은 기술적 투자에서 가격의 증언을 확인하는 장치다.
네 번째 한계는 서사 변화다. 주가가 기술투자 테마로 움직일 때는 차트보다 서사가 먼저 바뀌는 경우가 많다. HBM 공급 병목이 풀리거나, 특정 고객 인증이 지연되거나, CAPEX 계획이 줄어들면 이동평균은 뒤늦게 꺾인다. 이런 상황에서는 차트만 보지 말고 기술과 공시 글을 함께 봐야 한다.
다섯 번째 한계는 시장 전체 변수다. 금리, 환율, 물가, 유동성, 지수 리밸런싱은 개별 종목의 지표를 한꺼번에 흔든다. 개별 차트가 좋아 보여도 시장 전체가 위험회피로 바뀌면 지지선은 쉽게 깨진다. 그래서 기술적 투자는 가격 차트만 보는 기법이 아니라 시장 환경을 함께 묻는 습관이어야 한다.
초보자가 다음에 확인할 것
기술적 투자란 “차트로 미래를 맞히는 법”이 아니다. 더 정확히 말하면 가격과 거래량을 기준선으로 정리해서 다음 질문을 만드는 법이다. 가격이 이동평균 위인지, 거래량이 붙었는지, RSI와 MACD가 같은 방향인지, 변동성이 커졌는지, 지지선이 종가 기준으로 지켜졌는지 확인한다. 그리고 그 다음에는 반드시 기업, 산업, 데이터, 경제 변수로 돌아간다.
초보자는 아래 순서만 반복해도 충분히 많은 실수를 줄일 수 있다.
- 오늘 보는 차트가 일봉인지 주봉인지 먼저 적는다.
- 데이터 기준일과 가격 출처를 확인한다.
- 종가가 20일선과 60일선 위인지 아래인지 본다.
- 기준선 이탈이나 회복에 거래량이 붙었는지 본다.
- RSI는 과열과 과매도 후보로만 읽고, 단독 결론으로 쓰지 않는다.
- MACD는 후행 지표라는 점을 전제로 추세 변화의 속도만 본다.
- ATR과 볼린저 밴드는 방향이 아니라 변동성을 본다.
- 지지선이 깨졌다면 장중 이탈인지 종가 이탈인지 구분한다.
- 뉴스, 공시, 실적, 금리, 환율 때문에 기존 기준이 무효가 되었는지 확인한다.
- 마지막 문장은 매수와 매도 결론이 아니라 다음에 확인할 데이터로 끝낸다.
이 글의 목적도 그 순서에 있다. dartlab으로 price 데이터를 부르고, Terminal에서 같은 데이터를 차트로 보고, 보조지표가 무엇을 요약하는지 이해하고, 틀리는 조건을 적어두면 기술적 투자는 훨씬 덜 위험한 언어가 된다. 신호를 믿는 것이 아니라 신호가 말하는 질문을 기록하는 것이다.
바깥 참고로는 RSI의 일반 정의는 Wikipedia Relative strength index, MACD 설명은 Investopedia MACD, 볼린저 밴드 개념은 Investopedia Bollinger Bands, ATR 개념은 Wikipedia Average true range, ATR 실전 설명은 StockCharts Average True Range를 함께 확인할 수 있다. 다만 이 글에서는 외부 정의보다 DartLab에서 같은 데이터를 어떻게 호출하고 초보자가 어떤 순서로 읽을지를 우선했다.