시장과 투자/시장 구조와 수급

흔들리는 시장속에서, 선옵향이 느껴진거야_4

Paulworld 2026. 6. 21. 14:31

주가 예측기는 실패했다. 하지만 시장 상태판은 쓸모 있었다

앞선 세 편의 글에서 꽤 긴 실험을 정리했다.

처음에는 단순한 문제의식이었다.

코스피는 왜 이렇게 흔들릴까.
외국인 선물은 왜 시장을 이렇게 크게 움직일까.
VKOSPI가 높은데 지수가 같이 오르는 장은 어떻게 해석해야 할까.
위험등급이 높으면 정말 비중을 줄여야 할까.

이 질문에서 시작해 KOSPI200, KOSPI200 선물, 베이시스, 프로그램매매, 옵션 IV, VKOSPI, 삼성전자와 SK하이닉스 수급을 모으는 상태판을 만들었다.

Codex를 이용해 데이터를 수집하고, Telegram으로 30분마다 리포트를 받는 구조를 만들었다.
그리고 10년치 데이터를 쌓아 백테스트도 돌렸다.

처음에는 은근히 기대했다.

잘하면 시장 방향을 어느 정도 맞히는 모델을 만들 수 있지 않을까.
위험등급이 높은 날을 피하면 손실을 줄일 수 있지 않을까.
선물·옵션 데이터를 잘 조합하면 개인 투자자도 조금 더 똑똑하게 대응할 수 있지 않을까.

하지만 결론은 생각보다 냉정했다.

주가 예측기는 실패했다.
자동 비중축소 전략도 실패했다.

그런데 실험이 실패로만 끝난 것은 아니었다.

오히려 더 현실적인 결론을 얻었다.

시장을 맞히는 모델은 만들지 못했지만, 시장이 어떤 상태인지 보여주는 계기판은 만들 수 있었다.


내가 만들고 싶었던 것

처음 만들고 싶었던 것은 시장의 “상태판”이었다.

장중에 시장이 급등하거나 급락할 때, 단순히 가격만 보고 판단하고 싶지 않았다.
가격 뒤에 어떤 힘이 작동하는지 보고 싶었다.

내가 보고 싶었던 것은 이런 것들이었다.

  • 외국인 KOSPI200 선물이 시장을 끌고 가는가
  • 외국인 현물도 같이 들어오는가
  • 비차익 프로그램은 대형주 바스켓을 사고 있는가, 팔고 있는가
  • VKOSPI와 옵션 IV는 얼마나 높은가
  • 삼성전자와 SK하이닉스가 지수를 지탱하는가, 끌어내리는가
  • 장중 급등·급락이 반복되는 왕복장인가
  • 시장이 강한데도 위험한 상태인가

예전에는 이런 생각을 머릿속으로만 했다.

그런데 머릿속 해석은 쉽게 흔들린다.

시장이 오르면 낙관적으로 해석하고 싶어진다.
시장이 빠지면 비관적으로 해석하고 싶어진다.
내 포지션이 있으면 더 심해진다.

그래서 최대한 숫자로 보고 싶었다.

숫자를 모으고, 조건을 만들고, 문장으로 해석하고, 30분마다 Telegram으로 받는 구조를 만들었다.


시스템은 생각보다 잘 돌아갔다

실시간 파일럿은 2026년 6월 18일과 6월 19일, 이틀 동안 돌렸다.

정규장 기준으로 오전 9시부터 오후 3시 30분까지 30분 간격으로 총 28개 slot을 만들었다.
스케줄러는 백그라운드에서 실행됐고, 각 slot마다 데이터를 수집해 리포트를 텔레그램으로 보냈다.

리포트에는 다음 항목들이 들어갔다.

  • KOSPI200
  • KOSPI200 선물
  • 베이시스
  • 이론 베이시스와 괴리
  • VKOSPI
  • USD/KRW
  • 투자자별 현물·선물·옵션 수급
  • 프로그램 차익·비차익 매매
  • ATM 옵션 가격
  • ATM IV
  • 콜·풋 IV
  • 감마·베가·세타
  • 감마 집중 구간
  • 삼성전자·SK하이닉스 가격
  • 삼성전자·SK하이닉스 프로그램 수급
  • 위험요인과 완화요인
  • 해석 메모

