🔍
광고 자리 · 리더보드

지표 5개를 신호등 3색으로 줄였더니 매일 전부 빨간불로 굳었다

8월 18, 2026
광고 자리 · 본문 상단

숫자 다섯 개를 색 세 개로 줄여 매일 자동으로 받게 했다. 그랬더니 다섯 개가 전부 빨간불로 굳었고, 나는 그 임계값을 고치지 않기로 했다.

자동화를 하다 보면 결국 여기까지 온다. 데이터를 모으는 것까지는 기계가 잘하는데, "그래서 이게 나쁜 상태냐 아니냐"를 누가 정하느냐. 수집 배선을 어떻게 깔았는지는 매크로 지표 자동 수집 편에 이미 적어놨으니 여기선 안 다룬다. 이 글은 그 안쪽 이야기다. 지표 신호등 임계값을 내가 어떻게 정했고, 그게 매일 전부 빨간불로 굳었을 때 뭘 했는지.

결론부터 말하면 안 고쳤다. 고치는 게 더 위험해 보였거든.

📑 목차


1. 숫자 다섯 개를 색 세 개로 줄인다는 것

신호등이라고 부르는 건 별 게 아니다. 지표 하나마다 선을 두 개 그어놓고, 그 선을 기준으로 빨강·주황·초록 중 하나를 붙이는 거다. 여러 지표의 색을 모아 종합 색도 하나 낸다.

내가 고른 다섯 개는 환율, 국고채 10년물 금리, 신용잔고, 시가총액 집중도(상위 4개 종목이 전체에서 차지하는 비중), 외국인 순매수 누적. 여기서 신용잔고는 개인이 증권사에 돈 빌려서 산 주식 규모고, 외국인 순매수 누적은 1년치(252거래일)를 굴려 더한 값이다.

종합 판정 규칙은 이렇게 짰다. 빨강이 3개 이상이면 종합 빨강. 빨강 2개에 주황이 2개여도 빨강. 주황과 빨강을 합쳐 3개면 주황. 나머지는 초록.

2. 임계값은 어디서 가져왔나

여기가 이 글에서 제일 중요한 대목인 것 같다. 선을 어디에 긋느냐.

방법은 두 가지다. 하나는 내가 감으로 "환율 1,400원 넘으면 위험"이라고 박는 것. 다른 하나는 과거 데이터를 쭉 늘어놓고 백분위로 자르는 것. 백분위는 "지난 N년 중에 이 값보다 높았던 날이 몇 %냐"를 재는 방식이다. 상위 몇 %에 들면 빨강, 이런 식.

나는 후자로 갔다. 감으로 박은 선은 내 편견이 그대로 임계값이 되니까. 실제로 잡힌 선은 이렇다. 지표명 옆에 그 선을 뽑을 때 쓴 원자료를 같이 적어둔다.

지표 주황 빨강
환율 1,361원 1,461원
국고채 10년 3.35% 3.86%
신용잔고 22.2조 32.8조
시총집중(상위 4) 31.8% 38.8%
외국인 1년 누적 −23조 −30.3조

각 지표마다 참조한 과거 구간이 다르다. 시총집중은 2006년 이후 연간 상단, 외국인 누적은 일별 데이터 2,793개의 분포에서 잘랐다. 데이터가 있는 만큼 쓴 거지 통일된 기준은 아니다. 이건 한계다.

환율·국고채·신용잔고·시총집중·외국인 누적 다섯 지표의 주황과 빨강 임계값을 3열 표로 정리한 이미지 ▲ 환율·국고채·신용잔고·시총집중·외국인 누적 다섯 지표의 주황과 빨강 임계값을 3열 표로 정리한 이미지 (자체 제작 이미지)

3. 매일 다섯 개 다 빨간불이었다

돌려봤더니 종합 빨강이 나왔다. 그런데 빨강이 3개도 4개도 아니고 다섯 개 전부였다.

처음엔 버그를 의심했다. 임계값 계산이 틀렸거나, 데이터가 잘못 들어왔거나. 근데 값을 하나씩 열어보니 그런 게 아니었다.

  • 외국인 1년 누적 −140.6조 (빨강선 −30.3조의 4.6배)
  • 환율 1,548 (빨강선 1,461)
  • 국고채 10년 4.09% (빨강선 3.86)
  • 신용잔고 37.8조 (빨강선 32.8)
  • 시총집중 60.4% (빨강선 38.8)

넘은 게 아니라 한참 넘었다. 외국인은 아예 자릿수가 다르고, 시총집중은 38.8%를 재려고 그은 선인데 60.4%가 나왔다. 임계값을 잘못 잡은 게 아니라 시장이 과거 분포 바깥으로 나간 거였다. 이걸 잡으려고 만든 건데 막상 다 잡히니까 기계가 고장 난 줄 알았다는 게 좀 웃기다.

