
지난번까지 criteria v0를 여러 샘플 종목에 적용해봤다. 처음에는 3개 샘플 종목으로 시작했고, 이후 10개, 20개, 50개까지 샘플 종목을 넓혀가며 같은 기준을 반복해서 돌려봤다.
그런데 criteria v0는 계속 너무 엄격하게 작동했다. 50개 샘플 종목에 적용해도 기준에 부합하는 종목은 하나도 없었다. 특히 문제가 된 것은 변동성 조건이었다.
criteria v0의 변동성 기준은 단순했다.
고저 변동폭 < 5.00%
처음에는 일부러 보수적으로 잡은 기준이었다. 하지만 실제 데이터로 돌려보니, 이 기준은 현재 장세에서는 거의 작동하지 않았다. 50개 샘플 종목 모두 절대 기준으로는 변동성이 높게 나왔다.
종목만 보니 시장 흐름을 놓쳤다
처음에는 기준값이 너무 빡빡한가 싶었다. 그래서 고저 변동폭 기준을 5%, 10%, 20%, 50%, 70%처럼 바꿔가며 실험했다.
하지만 기준값을 감으로 키우는 건 찜찜했다. 단순히 5%가 너무 작으니까 70%로 올리는 방식은 기준을 데이터에 억지로 맞추는 느낌이 있었다.
그러다 빠진 기준이 보였다. 지금까지는 개별 종목의 변동폭만 보고 있었고, 같은 기간 KOSPI가 얼마나 움직였는지는 보지 않았다.
그래서 KOSPI 지수 일봉 데이터도 가져와서 같은 기간의 흐름을 계산했다.
KOSPI 기간: 2026-05-04 ~ 2026-06-04
KOSPI 고저 변동폭: 32.51%
이 값을 보고 나니 해석이 달라졌다. 개별 종목의 고저 변동폭이 20~30%라고 해서 무조건 과하다고 보기 어려웠다. 시장 자체도 32% 넘게 흔들린 구간이었기 때문이다.
criteria v0.1 후보를 만들었다
그래서 criteria v0.1 후보에서는 변동성 기준을 절대값이 아니라 KOSPI 대비 기준으로 바꿔봤다.
이번에는 AI도 기준 후보를 정리하는 데 활용해봤다. criteria v0 결과와 KOSPI 비교 결과를 AI가 읽기 좋게 정리한 뒤, v0.1 후보가 될 만한 기준을 제안받았다. 다만 AI가 제안했다고 그대로 쓰지는 않고, 사람이 검토한 뒤 코드로 다시 검증하는 방식으로 진행했다.
기존 v0는 이렇게 봤다.
고저 변동폭 < 5.00%
v0.1 후보는 이렇게 바꿨다.
종목 고저 변동폭 / KOSPI 고저 변동폭 <= 1.80
즉, 종목의 변동폭이 KOSPI 변동폭의 1.8배 이내라면 시장 대비 과도하지 않은 범위로 보자는 기준이다.
criteria v0.1 후보의 전체 기준은 이렇게 잡았다.
가격 조건: 기간 수익률 > -1.00%
거래량 조건: 최근 거래량 비율 >= 1.20배
시장 대비 변동성 조건: KOSPI 변동폭의 1.80배 이하
이 기준도 확정은 아니다. 어디까지나 v0에서 보인 문제를 개선하기 위한 후보 기준이다.
v0와 v0.1 후보를 비교했다
이제 기존 criteria v0와 v0.1 후보를 같은 50개 샘플에 적용해봤다.
uv run python scripts/compare_criteria_v0_v01.py \
--index-csv data/raw/index/KOSPI_20260501_20260604.csv \
--input-dir data/raw \
--pattern "*_20260501_20260604.csv"
결과는 이렇게 나왔다.
criteria v0 기준 부합: 0개
criteria v0.1 후보 기준 부합: 4개
v0에서는 미충족이었지만 v0.1 후보에서는 부합: 4개
v0에서는 50개가 모두 미충족이었다. 반면 v0.1 후보에서는 4개가 관찰 후보로 남았다.
통과율로 보면 50개 중 4개, 약 8% 정도다. 너무 많은 샘플이 통과한 것도 아니고, 모두 탈락한 것도 아니다. 적어도 이번 샘플에서는 1차 필터로 어느 정도 작동하기 시작했다고 볼 수 있었다.
많이 오른 종목을 무조건 통과시키지는 않았다
흥미로운 점은 v0.1 후보가 단순히 많이 오른 샘플 종목을 모두 통과시키지는 않았다는 점이다.
예를 들어 어떤 샘플 종목은 기간 수익률이 50%를 넘었지만 거래량 조건이나 시장 대비 변동성 조건에서 걸렸다. 또 어떤 샘플 종목은 수익률이 높았지만 KOSPI 대비 변동폭이 2배를 넘어서 미충족으로 남았다.
즉, v0.1 후보는 단순히 상승률만 보는 기준은 아니었다.
가격 흐름이 크게 나쁘지 않은가?
거래량이 평균보다 어느 정도 늘었는가?
시장 대비 변동성이 과도하지 않은가?
이 세 조건을 동시에 보는 구조다.
이 점은 나쁘지 않았다. 처음 만들고 싶었던 것은 “많이 오른 종목 찾기”가 아니라, 데이터를 더 들여다볼 관찰 후보를 줄이는 1차 필터였기 때문이다.
통과한 샘플의 공통점
v0.1 후보를 통과한 파일은 4개였다.
017670_20260501_20260604.csv
036570_20260501_20260604.csv
055550_20260501_20260604.csv
105560_20260501_20260604.csv
여기서도 중요한 건 특정 종목을 좋게 본다는 뜻이 아니다. 단지 이번 criteria v0.1 후보 기준을 통과한 샘플 종목이라는 의미다.
이 샘플 종목들은 공통적으로 세 조건을 모두 만족했다.
기간 수익률이 -1%보다 높음
최근 거래량 비율이 1.2배 이상
KOSPI 대비 변동폭이 1.8배 이하
이렇게 조건별로 나눠보니 기준이 왜 통과됐는지 설명하기 쉬웠다. 반대로 미충족 파일도 어떤 조건에서 걸렸는지 확인할 수 있었다.
미충족 이유도 따로 요약했다
단순히 “4개 통과, 46개 미충족”만 보면 기준이 어떻게 작동했는지 잘 보이지 않는다. 그래서 v0.1 후보 기준에서 각 샘플이 왜 통과했는지, 왜 미충족됐는지를 조건별로 요약하는 스크립트도 만들었다.
결과는 이랬다.
전체 샘플: 50개
기준 부합: 4개
기준 미충족: 46개
가격 조건 미충족: 30개
거래량 조건 미충족: 39개
시장 대비 변동성 조건 미충족: 11개
여기서 조건별 미충족 개수는 중복 집계다. 하나의 파일이 가격 조건과 거래량 조건을 동시에 못 넘으면 두 조건에 모두 집계된다.
이 결과를 보니 v0.1 후보에서는 더 이상 변동성 조건만 모든 것을 막고 있지는 않았다. 오히려 가격 조건과 거래량 조건이 더 많이 작동하고 있었다.
이건 v0와 비교하면 꽤 큰 변화다.
criteria v0:
절대 변동폭 5% 기준이 너무 강하게 작동
criteria v0.1 후보:
시장 대비 변동성을 반영하면서, 가격·거래량 조건이 함께 필터 역할을 함
아직 확정 기준은 아니다
이번 결과만 보면 v0.1 후보가 꽤 괜찮아 보인다. v0에서는 모두 탈락했지만, v0.1 후보에서는 4개 샘플이 관찰 후보로 남았다.
하지만 이 기준을 바로 확정하기에는 아직 이르다. 지금 결과는 하나의 기간에 대한 것이다.
분석 기간은 2026년 5월 초부터 6월 초까지였다. 이 기간은 KOSPI 자체가 크게 움직인 구간이었다. 따라서 이 기준이 다른 기간에서도 비슷하게 작동하는지는 아직 확인하지 않았다.
다음에는 같은 기준을 다른 기간에도 적용해봐야 한다. 상승장, 횡보장, 하락장처럼 시장 흐름이 다른 구간에서도 너무 많이 통과하거나 너무 적게 통과하지 않는지 확인해야 한다.
이번 작업에서 한 것
이번 단계에서는 다음 작업을 했다.
- KOSPI 대비 변동폭 비율을 반영한 criteria v0.1 후보 추가
- 기존 criteria v0는 그대로 유지
- v0와 v0.1 후보를 나란히 비교하는 스크립트 추가
- 50개 샘플에 v0/v0.1 후보 적용
- v0.1 후보 통과/미통과 이유 요약 스크립트 추가
- 조건별 미충족 개수 집계
- 테스트와 ruff 확인
아직 결과를 DB에 저장하지는 않았다. 지금은 기준 후보가 어떻게 작동하는지 콘솔에서 확인하고, 다음 기준을 정리하는 단계다.
다음에는 뭘 해볼까
다음에는 이 v0.1 후보를 다른 기간에도 적용해볼 생각이다.
현재 기준은 이렇다.
가격 조건: 기간 수익률 > -1.00%
거래량 조건: 최근 거래량 비율 >= 1.20배
시장 대비 변동성 조건: KOSPI 변동폭의 1.80배 이하
이 기준이 2026년 5월 구간에서만 적당히 작동하는 것인지, 다른 기간에서도 관찰 후보를 적절히 줄여주는지 확인해야 한다.
그다음에는 criteria 값을 코드 안에 직접 두기보다 설정 파일로 분리하는 것도 고민할 수 있을 것 같다. 기준 버전이 늘어날수록 코드에 숫자를 계속 박아두는 방식은 관리하기 어려워질 수 있기 때문이다.
아직 자동매매와는 거리가 있다. 지금은 자동매매에 들어가기 전, 어떤 데이터를 볼지와 어떤 기준으로 관찰 후보를 줄일지를 계속 검증하는 중이다.
투자 유의사항:
이 글은 개인적인 개발 실험 기록입니다. 본문에 등장하는 criteria v0, criteria v0.1 후보, KOSPI 비교 내용은 데이터 관찰 기준을 검토하기 위한 실험이며, 특정 종목에 대한 매수·매도 추천이나 투자 권유가 아닙니다. 투자 판단은 반드시 본인의 기준과 책임에 따라 신중하게 결정해야 합니다.