Lee Trader의 flow_score는 외국인과 기관이 최근 어떤 종목을 상대적으로 강하게 사고 있는지 비교하는 0~100 범위의 수급 점수입니다. 외국인이 얼마를 샀다는 절대 금액을 그대로 점수로 쓰지 않고, 같은 거래일의 분석 종목군 안에서 순매수 위치를 백분위로 바꿉니다.

수급 점수는 2026년 5월 14일부터 운영 종합 점수 v9_flow의 가산 축으로 포함됐습니다. 이 글은 2026년 6월 22일의 python/scoring/final_score.py 계산을 기준으로 합니다. 수급 점수가 높다는 사실만으로 매수할 수는 없으며 가격, 예측 수익, 품질, 위험과 함께 해석해야 합니다.

원자료는 무엇인가요?

종목별 투자자 수급 자료에서 외국인과 기관의 일별 순매수를 가져옵니다. 순매수는 일정 기간의 매수에서 매도를 뺀 순수한 방향을 뜻합니다. 양수면 해당 기간에 매수가 더 많았고 음수면 매도가 더 많았다는 의미입니다.

운영 특징에는 외국인과 기관의 5일·20일 누적값이 저장될 수 있습니다. 현재 flow_score 계산에 직접 사용하는 값은 다음 두 가지입니다.

  • flow_foreign_net_5d: 외국인 최근 5거래일 누적 순매수
  • flow_inst_net_5d: 기관 최근 5거래일 누적 순매수

5일은 달력상의 일주일이 아니라 거래일 기준입니다. 휴장일은 포함되지 않습니다. 20일 수급은 중기 흐름을 설명하거나 화면에서 추이를 확인하는 자료로 활용할 수 있지만 현재 운영 flow_score 공식의 직접 입력은 5일 값입니다.

계산 공식

먼저 각 수급 값을 같은 날짜 종목군 안에서 백분위로 변환합니다.

외국인 백분위 = percentile(flow_foreign_net_5d)
기관 백분위   = percentile(flow_inst_net_5d)

그 다음 두 백분위를 다음 비율로 합칩니다.

flow_score =
    0.6 × 외국인 5일 순매수 백분위
  + 0.4 × 기관 5일 순매수 백분위

외국인 수급에 60%, 기관 수급에 40%를 반영합니다. 두 점수는 모두 0~100 범위이므로 최종 수급 점수도 0~100 안에 들어갑니다.

예를 들어 외국인 백분위가 90이고 기관 백분위가 60이면 다음과 같습니다.

flow_score = 0.6 × 90 + 0.4 × 60 = 78

이 78은 외국인이 78억 원을 샀다는 뜻도 아니고 수급 때문에 78% 상승한다는 뜻도 아닙니다. 그날 분석 종목군에서 외국인과 기관의 5일 수급 조합이 상대적으로 강한 편이라는 뜻입니다.

백분위는 어떻게 정해지나요?

같은 거래일에 값이 작은 종목부터 큰 종목까지 순위를 매기고 전체 종목 수로 나눕니다. 값이 같은 종목은 평균 순위를 사용합니다. 따라서 정확히 0이나 100이 아닌 값이 나올 수 있고, 분석 대상 수가 달라지면 같은 순매수 값의 점수도 달라질 수 있습니다.

백분위의 장점은 대형주와 중소형주의 수급 금액 규모 차이를 어느 정도 줄여 같은 척도로 비교할 수 있다는 점입니다. 그러나 시가총액이나 거래대금으로 완전히 정규화한 값은 아닙니다. 절대 순매수 규모의 기업 규모 편향이 남을 수 있다는 한계가 있습니다.

또한 같은 종목의 어제 점수와 오늘 점수 차이는 해당 종목의 수급 변화뿐 아니라 다른 종목들의 변화 때문에 생길 수 있습니다. 상대 점수는 횡단면 비교에 유용하지만 시간에 따른 절대 강도를 그대로 나타내지는 않습니다.

왜 외국인 60%, 기관 40%인가요?

현재 운영 공식은 한국 시장에서 외국인 수급의 영향과 지속성을 조금 더 크게 반영하기 위해 외국인 비중을 높게 둡니다. 다만 이 비율이 모든 시장 국면과 업종에서 최적이라고 증명된 것은 아닙니다.

대형 수출주와 지수 비중이 큰 종목은 외국인 수급의 영향이 클 수 있지만, 일부 중소형주나 정책·연기금 영향이 강한 종목에서는 기관 흐름이 더 중요할 수 있습니다. 따라서 60대 40은 현재 운영 기준이지 변하지 않는 시장 법칙이 아닙니다.