처음 만든 것치고는 꽤 잘 작동했다.

6월 18일에는 강한 상승장이었지만, 리포트는 비차익 프로그램 매도와 VKOSPI 80대라는 불편한 부분을 계속 보여줬다.

6월 19일에는 오전 급등, 점심 급락, 오후 재반등이라는 극단적인 장중 왕복장을 30분 단위로 포착했다.

특히 6월 19일은 상태판의 필요성을 잘 보여준 날이었다.

오전 10시 30분에는 KOSPI200이 +3.92%, KOSPI200 선물이 +4.29%였다.
SK하이닉스는 +7.26%였다.

가격만 보면 완전한 강세장이었다.

하지만 리포트는 동시에 이런 숫자도 보여줬다.

  • 외국인 KOSPI 현물: -2,415억 원
  • 비차익 프로그램: -1조 1,606억 원
  • 삼성전자 프로그램 순매수 수량: -2,057,712주
  • VKOSPI: 82.89

즉, 지수는 강했지만 현물과 비차익 수급은 편안하지 않았다.

시장은 실제로 그 뒤 크게 흔들렸다.
13시에는 KOSPI200이 -1.07%까지 밀렸다.

가격만 보면 오전에는 흥분하고, 오후에는 공포에 빠졌을 장이었다.
하지만 상태판을 보니 이 장은 처음부터 “안정적 상승장”이 아니었다.

선물과 반도체가 끌어올린 고변동성 장세에 가까웠다.

이것만으로도 자동화의 의미는 있었다.


하지만 방향성 예측은 실패했다

문제는 여기서부터다.

상태판이 잘 돌아가자 자연스럽게 욕심이 생겼다.

이걸로 방향도 맞힐 수 있지 않을까.
어떤 조건에서 다음 5거래일 수익률이 높아지는지 찾을 수 있지 않을까.
위험점수가 높을 때 피하면 성과가 좋아지지 않을까.

그래서 10년치 데이터를 쌓았다.

KRX 데이터를 이용해 2016년 6월 20일부터 2026년 6월 12일까지 2,448개의 일별 feature row를 만들었다.
전체 cache manifest는 29,213 rows였고, 데이터 cache는 약 3.04GB였다.
다운로드에는 약 6시간 33분이 걸렸다.

이 데이터로 방향성 예측 모델을 만들었다.

결과는 좋지 않았다.

  • Pearson: 0.0373
  • Spearman: -0.0219
  • 방향 hit-rate: 48.79%

이 숫자는 냉정하다.
운영에 쓸 수 없다.

상관은 거의 없고, 방향 hit-rate는 50%에도 못 미쳤다.
즉 내가 만든 feature만으로 다음 시장 방향을 안정적으로 맞히는 것은 실패했다.

아쉬웠지만, 동시에 중요한 결론이었다.

시장은 그렇게 쉽게 맞힐 수 없다.


자동 비중축소 전략도 실패했다

방향성 예측이 어렵다면, 적어도 위험할 때 비중을 줄이는 전략은 가능하지 않을까.

이것도 테스트했다.

combined risk regime을 만들고, 시장을 normal, caution, high, extreme으로 나눴다.
그리고 위험등급이 높아질수록 가상의 포지션 비중을 줄이는 전략을 만들었다.

예를 들면 이런 방식이다.

  • normal: 100% 노출
  • caution: 75% 노출
  • high: 50% 노출
  • extreme: 25% 노출

더 엄격한 버전에서는 extreme 구간에서 아예 0%로 줄였다.

하지만 결과는 더 냉정했다.

  • Always-long: 총수익률 +337.5%, MDD -35.76%
  • Combined rule scale: 총수익률 +78.5%, MDD -36.10%
  • Strict scale: 총수익률 +44.8%, MDD -36.54%
  • Transition scale: 총수익률 +86.9%, MDD -35.89%

위험등급에 따라 비중을 줄였더니 수익률은 크게 훼손됐다.
그런데 MDD는 거의 줄지 않았다.
일부 전략은 오히려 MDD가 더 나빠졌다.

이 결과는 내게 상당히 중요했다.

위험하다고 시장을 피하면, 큰 상승장도 같이 놓친다.
그리고 그렇게 놓친 수익에 비해 손실 방어 효과가 충분하지 않았다.

