문제: 신호는 나오는데 거래가 없다
- 기간: 2026년 7월 20~21일 라이브 로그
- 전략 상태: BUY 신호 계속 발생
- 실제 매수 체결: 하루종일 0건
신호 자체는 살아있는데 그게 전부 걸러지고 있다는 뜻이었다.
감으로 고치지 않고, 필터를 채점했다
-
방식: 짐작으로 필터를 하나씩 꺼보는 대신 각 조건이 신호를 차단한 비율 계측
- 대상 종목: 32개
- 대상 신호: 627개 BUY 시그널
- 구간: OOS (out-of-sample)
| 조건 | 차단율 |
|---|---|
| MACD 히스토그램 ≤ 0 | 75.6% (주범) |
| 거래량 < 평균 | 62.7% |
| RSI ≥ 50 | 5.9% |
| 통과(매수 성사) | 5.6% |
- 숫자로 확인된 범인: MACD 조건 하나가 전체 신호의 4분의 3 이상 차단
어떻게 고쳤나
- 추가:
SignalFilter에block_negative_macd파라미터 - 기본값:
True— 기존 동작과 완전 동일하게 유지 - 목적: 이 변경으로 다른 경로의 동작이 바뀌지 않도록 차단
적용 범위:
- 값을 끄는 곳:
realtime_engine의 라이브 생성 부분 한정 - 미변경: 백테스트 및 기타 경로
- 유지: RSI 필터, 거래량 필터
- 변경 규모: 3개 파일, 32줄 추가 / 5줄 삭제
MACD 필터가 유독 과도했다고 판단했지, 필터링 자체가 필요 없다고 본 게 아니었다.
백테스트로 검증
- 비교 대상: 32개 종목 기준 MACD 필터 완화 결과 vs 현행
| 변형 | 총거래 | 2년 평균수익률 |
|---|---|---|
| 현행 (MACD 차단) | 248 | -0.73% |
| MACD 완화 | 654 | +0.65% |
- 거래 수 3배 가까이 증가
- 평균 수익률 마이너스 → 플러스 전환
정직하게 남긴 한계
- 이 개선이 완전한 해결이 아니라는 점도 그대로 기록에 잔류
Sharpe 비율은 어느 기간을 봐도 여전히 음수였다.
- 의미: 승률·평균 수익률은 개선, 위험 대비 수익 기준으로는 여전히 미달
근본 원인:
- 신호 자체에 알파(초과수익 정보) 부족
- ML 모델 정확도 cv_acc 0.504 — 기저율 0.587보다 낮음
-
이 작업 하나로 해결 불가 → 신호 파이프라인 재설계라는 별도 과제로 분리
- 적용 근거: “무거래 상태 해소 + 수익률 플러스 전환” — 사용자 판단에 따라 라이브 반영
- 성격: 완벽한 전략을 만들었다는 주장 아님, 막힌 걸 풀되 남은 한계를 숨기지 않는 선택
테스트 결과:
-
signal_filter24건 -
realtime_engine69건 - 합계 93건 통과
- 신규 테스트 2건 —
block_negative_macd=False동작 확인, RSI·거래량 필터 생존 확인
남는 교훈
- “왜 거래가 안 되는가” — 답이 여러 갈래로 갈릴 수 있는 질문
- 후보 필터를 하나씩 꺼보는 것도 방법
- 다만 그보다 빠른 길: 각 조건이 실제로 얼마나 차단하는지를 숫자로 재는 것
그리고 승률이나 총수익률이 좋아졌다고 해서 위험조정수익(Sharpe)까지 좋아졌다고 착각하면 안 된다.
- 지표는 하나가 아니며, 하나를 개선해도 나머지는 자동으로 따라오지 않음