Lee Trader는 손익과 후행 성과가 충분히 쌓이기 전 최근 사례만 보고 비율을 변경하지 않습니다. 가중치 변경이 필요하다면 기존 운영 점수를 유지한 채 별도 shadow 비교와 시간 분리 검증을 먼저 해야 합니다.

한쪽 자료만 있을 때

외국인과 기관 값이 모두 있으면 60대 40 공식이 적용됩니다. 한쪽 자료만 정상적으로 존재하면 사용할 수 있는 한 축의 백분위를 수급 점수로 사용합니다.

  • 외국인 자료만 존재: 외국인 백분위 사용
  • 기관 자료만 존재: 기관 백분위 사용
  • 둘 다 없음: 구성 단계에서는 결측

최종 final_score 계산에서 flow_score가 비어 있으면 중립값 50을 채웁니다. 데이터가 없다는 이유로 최하위 수급인 0점을 주지 않기 위해서입니다.

중립값 처리는 안전한 기본값이지만 완전한 해결책은 아닙니다. 수급 데이터가 반복해서 누락된 종목은 실제 수급 상태를 알 수 없으므로 데이터 신뢰도 경고와 함께 봐야 합니다. 50점은 “중립 수급이 확인됐다”가 아니라 “확인할 수 없어 종합 점수에서 중립으로 처리했다”는 의미일 수 있습니다.

절대 순매수 대신 상대 순위를 쓰는 이유

종목마다 시가총액과 평소 거래대금이 크게 다릅니다. 대형주에서 흔한 순매수 금액이 소형주에서는 매우 큰 사건일 수 있습니다. 원화나 주식 수를 그대로 합치면 규모가 큰 종목이 지속적으로 높은 점수를 받을 가능성이 있습니다.

당일 상대 순위를 사용하면 시장 자금이 어느 종목에 상대적으로 집중됐는지 빠르게 비교할 수 있습니다. 같은 날 전체 시장이 순매도 상태여도 덜 팔린 종목은 상대 점수가 높을 수 있고, 전체가 강한 순매수 상태여도 다른 종목보다 약하면 점수가 낮을 수 있습니다.

바로 이 점이 장점이자 한계입니다. flow_score는 시장 전체의 자금 유입 강도를 말하지 않습니다. 시장 수급 상태는 별도의 시장 지표로 확인해야 합니다.

5일과 20일 수급은 어떻게 다르게 읽나요?

5일 누적은 최근 방향 전환을 빠르게 반영합니다. 뉴스나 실적 발표 뒤 새로 들어온 자금도 비교적 빨리 잡아냅니다. 대신 하루의 대량 거래가 5일 값 전체를 지배할 수 있고, 다음 주에는 점수가 급격히 사라질 수 있습니다.

20일 누적은 한 달 가까운 지속성을 보는 데 유리합니다. 단기 이벤트의 영향을 완화하지만 최근 수급 반전은 늦게 반영합니다. 실무적으로는 다음처럼 구분할 수 있습니다.

  • 5일 강세·20일 강세: 최근과 중기 수급이 같은 방향
  • 5일 강세·20일 약세: 장기 매도 뒤 단기 반전 가능성
  • 5일 약세·20일 강세: 기존 매집 뒤 단기 차익 실현 가능성
  • 둘 다 약세: 지속적인 매도 압력 가능성

이 조합은 설명을 위한 관찰 기준이며 단독 매매 규칙이 아닙니다. 가격 반응과 거래량, 공시 맥락을 확인해야 합니다.

수급 점수가 오르는 대표적인 경우

외국인과 기관이 모두 순매수하고 다른 종목보다 증가 폭이 크면 점수가 높아질 가능성이 큽니다. 외국인 수급이 매우 강하고 기관이 중립인 경우에도 외국인 비중 때문에 높은 점수가 나올 수 있습니다.

반대로 절대 순매수가 양수여도 다른 종목에 더 큰 자금이 몰리면 백분위는 중간 이하일 수 있습니다. 외국인이 사고 기관이 강하게 파는 경우에는 두 흐름이 서로 상쇄됩니다.

같은 투자자 그룹 안에서도 거래 목적은 다릅니다. 외국인 현물 매수가 선물 포지션의 헤지일 수 있고, 기관 순매수에는 펀드 리밸런싱이나 지수 편입 거래가 섞일 수 있습니다. 점수만으로 매수 목적을 알 수는 없습니다.

수급 점수의 주요 한계

첫째, 투자자별 집계는 거래 후 관측값입니다. 수급이 가격 상승의 원인인지, 이미 오른 가격을 따라온 결과인지 구분하기 어렵습니다. 높은 수급 점수는 과열 후반에도 나타날 수 있습니다.