즉 위험등급은 비중축소 신호가 아니었다.


위험은 방향이 아니라 변동성이었다

그렇다면 위험등급은 아무 쓸모가 없었을까.

그건 아니었다.

방향성 모델은 실패했지만, 변동성 모델은 꽤 의미가 있었다.

10년 기준 vol_model 결과는 다음과 같았다.

  • Pearson: 0.6941
  • Spearman: 0.5020

방향을 맞히지는 못했지만, 앞으로 변동성이 커질지 작아질지는 어느 정도 설명했다.

고변동성 상승장도 따로 봤다.

  • event_high_vol_up_v1: 133건, 이후 5거래일 평균 수익률 +1.69%
  • event_high_vol_up_v2: 79건, 이후 5거래일 평균 수익률 +1.89%

평균 수익률은 플러스였다.
하지만 동시에 변동성과 left-tail도 커졌다.

  • v1 이후 5일 실현변동성: 1.84
  • v1 left-tail: -2.21
  • v2 이후 5일 실현변동성: 2.27
  • v2 left-tail: -2.81

extreme regime도 마찬가지였다.

  • all_extreme: 이후 5거래일 평균 수익률 +1.97%, 실현변동성 2.85, left-tail -3.42
  • extreme_persistence_2d: 실현변동성 3.03, left-tail -3.61
  • extreme_persistence_3d: 실현변동성 3.16, left-tail -3.75

여기서 핵심은 명확했다.

위험등급이 높다고 평균적으로 빠지는 것은 아니었다.
오히려 평균 수익률은 플러스인 경우도 있었다.
하지만 변동성과 하방 꼬리 위험은 분명히 커졌다.

즉 위험은 방향이 아니라 변동성이었다.

이 결론 하나만으로도 이번 실험은 의미가 있었다.


공격적으로 보면, 고변동성은 기회일 수 있다

공격적으로 보면 이 결과는 꽤 흥미롭다.

위험등급이 높다고 무조건 시장을 피하면 안 된다.
오히려 강한 상승장은 고변동성 구간에서 자주 나타날 수 있다.

고변동성 상승장 이후 5거래일 평균 수익률이 플러스였고, extreme regime에서도 평균 수익률이 플러스였다는 점은 중요하다.

시장이 크게 흔들린다는 것은 그만큼 에너지가 크다는 뜻이기도 하다.
방향이 위로 잡히면 짧은 기간에 강한 상승이 나올 수 있다.

따라서 공격적인 투자자에게 위험등급은 회피 신호라기보다, “큰 움직임이 나올 수 있는 구간”을 알려주는 신호에 가깝다.

다만 조건이 있다.

그 움직임이 외국인 선물, 현물 수급, 프로그램매매, 대형주 흐름과 같은 방향으로 정렬되고 있는지 봐야 한다.
단순히 위험등급이 높다는 이유만으로 숏을 치거나, 반대로 강한 지수만 보고 추격매수하는 것은 둘 다 위험하다.

공격적 관점의 결론은 이렇다.

위험하다고 무조건 피하지 말 것.
다만 위험이 상승 에너지와 함께 나타나는지 확인할 것.


보수적으로 보면, 고변동성은 생존 점검 신호다

보수적으로 보면 결론은 조금 다르다.

고변동성 구간은 편안한 구간이 아니다.
평균 수익률이 플러스여도, left-tail과 실현변동성은 커졌다.

즉, 방향이 맞아도 진입 타이밍이 나쁘면 흔들림을 견디기 어렵다.
방향이 틀리면 손실은 빠르게 커질 수 있다.

특히 레버리지, 인버스, 곱버스, 단기 추격매수에는 조심해야 하는 환경이다.

보수적인 투자자에게 위험등급은 매도 신호도 아니지만, 무시해도 되는 숫자도 아니다.

위험등급은 내 포지션의 내구성을 점검하라는 신호다.

내가 감당할 수 있는 손실 범위인가.
레버리지가 과하지 않은가.
손절 기준이 있는가.
장중 급락이 나와도 버틸 수 있는가.
내가 지금 보고 싶은 숫자만 보고 있는 것은 아닌가.

이 질문을 던져야 한다.

보수적 관점의 결론은 이렇다.