문제는 그다음이다. 알림이 매일 온다. 매일 똑같이 빨강 다섯 개. 이러면 알림이 아니라 벽지가 된다.

다섯 지표의 현재값이 빨강 임계선을 몇 배 넘었는지 가로 막대로 비교한 차트, 외국인 누적이 4.6배로 가장 크다 ▲ 다섯 지표의 현재값이 빨강 임계선을 몇 배 넘었는지 가로 막대로 비교한 차트, 외국인 누적이 4.6배로 가장 크다 (자체 제작 이미지)

4. 다시 잡으면 진짜 극단이 초록불이 된다

여기서 자연스럽게 나오는 생각. 임계값을 다시 잡자. 최근 2~3년 데이터로 백분위를 다시 재면 선이 위로 올라갈 거고, 신호등도 다시 움직이겠지.

기술적으로는 쉽다. 백분위 다시 계산하는 코드는 이미 있으니 참조 구간만 바꾸면 끝이다.

근데 그러면 뭐가 되냐. 지금 이 상태, 그러니까 과거 분포에서 보기 드문 이 구간이 "초록불"이 된다. 최근 3년이 계속 극단이었으면 그 극단이 새 기준선이 되니까. 자를 재는 대상에 맞춰 늘리는 꼴이다.

이 모니터를 왜 만들었는지 생각해보면 답이 나온다. "지금이 평소와 얼마나 다른가"를 보려고 만든 거지, "요즘 기준으로 오늘이 어떤가"를 보려고 만든 게 아니다. 후자는 아무리 이상해져도 영원히 초록불이다.

그래서 재캘리브레이션을 기각했다. 임계값 유지. 다섯 개 다 빨간불인 채로 두기로 했다.

한 가지 덧붙이면, 그렇다고 이걸 "위험하다"거나 "조정이 온다"는 말로 옮기진 않는다. 임계 초과가 말해주는 건 딱 하나, 과거 분포에서 보기 드문 구간이라는 것뿐이다. 그 이상은 신호등이 아는 게 아니다.

5. 그럼 매일 오는 알림엔 뭘 남기나

색이 안 변하는 알림은 정보량이 0이다. 그래서 알림 내용을 갈아엎었다.

원래는 메시지 아래에 안내 문구가 한 줄 붙어 있었다. 임계 근접이니 대시보드에서 트리거 가격을 확인하라는 식. 매일 똑같은 문장이 매일 똑같이 붙으니 읽을 이유가 없더라. 지웠다.

대신 남긴 게 셋이다.

첫째, 전일 대비 변화. 색은 안 바뀌어도 숫자는 매일 움직인다. 어제보다 나빠졌나 나아졌나, 이 방향이 유일하게 매일 갱신되는 정보였다.

둘째, 반대매매 발동가격. 반대매매는 빌린 돈으로 산 주식이 일정 이상 떨어지면 증권사가 강제로 팔아버리는 걸 말한다. 원래는 "발동가까지 −16%"로 거리를 %로 보여줬는데, 볼 때마다 현재가에 곱셈을 해야 했다. 그래서 계산된 절대가격을 바로 박기로 했다. 삼성 280,560원, 하닉 2,226,000원 이런 식으로(현재가는 증권사 시세 API 기준). 이 가격이 깨지면 강제 매도가 연쇄로 붙는다는 게 한 줄로 보인다.

셋째, 시장 스냅샷. KOSPI·삼성·하이닉스 현재가와 등락.

주간 메시지의 등락률 기준이 하루치와 한 주치로 어긋나 한 번 손본 적이 있는데, 그건 색을 정하는 쪽이 아니라 수집·계산 배선 쪽 이야기라 수집 편브리핑 파이프라인 편에 맡긴다.

그리고 하나 더. 발동가격이 주간 메시지에서 두 군데에 중복으로 찍히고 있었다. 압력 줄에 한 번, 아래 트리거 줄에 한 번. 하나 지웠다.

6. 신호등에 안 넣은 것들

색을 붙이려면 "높으면 나쁘다" 또는 "낮으면 나쁘다"가 명확해야 한다. 이게 애매한 지표는 신호등에 넣으면 안 된다. 넣는 순간 기계가 내 대신 방향을 정해버리니까.

그래서 신호등 밖 정보 섹션으로 뺀 게 몇 개 있다.

레버리지 ETF 비중이 그랬다. 처음엔 6번째 지표로 넣었는데, 단일종목 2배 ETF 순자산이 원주식 시총 대비 0.2~0.3% 수준이라 색을 붙일 만한 크기가 아니었다. 신호등에서 빼고 숫자만 보여주는 정보 패널로 돌렸다.