둘째, 5일 합계는 특정 하루의 대량 거래에 민감합니다. 블록딜, 지수 변경, 옵션 만기, 리밸런싱처럼 반복되지 않는 거래가 점수를 왜곡할 수 있습니다.

셋째, 상대 백분위는 분석 종목군에 의존합니다. 약 204개 운영 종목의 구성이나 데이터 이용 가능성이 달라지면 같은 원자료도 점수가 달라질 수 있습니다.

넷째, 외국인과 기관을 각각 하나의 집단으로 합칩니다. 기관 안의 연기금, 투신, 보험 등 세부 주체는 목적과 기간이 다를 수 있습니다.

다섯째, 순매수 수량의 기업 규모 효과가 완전히 제거되지 않습니다. 시가총액 대비 순매수나 거래대금 대비 비율을 별도로 보면 다른 해석이 나올 수 있습니다.

final_score에는 얼마나 반영되나요?

수급 점수의 비중은 시장 국면에 따라 달라집니다.

시장 국면flow_score 가중치
상승0.12
중립0.10
방어0.08

상승 국면에서 수급 비중이 조금 높고 방어 국면에서는 품질과 위험 관리의 영향이 더 커집니다. 예를 들어 중립 국면에서 수급 점수가 10점 높아지면 다른 값이 같을 때 원점수 기여는 약 1점 증가합니다.

수급은 종합 점수의 일부일 뿐입니다. 예상 수익과 기술 점수가 약하거나 위험 패널티가 크면 높은 수급 점수만으로 최종 순위가 올라가지 않을 수 있습니다. 반대로 수급이 중립이어도 다른 축이 강하면 상위 후보가 될 수 있습니다.

전체 점수 공식은 AI 점수 계산 방법에서 확인할 수 있습니다.

화면에서 읽는 순서

먼저 flow_score가 높은지 낮은지 확인하고, 외국인과 기관 중 어느 쪽이 점수를 만들었는지 봅니다. 다음으로 5일과 20일 방향이 일치하는지, 가격과 거래량이 같은 방향으로 반응하는지 확인합니다.

그 뒤 시장 전체의 외국인 수급과 breadth를 확인해야 합니다. 개별 종목 수급이 좋아도 시장이 방어 국면이면 행동 강도는 낮아질 수 있습니다. 마지막으로 최근 급등과 예상 낙폭, 계좌 실행 조건을 봅니다.

수급 데이터가 없으면 화면에 “중립”처럼 보일 수 있으므로 원자료 존재 여부도 중요합니다. 데이터 없음과 실제 중립을 구분하지 않으면 점수를 과신하게 됩니다.

예시 해석

가상의 후보 A가 flow_score 82, 기술 점수 75, 예상 수익 점수 70이라고 가정해 보겠습니다. 외국인과 기관 수급이 함께 강하고 가격도 안정적인 상승 추세라면 여러 축이 같은 방향을 가리킵니다.

후보 B는 flow_score 90이지만 최근 5일 가격이 급등하고 예상 최대 낙폭이 큰 상태일 수 있습니다. 이 경우 수급은 강하지만 추격 위험도 큽니다. 후보 B가 A보다 무조건 좋은 진입 대상이라고 말할 수 없습니다.

후보 C는 수급 자료가 없어 50으로 처리됐을 수 있습니다. 이는 외국인과 기관이 중립적으로 거래했다는 확인이 아닙니다. 데이터 신뢰도가 회복될 때까지 판단을 보수적으로 유지해야 합니다.

운영 변경은 어떻게 검증해야 하나요?

수급 가중치나 기간을 바꾸려면 과거 전체 자료에서 가장 좋아 보이는 조합만 고르면 안 됩니다. 과거 구간에서 기준을 만들고 그보다 뒤의 독립 기간에서 검증해야 합니다. 거래 비용과 시장 국면별 차이도 포함해야 합니다.

현재 Lee Trader의 수급 공식은 실환경 기준으로 유지되고 있습니다. 진행 중인 손익 분석은 점수, 정책, 주문, 실제 체결과 이후 가격을 연결하는 단계이며 계산식을 즉시 개선하는 단계가 아닙니다. 충분한 만기 표본이 쌓인 뒤에야 5일과 20일 조합, 외국인·기관 비율 같은 후보를 별도 실험할 수 있습니다.

수급 점수는 많은 종목을 같은 기준으로 비교하는 데 유용하지만 투자자의 의도나 미래 매수 여력을 알려 주지는 않습니다. 가격, 기업 정보, 시장 상태, 위험 조건을 함께 읽어야 합니다.

이 글은 정보 제공을 위한 방법론 설명이며 특정 종목의 매수나 매도를 권유하지 않습니다. 수급과 AI 점수는 미래 주가나 수익을 보장하지 않습니다.