위험한 장에서 과대비중과 레버리지는 조심할 것.
수익보다 생존을 먼저 확인할 것.


내가 얻은 가장 중요한 교훈

나는 처음에 더 똑똑한 매수·매도 판단기를 만들고 싶었다.
하지만 백테스트는 다른 답을 줬다.

주식시장을 맞히는 것은 어렵다.
위험등급으로 비중을 자동 조절하는 것도 잘 되지 않았다.
고변동성은 하락 신호가 아니었다.
고위험 구간에서도 시장은 더 오를 수 있었다.

다만 고위험 구간은 더 크게 흔들렸다.

이것이 가장 중요한 교훈이었다.

“위험하다”는 말은 “떨어진다”는 말이 아니다.
“위험하다”는 말은 “내가 견디기 어려울 만큼 흔들릴 수 있다”는 말이다.

이 차이는 생각보다 크다.

위험을 하락으로 오해하면 좋은 상승장을 놓친다.
위험을 무시하면 큰 변동성에 당한다.
위험을 변동성으로 이해하면, 내 포지션이 그 흔들림을 감당할 수 있는지 점검하게 된다.


그래서 리포트도 바꿔야 했다

처음 만든 Telegram 리포트에는 이런 문구가 있었다.

  • 위험등급: 급위험
  • 포지션 신호: 초소형비중
  • 신규 진입: 시장가 추격 금지
  • 레버리지 신규 진입: 원칙적 주의

하지만 백테스트를 해본 뒤에는 이 문구가 조심스러워졌다.

위험등급이 비중축소 신호가 아니라면, 이런 문구는 오해를 줄 수 있다.

그래서 다음 버전에서는 해석 체계를 바꾸기로 했다.

위험등급은 매수·매도 또는 자동 비중축소 신호가 아니다.
위험등급은 변동성 확대, 수급 충돌, 장중 급변동 가능성을 설명하는 상태판이다.

상단 문구도 바꿔야 한다.

단순히 “위험”이라고 쓰는 대신, 시장 상태를 더 구체적으로 표현하는 것이 낫다.

예를 들면 다음과 같다.

  • 선물 주도 고변동성 랠리
  • 현물 동반 상승장
  • 선물-현물 괴리
  • 기관·비차익 매도 압박
  • 반도체 쏠림 장세
  • 급등 후 급락 조정
  • 급락 후 반등
  • 반등 실패
  • 고변동성 왕복장

6월 19일 같은 장은 단순히 “위험”이라고 쓰면 부족하다.

그날 시장은 오전 급등, 점심 급락, 오후 재반등이 반복된 고변동성 왕복장이었다.

이런 식으로 상태를 표현해야 투자자가 실제 장을 더 잘 이해할 수 있다.


예측기는 실패했지만 상태판은 유용했다

이제 처음 질문으로 돌아가보자.

이번 실험은 성공이었을까, 실패였을까?

예측 모델로 보면 실패다.
방향성 예측은 약했고, 자동 비중축소 전략도 좋지 않았다.

하지만 시장 상태판으로 보면 성공에 가깝다.

왜냐하면 이 상태판은 시장을 맞히지는 못했지만, 시장을 다르게 보게 해줬기 때문이다.

예전에는 지수가 오르면 그냥 좋게 봤다.
이제는 이렇게 묻게 된다.

  • 이 상승은 외국인 현물이 같이 들어온 상승인가
  • 선물만 끌고 가는 상승인가
  • 비차익 프로그램은 따라오는가
  • 대형주만 끌고 가는가
  • VKOSPI가 높은데도 오르는 고변동성 상승장인가
  • 옵션시장은 하방 위험을 비싸게 사고 있는가
  • 장중 반등이 안정적인가, 단순한 왕복 변동성인가

예전에는 지수가 빠지면 그냥 불안했다.
이제는 이렇게 묻게 된다.

  • 외국인 선물도 같이 꺾였는가
  • 현물 대형주가 무너졌는가
  • 기관과 비차익 매도가 압도하는가
  • 변동성이 더 튀고 있는가
  • 급락 후 반등이 나오는가
  • 단순 조정인가, 반등 실패인가

이 질문들이 생긴다는 것 자체가 상태판의 가치다.


투자 자동화에 대한 생각이 바뀌었다

