
8장까지의 결과를 보면 거래량 돌파의 20일 평균수익률은 +9.75%, MACD 골든크로스는 +6.98%였습니다. 그렇다면 이동평균, RSI, MACD, 거래량을 동시에 만족시키면 더 강한 신호가 될까요? 여러 지표를 합치는 방식은 직관적이지만, 서로 비슷한 가격 정보를 반복해서 사용하거나 신호가 너무 늦어지는 문제가 생길 수 있습니다.
복합 점수 만들기
섹션 제목: “복합 점수 만들기”이번 분석에서는 다섯 조건 중 네 개 이상을 만족하면 복합 신호로 분류했습니다.
conditions = pd.concat( [ df["close"] > df["ma20"], df["ma20"] > df["ma60"], df["rsi14"].between(40, 70), df["macd"] > df["macd_signal"], df["volume_ratio20"] > 1, ], axis=1,)df["technical_score"] = conditions.sum(axis=1)df["composite_state"] = df["technical_score"] >= 4previous_state = df.groupby("code")["composite_state"].shift(1).fillna(False)df["composite_entry"] = ( df["composite_state"] & ~previous_state)실제 결과
섹션 제목: “실제 결과”검증 구간에서 복합 신호 진입은 1,601회 발생했습니다.
| 신호 | 발생 횟수 | 20일 양수 비율 | 평균 수익률 | 중앙값 |
|---|---|---|---|---|
| 복합 신호 진입 | 1,601회 | 53.3% | +7.03% | +2.10% |
| 거래량 돌파 | 2,726회 | 53.4% | +9.75% | +2.51% |
| MACD 골든크로스 | 1,868회 | 55.1% | +6.98% | +2.72% |
복합 신호의 평균수익률 +7.03%는 거래량 돌파의 +9.75%보다 낮고, 중앙값 +2.10%도 거래량 돌파 +2.51%와 MACD +2.72%보다 낮았습니다. 양수 비율도 53.3%로 MACD의 55.1%를 넘지 못했습니다. 여러 조건을 요구했기 때문에 신호의 질이 자동으로 높아진 것이 아니라, 진입 시점이 늦어지고 상승 초기를 놓쳤을 가능성이 있습니다.
인사이트
섹션 제목: “인사이트”복합 신호의 장점은 신호의 설명력입니다. “왜 이 종목이 후보인가?”에 대해 추세, 모멘텀, 거래량으로 나눠 설명할 수 있습니다. 반면 조건을 추가할수록 표본 수가 줄고, 과거 기간에 맞춘 과최적화 위험이 커집니다.
따라서 복합 전략은 점수 자체보다 다음을 관리해야 합니다.
- 조건을 추가하기 전후의 표본 수
- 학습 구간과 검증 구간의 성과 차이
- 평균과 중앙값의 차이
- 산업별 편중
- 신호 발생 후 최대 손실
이번 결과에서 복합 신호의 장점은 단일 지표보다 높은 수익률이 아니라, “추세·모멘텀·거래량 조건을 동시에 만족한 종목”이라는 설명력입니다. 반대로 성과 측면에서는 단일 거래량·MACD 신호를 압도하지 못했습니다. 복합 신호는 최종 매수 버튼이 아니라 다음 분석으로 넘어갈 종목을 줄이는 스크리닝 언어로 사용하는 것이 적절합니다.
다음 장에서는 이 스크리닝 결과가 산업과 시장 국면에 따라 얼마나 달라지는지 확인합니다.