Skip to content

기술적 분석 1장: 차트를 믿어도 될까?

차트와 기술적 분석 데이터

기술적 분석 글은 흔히 특정 종목의 차트를 보여주며 시작합니다. 하지만 하나의 차트가 예쁘게 설명된다는 사실과 그 신호가 여러 종목에서 반복적으로 작동한다는 사실은 다릅니다. 이 시리즈에서는 차트를 먼저 믿지 않고, 퀀티랩의 실제 일봉 데이터로 신호를 만들고 이후 수익률을 측정합니다.

분석 기준일은 2026년 9월 4일입니다. 기준일 거래대금이 큰 일반 주식 300개를 표본으로 선정하고, 2024년 1월 1일부터 2026년 9월 4일까지의 일봉을 사용했습니다. ETF, ETN, 인버스, 레버리지, 채권형 상품은 제외했습니다.

항목
표본 종목 수300개
OHLCV 원자료 행 수175,375개
120일 워밍업 이후 지표 행 수150,419개
가격 데이터 기간2024-01-01 ~ 2026-09-04
학습 구간2024-01-01 ~ 2025-12-31
검증 구간2026-01-01 ~ 2026-09-04

표본은 모든 상장 종목을 대표하지 않습니다. 거래대금 상위 종목을 사용했기 때문에 유동성이 낮은 종목의 체결 문제를 줄이는 대신, 대형주와 관심 종목에 유리한 표본 편향이 생깁니다. 이 한계를 숨기지 않고 원자료와 조건을 함께 공개합니다.

import pandas as pd
df = pd.read_csv(
"ohlcv.csv",
dtype={"code": str},
parse_dates=["date"],
)
df = df.sort_values(["code", "date"])
df["return_1d"] = df.groupby("code")["close"].pct_change()
df["return_20d"] = df.groupby("code")["close"].pct_change(20)
print(df.shape)
print(df[["code", "date", "close", "return_20d"]].tail())

이 코드의 핵심은 종목별로 날짜를 정렬한 뒤 수익률을 계산하는 것입니다. 전체 데이터를 날짜만 기준으로 정렬하면 서로 다른 회사의 가격이 이어지는 오류가 생깁니다.

이번 시리즈의 모든 지표는 동일한 300개 종목과 동일한 검증 기간을 사용합니다. 따라서 RSI, MACD, 볼린저 밴드, 거래량 돌파 신호의 결과를 서로 비교할 수 있습니다. 신호가 발생한 날의 종가로 수익률을 계산하지 않고, 신호 이후 5·20·60거래일의 종가를 비교해 미래 정보를 미리 사용하지 않도록 했습니다.

기술적 신호의 20일 선행수익률

데이터에서 얻은 첫 번째 인사이트

Section titled “데이터에서 얻은 첫 번째 인사이트”

기술적 분석에서 가장 중요한 것은 지표의 이름이 아니라 표본과 실행 시점의 고정입니다.

  • 어떤 종목을 분석했는가
  • 신호는 장 마감 전에 알 수 있었는가
  • 매수는 당일 종가인가, 다음 거래일인가
  • 거래비용과 슬리피지를 반영했는가
  • 수익률은 평균만 봤는가, 중앙값과 손실 구간도 봤는가

이 기준을 먼저 정하지 않으면 어떤 지표도 쉽게 좋아 보일 수 있습니다. 다음 장부터는 이 데이터에 이동평균선을 계산하고, 추세 신호가 실제로 어떤 결과를 냈는지 확인합니다.

원본은 OHLCV CSV, 종목 유니버스, 전체 데이터 설명에서 확인할 수 있습니다. 전체 재현 코드는 technical_analysis.py로 제공합니다.