콘텐츠로 이동
13 posts with the tag “기술적 분석”

기술적 분석 11장: 오늘의 후보 종목 스크리닝

기술적 분석 종목 스크리닝

앞 장에서는 복합 신호가 산업과 시장 국면에 따라 다른 결과를 보인다는 점을 확인했습니다. 이번에는 그 신호를 2026년 9월 4일 기준 종목 전체에 적용해 실제 후보군을 추출합니다. 여기서 중요한 질문은 “점수가 높은 종목이 곧 매수 종목인가?”가 아니라 “어떤 조건을 통과한 후보를 다음 분석 대상으로 좁힐 수 있는가?”입니다. 이 결과는 매수 추천 목록이 아니라, 동일한 규칙으로 다시 확인할 수 있는 분석 후보 목록입니다.

다섯 조건 중 네 개 이상을 만족하는 종목을 후보로 분류했습니다.

df["score"] = (
(df["close"] > df["ma20"]).astype(int)
+ (df["ma20"] > df["ma60"]).astype(int)
+ df["rsi14"].between(40, 70).astype(int)
+ (df["macd"] > df["macd_signal"]).astype(int)
+ (df["volume_ratio20"] > 1).astype(int)
)
latest = df[df["date"] == "20260904"]
screen = latest[latest["score"] >= 4].sort_values(
["score", "volume_ratio20"], ascending=False
)
종목시장종가RSI거래량 비율점수
카카오페이KOSPI47,30055.41.335
현대약품KOSPI7,95069.02.885
KCCKOSPI482,00054.71.295
디아이KOSPI31,25067.81.835
한화투자증권KOSPI5,10057.23.285
써니전자KOSPI2,18565.01.665
파인엠텍KOSDAQ9,35055.12.175
신스틸KOSDAQ2,10569.13.205

전체 30개 후보는 latest_screen.csv에서 확인할 수 있습니다. 기준일이 바뀌면 후보도 바뀌므로, 이 목록의 종목명을 고정해 추천처럼 사용해서는 안 됩니다.

이번 기준일 후보는 총 30개였고, 모두 5개 조건을 통과했습니다. 시장별로는 KOSPI 15개, KOSDAQ 15개였습니다. 따라서 이 결과에서 점수 5점과 4점의 우열을 비교할 수는 없고, 거래량 비율이나 산업·시장 구성을 추가 기준으로 사용해야 합니다.

스크리닝의 역할은 분석 대상을 줄이는 것입니다. 점수 5점이라고 해서 바로 매수할 수 있는 것은 아닙니다. 후보가 어떤 산업에 몰렸는지, 실적·현금흐름·수급·밸류에이션이 뒷받침되는지, 그리고 기준일 이후에도 조건이 유지되는지를 확인해야 합니다.

다음 장에서는 후보를 고르는 규칙을 실제 포트폴리오 전략으로 바꿀 때 성과와 낙폭이 어떻게 달라지는지 비교합니다.

기술적 분석 12장: 백테스트하는 기술적 전략

기술적 분석 전략 백테스트

앞 장의 후보 목록은 분석 대상을 줄여줄 뿐, 실제 투자 성과를 보여주지 않습니다. 기술적 분석의 마지막 질문은 “어떤 지표가 가장 유명한가?”가 아니라 “같은 조건과 비용을 적용했을 때 어떤 전략이 남는가?”입니다. 이번 장에서는 300개 종목에 같은 기간과 같은 비용 가정을 적용해 이동평균, MACD, 복합 신호를 비교합니다.

state = df["close"] > df["ma20"]
state &= df["ma20"] > df["ma60"]
# 당일 신호로 다음 거래일부터 보유
position = state.groupby(df["code"]).shift(1).fillna(False)
gross_return = position * df["return_1d"]
turnover = position.groupby(df["code"]).diff().abs().fillna(position)
net_return = gross_return - turnover * 0.0015

실제 포트폴리오 계산에서는 해당 날짜에 보유 중인 종목의 수익률을 동일 비중으로 평균냈습니다. 거래비용은 포지션 변경 시 0.15%를 차감했습니다.

검증 구간은 2026년 1월 1일부터 9월 4일까지입니다.

전략누적수익률연환산수익률변동성최대낙폭Sharpe 근사
MA 추세+63.55%+111.03%52.43%-31.05%2.12
MACD 추세+58.15%+100.55%50.36%-33.52%2.00
복합 신호+5.11%+7.86%63.69%-46.21%0.12
코스피+33.62%+55.69%61.14%-38.63%0.91

기술적 분석 전략 누적자산

이번 검증 구간에서는 MA와 MACD 추세 전략이 코스피를 앞섰습니다. MA 추세는 코스피보다 누적수익률이 높고 최대낙폭도 작았지만, -31.05%의 하락을 감수해야 했습니다. 반면 복합 신호 전략은 조건이 더 많았음에도 누적수익률이 +5.11%에 그쳤고 최대낙폭은 -46.21%였습니다.

이 표는 9장의 사건별 결과와 12장의 포트폴리오 결과가 다를 수 있다는 점도 보여줍니다. 복합 신호는 사건별 20일 평균수익률이 +7.03%였지만, 실제 진입·보유·거래비용을 적용한 전략의 누적수익률은 +5.11%였습니다. 신호가 발생한 사례의 평균과 투자자가 보유한 포트폴리오의 성과는 진입 시점, 신호 중복, 보유 종목 수, 거래비용에 의해 달라집니다.