이번 프로젝트를 하면서 투자 자동화에 대한 생각도 바뀌었다.

처음에는 자동화가 더 나은 판단을 만들어줄 것이라고 생각했다.
하지만 지금은 조금 다르게 생각한다.

자동화의 목적은 반드시 “판단을 대신하는 것”이 아니다.
좋은 자동화는 내가 감정적으로 판단하지 않게 도와준다.

시장이 급등할 때 흥분하지 않게 하고,
시장이 급락할 때 공포에 빠지지 않게 하고,
내가 보고 싶은 숫자만 보지 않게 하고,
상충되는 신호를 한 화면에 보여준다.

이번 상태판이 한 일은 바로 그거였다.

외국인 선물이 강해도 비차익이 나쁘면 같이 보여줬다.
지수가 올라도 VKOSPI가 높으면 같이 보여줬다.
반도체가 강해도 breadth와 프로그램 수급이 약하면 경고를 남겼다.
위험등급이 높아도 그것이 매도 신호가 아니라 변동성 신호일 수 있음을 백테스트로 확인했다.

이 정도면 충분히 쓸모 있다.


앞으로 더 해볼 것

물론 아직 한계는 많다.

첫째, 장중 30분 historical 데이터가 부족하다.
이번 백테스트는 주로 일별 데이터 기반이었다. 하지만 Telegram 리포트는 장중 30분 단위다. 둘 사이에는 frequency 차이가 있다.

둘째, 외국인 KOSPI200 선물 과거 순매수와 비차익 프로그램 과거 순매수 데이터가 충분하지 않다.
이번 실시간 리포트에서는 KB증권 등에서 장중 수급을 가져왔지만, 장기 백테스트용 과거 데이터는 제한적이었다.

셋째, basis gap 과열 가설은 현재 feature로는 충분히 검증되지 않았다.
실시간 리포트에서는 이론 베이시스와 갭을 봤지만, 일별 historical feature에서는 이벤트가 제대로 잡히지 않았다. 데이터 구조를 더 보강해야 한다.

넷째, 데이터 실험을 너무 많이 하면 과최적화 위험이 있다.
백테스트를 많이 돌리면 우연히 좋아 보이는 규칙을 찾을 수 있다. 그래서 앞으로는 새로운 규칙을 계속 만들기보다, 이미 확인한 결론을 더 보수적으로 해석하는 쪽이 맞다고 생각한다.

다음 개선 방향은 명확하다.

  • 위험점수 기여도 표시
  • 장중 고점 대비 급락 감지
  • 선물-현물 괴리 신호
  • 고변동성 상승장 문구
  • extreme 지속 경고
  • 15시 30분 마감 요약 자동 생성
  • 매수·매도 표현 제거
  • “시장위험 상태판”이라는 정체성 강화

마지막 결론

이번 프로젝트의 결론은 단순하다.

나는 주가 예측기를 만들지 못했다.
하지만 시장 상태판은 만들 수 있었다.

그리고 어쩌면 개인 투자자에게 더 필요한 것은 예측기가 아니라 상태판일지도 모른다.

예측기는 틀리면 위험하다.
틀린 예측은 확신을 만든다.
확신은 과대비중과 손절 실패로 이어질 수 있다.

반면 상태판은 질문을 만든다.

지금 시장은 어떤 상태인가.
내 포지션은 이 변동성을 견딜 수 있는가.
이 상승은 건강한가.
이 하락은 수급 붕괴인가, 단순 흔들림인가.
내가 지금 보고 싶은 것만 보고 있지는 않은가.

투자에서 중요한 것은 항상 정답을 맞히는 것이 아닐 수 있다.

오히려 중요한 것은 내가 틀릴 수 있다는 전제 아래, 시장을 차분하게 보는 구조를 만드는 것이다.

이번 실험은 그 구조를 만드는 과정이었다.

결국 내가 얻은 결론은 이것이다.

시장은 맞히는 대상이 아니라, 관찰하고 대응해야 하는 대상이다.
그리고 좋은 자동화는 나 대신 매매하는 것이 아니라, 내가 시장을 더 정직하게 보도록 도와주는 것이다.

예측기는 실패했지만, 시장을 더 정직하게 보는 계기판은 만들 수 있었다.