
지난번에는 criteria v0.1 후보를 50개 샘플에 적용해봤다. 기존 criteria v0는 50개 샘플을 모두 걸러냈지만, KOSPI 대비 변동폭을 반영한 v0.1 후보는 4개 샘플을 관찰 후보로 남겼다.
처음에는 이 정도면 기존 v0보다 훨씬 현실적으로 작동한다고 느꼈다. 하지만 한 기간에서만 잘 작동한다고 해서 바로 기준으로 삼기는 어려웠다. 그래서 이번에는 같은 criteria v0.1 후보를 다른 기간에도 돌려보기로 했다.
기준은 그대로 두고 기간만 바꿨다
이번 실험에서 기준은 바꾸지 않았다. criteria v0도 그대로 두고, criteria v0.1 후보도 그대로 유지했다.
criteria v0.1 후보 기준은 아래와 같다.
가격 조건: 기간 수익률 > -1.00%
거래량 조건: 최근 거래량 비율 >= 1.20배
시장 대비 변동성 조건: KOSPI 변동폭의 1.80배 이하
이 기준을 여러 기간에 똑같이 적용해봤다. 목적은 단순했다. 이 기준이 특정 기간에서만 우연히 작동한 것인지, 아니면 다른 장세에서도 어느 정도 일관되게 작동하는지 보고 싶었다.
비교한 기간은 다음과 같다.
2026-02-02 ~ 2026-02-27
2026-03-03 ~ 2026-03-31
2026-04-01 ~ 2026-04-30
2026-05-04 ~ 2026-06-04
2026-05-04 ~ 2026-06-05
2월은 2월 말 미국-이란 전쟁이 본격적으로 반영되기 전 구간으로 봤고, 3월은 충격 이후 변동성이 커진 구간으로 봤다. 4월은 반등 구간, 5월부터 6월 초는 강한 상승 흐름이 섞인 구간으로 놓고 비교했다. 마지막으로 6월 5일 하락일을 포함한 구간도 따로 추가했다.
criteria v0는 모든 기간에서 작동하지 않았다
먼저 기존 criteria v0 결과부터 보면 꽤 명확했다.
2026-02: v0 기준 부합 0개
2026-03: v0 기준 부합 0개
2026-04: v0 기준 부합 0개
2026-05~06: v0 기준 부합 0개
2026-06-05 포함: v0 기준 부합 0개
모든 기간에서 criteria v0는 기준 부합 샘플을 하나도 남기지 못했다. 이 정도면 기존 v0 기준은 현재 실험 구조에서는 너무 엄격하게 작동한다고 봐도 될 것 같다.
특히 v0의 변동성 기준은 고저 변동폭 < 5%였다. 처음에는 보수적인 기준으로 의미가 있을 줄 알았지만, 실제 50개 샘플과 여러 기간을 돌려보니 거의 모든 데이터를 걸러내는 수준이었다.
criteria v0.1 후보는 기간마다 다르게 작동했다
v0.1 후보는 달랐다. 모든 기간에서 일부 샘플을 남기긴 했지만, 그 개수는 기간에 따라 크게 달라졌다.
2026-02-02 ~ 2026-02-27: 33개
2026-03-03 ~ 2026-03-31: 3개
2026-04-01 ~ 2026-04-30: 18개
2026-05-04 ~ 2026-06-04: 4개
2026-05-04 ~ 2026-06-05: 2개
2월에는 50개 중 33개가 v0.1 후보 기준에 부합했다. 반면 3월에는 3개, 5월부터 6월 4일까지는 4개만 남았다. 6월 5일 하락일을 포함하자 2개로 더 줄었다.
이 결과를 보면서 기준이라는 게 생각보다 장세에 민감하게 반응한다는 걸 다시 느꼈다. 같은 기준을 적용해도, 기간이 달라지면 전혀 다른 결과가 나온다.
2월은 많이 통과했다
2월 구간은 v0.1 후보 기준에 부합한 샘플이 33개였다. 50개 중 절반을 훨씬 넘는 수다.
이때 KOSPI도 강하게 움직였다.
KOSPI 수익률: 26.15%
KOSPI 변동폭: 29.56%
v0.1 후보 부합: 33개
조건별 미충족을 보면 더 분명하다.
가격 조건 미충족: 1개
거래량 조건 미충족: 15개
시장 대비 변동성 조건 미충족: 4개
2월에는 가격 조건에서 걸린 샘플이 거의 없었다. 대부분 가격 흐름은 기준을 통과했고, 일부만 거래량이나 시장 대비 변동성 조건에서 걸렸다. 그래서 v0.1 후보가 많이 남았다.
이 결과만 보면 v0.1 후보가 너무 느슨한 것 아닌가 싶을 수도 있다. 하지만 다른 기간을 보면 꼭 그렇지만은 않았다.
3월에는 거의 남지 않았다
3월 구간은 완전히 달랐다.
KOSPI 수익률: -12.77%
KOSPI 변동폭: 22.56%
v0.1 후보 부합: 3개
조건별 미충족도 크게 달라졌다.
가격 조건 미충족: 44개
거래량 조건 미충족: 40개
시장 대비 변동성 조건 미충족: 9개
3월에는 가격 조건에서 대부분 걸렸다. KOSPI 자체도 하락했고, 샘플 종목들도 가격 흐름이 좋지 않은 경우가 많았다. 그래서 시장 대비 변동성 조건을 통과하더라도 가격 조건에서 탈락하는 경우가 많았다.
이 결과는 꽤 중요했다. v0.1 후보가 단순히 많은 샘플을 통과시키는 느슨한 기준은 아니었다. 장세가 좋지 않은 구간에서는 후보를 상당히 강하게 줄였다.
4월에는 다시 늘어났다
4월은 반등 구간에 가까웠다.
KOSPI 수익률: 20.45%
KOSPI 변동폭: 30.56%
v0.1 후보 부합: 18개
조건별 미충족은 이렇게 나왔다.
가격 조건 미충족: 7개
거래량 조건 미충족: 31개
시장 대비 변동성 조건 미충족: 3개
3월과 비교하면 가격 조건 미충족이 크게 줄었다. 시장 흐름이 회복되면서 가격 기준을 통과하는 샘플이 많아졌고, v0.1 후보 부합 수도 18개로 늘어났다.
다만 거래량 조건은 여전히 많이 걸렸다. 즉, 4월에는 가격 흐름은 회복됐지만, 최근 거래량 비율이 기준에 못 미치는 샘플이 많았던 셈이다.
6월 5일 하루가 결과를 바꿨다
가장 흥미로웠던 부분은 6월 5일 하락일을 포함했을 때였다.
기존 5월~6월 4일 구간은 이랬다.
KOSPI 수익률: 24.54%
KOSPI 변동폭: 32.51%
v0.1 후보 부합: 4개
6월 5일을 포함하자 이렇게 바뀌었다.
KOSPI 수익률: 17.64%
KOSPI 변동폭: 32.51%
v0.1 후보 부합: 2개
KOSPI 변동폭은 그대로였지만, 기간 수익률은 낮아졌다. 그리고 v0.1 후보 부합 샘플은 4개에서 2개로 줄었다.
조건별 미충족도 바뀌었다.
2026-06-04까지
가격 조건 미충족: 30개
거래량 조건 미충족: 39개
시장 대비 변동성 조건 미충족: 11개
2026-06-05까지
가격 조건 미충족: 30개
거래량 조건 미충족: 44개
시장 대비 변동성 조건 미충족: 12개
하락일 하루가 들어오면서 거래량 조건 미충족이 더 늘었다. 그리고 기존에 후보로 남았던 샘플 중 일부가 빠졌다.
이건 기준이 살아 움직이는 데이터에 민감하게 반응한다는 뜻이다. 하루가 추가되었을 뿐인데 결과가 달라졌다. 자동매매까지 생각한다면 이런 변화는 꽤 중요하다.
기준은 공식이 아니라 계속 검증해야 하는 필터였다
이번 실험을 하면서 기준을 보는 관점이 조금 바뀌었다.
처음에는 criteria를 만들면 어느 정도 “공식”처럼 작동할 거라고 생각했다. 하지만 여러 기간을 돌려보니 기준은 고정된 공식이라기보다, 시장 상황에 따라 계속 검증해야 하는 관찰 필터에 가까웠다.
2월에는 33개가 남았고, 3월에는 3개만 남았다. 4월에는 18개, 5월~6월 구간은 4개, 6월 5일 하락일을 포함하면 2개였다.
이 정도 차이라면 한 기간만 보고 기준을 확정할 수는 없다. 기준이 잘못됐다는 뜻은 아니지만, 적어도 장세별로 어떻게 작동하는지는 더 봐야 한다.
이번 작업에서 한 것
이번 단계에서는 새로운 기준을 만들지 않았다. 이미 만든 criteria v0와 v0.1 후보를 그대로 두고, 기간만 바꿔가며 결과를 비교했다.
한 일은 다음과 같다.
50개 샘플을 여러 기간에 대해 수집
각 기간별 KOSPI 지수 데이터 수집
criteria v0와 v0.1 후보 비교
기간별 통과 개수 비교
조건별 미충족 이유 비교
6월 5일 하락일 포함 여부 비교
코드도 새 기준을 추가하기보다, 여러 기간의 결과를 한 번에 비교하는 요약 스크립트를 추가하는 정도였다. 이 스크립트 덕분에 기간별 결과를 한눈에 볼 수 있었다.
다음에는 뭘 해야 할까
이제 바로 v0.1을 확정하기보다는, 기준 관리 구조를 정리할 필요가 있어 보인다. 지금은 기준값이 코드에 들어가 있다. 하지만 앞으로 v0.1, v0.2처럼 후보가 늘어나면 코드 안에 숫자를 계속 두기 어렵다.
그래서 다음에는 criteria 기준값을 설정 파일로 분리하는 걸 검토해볼 수 있다.
예를 들면 이런 식이다.
criteria_v0.yaml
criteria_v01_candidate.yaml
기준값을 설정 파일로 분리하면, 코드를 바꾸지 않고도 여러 기준을 비교하기 쉬워진다. 이후에는 다른 기간을 추가하거나, AI가 제안한 기준 후보를 설정 파일로 저장해두고 비교하는 방식도 가능해질 것 같다.
아직 자동매매와는 거리가 있다. 하지만 자동매매에 들어가기 전에 필요한 “기준을 만들고, 여러 기간에서 검증하고, 기준 버전을 관리하는 구조”를 조금씩 만들어가고 있다.
요약
criteria v0는 모든 기간에서 0개를 통과했다. v0.1 후보는 기간에 따라 33개, 3개, 18개, 4개, 2개로 크게 달라졌고, 기준은 여러 장세에서 반복 검증해야 한다는 점을 확인했다.
투자 유의사항:
이 글은 개인적인 개발 실험 기록입니다. 본문에 등장하는 criteria v0, criteria v0.1 후보, KOSPI 비교 내용은 데이터 관찰 기준을 검토하기 위한 실험이며, 특정 종목에 대한 매수·매도 추천이나 투자 권유가 아닙니다. 투자 판단은 반드시 본인의 기준과 책임에 따라 신중하게 결정해야 합니다.