약한 종목으로 슬롯을 채우는 건 분산이 아니라 손실의 분산이다

자동매매RS필터상대강도종목선정철학분산투자KOSPI200

코스피가 장중 최고치를 경신한 날, 내 포트폴리오 5종목 중 4종목이 마이너스였다.

삼성전자 하나만 시장과 같이 움직였다. 나머지 넷은 시장이 오르든 내리든 거의 관계없이 각자의 방향으로 흘렀다. 처음엔 종목 선택의 문제라고 생각했다. 그런데 로그를 들여다보니 문제는 다른 곳에 있었다.

시스템이 MAX_HOLD=5를 채우는 방향으로 돌고 있었다.

조건을 통과하는 종목을 순서대로 담는 구조였기 때문에, 강한 종목부터 담는 게 아니라 먼저 걸리는 종목을 담고 있었다. 결과적으로 절대적 조건(MA20 초과, RSI 등)은 통과했지만 시장 흐름과는 따로 노는 종목들이 포트폴리오를 채웠다. 슬롯이 다 차 있으니 시스템 입장에서는 정상이었다. 수익률 입장에서는 전혀 그렇지 않았다.


생각해보면 당연한 이야기였다. 절대적인 조건만으로는 부족하다. 코스피 전체가 오르는 날에 같이 오르지 않는 종목은 진짜 강한 종목이 아니다. 시장 수익률 대비 얼마나 강한가를 함께 봐야 했다.

오늘 RS(상대강도) 필터를 추가했다. KOSPI200 ETF의 20일 수익률을 기준으로, 초과수익률이 -3% 미만인 종목은 후보에서 탈락시킨다. 쉽게 말하면, 시장 전체가 오를 때 같이 오르지 못하는 종목은 처음부터 후보에서 빼는 것이다. 통과한 종목은 초과수익률 순으로 정렬해 강한 것부터 담는다. 그리고 강한 후보가 2개뿐이면 2개만 사고 나머지 슬롯은 현금으로 둔다.

MAX_HOLD=5는 리스크 분산을 위한 상한선이었다. 반드시 채워야 하는 목표가 아니었다. 약한 종목으로 슬롯을 채우는 건 분산이 아니라 손실의 분산이다.


전략을 바꿀 때마다 바로 실계좌에 적용하지 않는 습관도 오늘 공식화했다. BUY_DRY_RUN 플래그를 만들어서 매수만 시뮬레이션 모드로 돌린다. 매도는 실거래 그대로 유지하면서 2~3거래일 검증하고, 숫자로 확인되면 그때 전환한다.

RS 필터가 실제로 약한 종목을 걸러내는지, 통과 종목들이 탈락 종목보다 나은 성과를 보이는지 — 검증 결과를 기다리는 중이다.


What I built: RS 필터 추가 — KOSPI200 ETF 대비 초과수익률 -3% 이상인 종목만 매수 후보로 허용.

What broke: 포트폴리오 5슬롯에 약한 종목이 채워졌다. 코스피 최고치 날 4종목 마이너스.

What I learned: MAX_HOLD는 목표가 아니라 상한선이다. 슬롯을 채우는 건 분산이 아니라 손실의 분산이다.


자동매매든 수동매매든, 종목 수를 채우려다 약한 종목을 담아본 경험 있으신가요?