Etc

매수 신호는 나오는데 체결이 0건 — 감으로 안 고치고 필터를 채점했다

문제: 신호는 나오는데 거래가 없다

  • 기간: 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 이상 차단

어떻게 고쳤나

  • 추가: SignalFilterblock_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_filter 24건
  • realtime_engine 69건
  • 합계 93건 통과
  • 신규 테스트 2건 — block_negative_macd=False 동작 확인, RSI·거래량 필터 생존 확인

남는 교훈

  • “왜 거래가 안 되는가” — 답이 여러 갈래로 갈릴 수 있는 질문
  • 후보 필터를 하나씩 꺼보는 것도 방법
  • 다만 그보다 빠른 길: 각 조건이 실제로 얼마나 차단하는지를 숫자로 재는 것

그리고 승률이나 총수익률이 좋아졌다고 해서 위험조정수익(Sharpe)까지 좋아졌다고 착각하면 안 된다.

  • 지표는 하나가 아니며, 하나를 개선해도 나머지는 자동으로 따라오지 않음