투자자 예탁금도 안 넣었다. 예탁금은 개인이 증권사 계좌에 넣어둔 대기 자금인데, 이게 늘어난 게 좋은 건지 나쁜 건지 방향이 안 잡힌다. 살 준비를 한 거일 수도, 팔고 빠져나와 앉아 있는 거일 수도 있다. 대신 밴드 안 어디쯤인지만 한 줄로 표시한다.

외국인 보유비중도 마찬가지다. 이건 애매한 정도가 아니라 함정이 하나 더 있었다. 시가총액 기준 보유비중이 한 주 만에 −1.29%p 빠진 걸 보고 처음 나온 해석이 "외국인 이탈"이었는데, 내가 주식수 기준은 어떻냐고 되물었다. 주식수 기준은 +0.02%p로 사실상 그대로였다(전종목 합산, 거래소 공표치와 대조). 외국인이 판 게 아니라 외국인이 들고 있던 대형주 가격이 빠진 거였다. 시총 기준은 가격이 곱해져 있으니 매매가 없어도 움직인다. 그래서 이 지표는 시총 기준과 주식수 기준을 항상 같이 읽는 규칙을 박아뒀고, 신호등에는 안 넣었다.

방향이 헷갈리는 지표에 색을 붙이면, 헷갈림이 확신으로 둔갑한다.

반대매매도 신호등이 아니라 텍스트 레벨(낮음/주의/높음)로만 둔다. 메시지에는 "발동가는 추정, 금액은 실측"이라고 라벨을 붙여 어느 쪽이 내가 계산한 값이고 어느 쪽이 원자료인지 구분해 둔다. 이 라벨 규칙 자체의 유래는 수집 편 몫이라 여기선 적용만 했다.

주기도 다르게 뒀다. 보유주체 구성이나 국제수지 같은 건 매일 볼 이유가 없다. 국제수지는 발표가 두 달쯤 늦게 나오는 월간 데이터라 매일 호출하면 같은 숫자를 30번 보게 된다. 주간·월간으로만 돌린다.

7. 대시보드는 만들었다가 껐다

처음엔 대시보드도 만들었다. 슬라이더 움직이면 캐스케이드(연쇄 하락) 시나리오가 다시 계산되는 화면. 폰으로도 접속되게 해뒀다.

안 봤다. 진짜로 안 보게 되더라.

이유가 명확했다. 대시보드는 내가 열어야 보인다. 알림은 안 열어도 온다. 그리고 대시보드에서 확인하려던 유일한 값이 반대매매 발동가격이었는데, 그걸 알림 메시지 안에 직접 박아버리니 열 이유가 사라졌다.

그래서 껐다. 상시 돌던 프로세스를 내리고, 스케줄 설정 파일은 지우지 않고 폐기 폴더로 옮겼다. 되살릴 일이 생기면 도로 꺼내면 되니까. 화면을 그리던 코드도 지우진 않고 자동 실행만 끊었다.

운영은 텔레그램 메시지 하나로 끝났다. 만든 걸 없애는 게 만드는 것보다 나은 경우가 있다는 걸 이때 배웠다. 자동화를 다 만들면 끝일까에서 점검 자동화 얘기를 했었는데, 점검할 대상 자체를 줄이는 것도 방법이더라.

지금도 다섯 개 다 빨간불이다. 임계값은 그대로 두고 있다. 언젠가 색이 하나 초록으로 바뀌는 날이 오면 그게 진짜 정보일 텐데, 아직 그런 날은 없다. 3줄 요약 - 지표를 색으로 줄이려면 선을 어디에 긋느냐가 전부고, 나는 과거 분포 백분위로 그었다 - 다섯 개 다 빨간불로 굳었을 때 최근 구간으로 다시 잡는 걸 기각했다, 그러면 진짜 극단이 초록불이 되니까 - 색이 안 변하는 알림엔 변화 방향·발동가격·시장 스냅샷만 남기고 나머지는 다 지웠다

방향이 애매한 지표는 아예 신호등에 안 올렸다. 예탁금이 늘어난 게 좋은 건지 나쁜 건지 나도 모르는데, 기계가 대신 정하게 둘 순 없었다.



이 글은 정보 제공이 목적이고, 작성 시점 기준이다. 요금·기능·정책은 이후 바뀔 수 있으니 결제·설치 전 공식 페이지를 한 번 확인하는 게 좋다. 특정 제품 사용을 권유하거나 결과를 보장하지 않는다. 참고한 공식 자료 - 한국은행 경제통계시스템(환율·국고채·국제수지): ecos.bok.or.kr - 공공데이터포털(금융투자협회 증시자금추이, 신용잔고·예탁금·반대매매): data.go.kr - 한국투자증권 KIS Developers(시세·투자자별 매매동향): apiportal.koreainvestment.com - 한국거래소 정보데이터시스템: data.krx.co.kr - marcap 국내 시가총액 데이터셋(오픈소스): github.com/FinanceData/marcap

광고 자리 · 멀티플렉스

함께 읽으면 좋은 글