이번 데이터에서 확인한 핵심은 다음과 같습니다.

  1. 거래량 돌파와 MACD 골든크로스는 20일 선행수익률에서 상대적으로 강했습니다.
  2. RSI 회복과 볼린저 하단 반등은 평균보다 중앙값이 낮아 일부 급등 사례의 영향을 크게 받았습니다.
  3. 높은 변동성 종목은 복합 신호가 나와도 양수 비율과 중앙값이 낮았습니다.
  4. 같은 기술 신호라도 산업별 결과가 달랐습니다.
  5. 조건을 많이 결합한다고 전략 성과가 자동으로 좋아지지는 않았습니다.
  6. 높은 수익률에는 항상 최대낙폭과 표본 편향을 함께 표시해야 합니다.

따라서 이번 분석에서 얻은 실전적인 순서는 다음과 같습니다.

  1. MA·MACD로 상승 추세에 있는 종목을 먼저 구분합니다.
  2. 거래량 돌파와 OBV로 추세에 거래량 확인이 붙었는지 봅니다.
  3. RSI·볼린저 반등은 단독 매수 신호가 아니라 시장·산업 조건과 함께 해석합니다.
  4. ATR로 종목별 포지션 크기와 손실 폭을 조정합니다.
  5. 산업·시장 국면으로 후보를 다시 나눈 뒤, 백테스트에서 거래비용과 최대낙폭을 확인합니다.

기술적 분석은 미래를 맞히는 주문이 아니라, 가격·거래량에서 반복적으로 관찰되는 조건을 정의하고 그 조건의 성과와 실패 범위를 측정하는 방법입니다. 이번 결과는 이 표본과 검증 기간에 대한 증거이지, 어떤 지표도 항상 작동한다는 보장은 아닙니다.

전체 원자료는 OHLCV, 신호 결과, 전략 결과, Python 코드에서 확인할 수 있습니다. 과거 검증 결과는 미래 수익을 보장하지 않으며, 실제 투자 전에는 체결 가능성·세금·슬리피지·생존자 편향을 추가로 검토해야 합니다.

기술적 분석 10장: 산업별 기술 신호의 차이

산업별 기술적 신호 분석

9장에서는 여러 조건을 합친 복합 신호의 평균수익률이 +7.03%였지만, 단일 거래량 돌파의 +9.75%를 앞서지 못했습니다. 이제 질문을 한 단계 바꿉니다. 복합 신호의 평균을 전체 종목에 적용하기보다, 어떤 산업과 시장 국면에서 결과가 달라지는가를 확인합니다. 기술적 신호는 모든 산업에서 같은 의미를 갖지 않으며, 반도체처럼 추세가 빠르게 이어지는 산업과 바이오처럼 급등락이 큰 산업에 같은 조건을 적용하면 결과가 달라질 수 있습니다.

selected = df[
(df["composite_entry"] == 1) &
(df["date"] >= "20260101")
].copy()
industry_result = (
selected.groupby("industry")
.agg(
events=("code", "size"),
positive_rate=("forward_return_20d", lambda x: (x > 0).mean()),
mean_return=("forward_return_20d", "mean"),
median_return=("forward_return_20d", "median"),
)
.query("events >= 5")
.sort_values("mean_return", ascending=False)
)

검증 구간에서 복합 신호가 5회 이상 발생한 산업 중 일부는 다음과 같습니다.

산업신호 수양수 비율평균 수익률중앙값
전자부품 제조업12962.8%+14.55%+10.53%
반도체 제조업4759.6%+14.07%+11.65%
기타 금융업16261.7%+9.53%+3.53%
기타 화학제품 제조업7048.6%+1.02%-1.67%
의약품 제조업4346.5%+6.46%-3.08%
소프트웨어 개발 및 공급업4240.5%+4.42%-3.94%

전자부품과 반도체는 양수 비율이 59.6~62.8%, 중앙값이 +10%를 넘었습니다. 반면 소프트웨어와 의약품은 평균은 플러스였지만 중앙값이 각각 -3.94%, -3.08%였습니다. 같은 복합 신호라도 산업에 따라 전형적인 결과가 달라지고, 평균만 보면 이 차이를 놓치게 됩니다.

시장 국면도 함께 봐야 합니다. 이번 분석에서는 코스피의 20일 수익률을 양수·음수로 나누고, 각 신호의 이후 수익률을 다시 계산합니다. 개별 종목 신호만으로는 시장 전체의 위험 선호 변화를 설명할 수 없기 때문입니다.

코스피 20일 모멘텀신호 수20일 양수 비율평균 수익률중앙값
양수3,39051.1%+5.57%+1.28%
음수1,41547.5%+3.78%0.00%

이번 결과에서 “이 지표의 평균 수익률은 얼마인가?”보다 더 좋은 질문은 “어떤 산업과 시장 상태에서 이 지표가 작동했는가?”입니다. 전자부품·반도체처럼 평균과 중앙값이 함께 높은 산업은 우선 검토 대상이 될 수 있지만, 소프트웨어·의약품처럼 평균과 중앙값이 엇갈리는 산업은 개별 종목과 손실 관리가 더 중요합니다.

코스피 20일 모멘텀이 양수인 국면에서는 양수 비율 51.1%, 평균 +5.57%였고, 음수 국면에서는 각각 47.5%, +3.78%로 낮아졌습니다. 시장 국면이 우호적일 때 신호의 결과도 개선됐지만, 양수 국면에서도 양수 비율은 절반을 조금 넘는 수준입니다. 시장 필터는 확률을 보완할 뿐, 결과를 보장하지 않습니다.

표본 수가 적은 산업의 높은 수익률은 과대해석하지 않아야 하며, 여러 산업을 동시에 비교할 때 우연히 좋은 그룹을 고르는 문제도 주의해야 합니다. 다음 장에서는 이 조건을 기준일 종목 목록으로 바꿀 때 실제 후보가 어떻게 만들어지는지 확인합니다.

산업별 원자료는 industry_summary.csv, 시장 국면 결과는 regime_summary.csv에서 확인할 수 있습니다.