📚 시리즈: 직장인의 주식 스크리너 개발기
- 1편 · 거래량은 터졌는데 주가는 그대로? 흡수 거래량 스크리너 만들기 (지금 읽는 글)
- 2편 · 10년 백테스트가 알려준 불편한 진실
- 3편 · 기관·외국인 순매수 따라 사면 오를까?
- 4편 · DART 공시로 찾은 작은 우위 — 실적 개선·내부자 매수
- 5편 · 백테스트를 믿기 전에 확인할 7가지
- 6편 · 매일 종목 추천 대신 ‘관찰 기록’을 남기는 이유
- 7편 · 내 전략 10년 재검증과 멀티팩터 워크포워드
- 8편 · 거래비용을 현실로 바꾸자 결과가 뒤집혔다
안녕하세요, 육성라이프입니다 😊
퇴근하고 유튜브를 보다가 이런 주장을 들었습니다. “거래량이 평소의 몇 배로 터졌는데 주가가 거의 움직이지 않았다면, 누군가 쏟아지는 매도 물량을 조용히 받아내고 있다는 뜻이다.” 큰손이 주가를 띄우기 전에 물량을 모으는 흔적, 이른바 ‘흡수(Absorption)’라는 개념입니다.
그럴듯했습니다. 그런데 저는 평범한 직장인이라 장중에 호가창을 볼 시간이 없습니다. 그래서 코스피·코스닥 전 종목에서 이 조건을 자동으로 찾아 주는 주식 스크리너를 파이썬으로 직접 만들어 보기로 했습니다. 코딩은 AI 코딩 도우미의 도움을 받았고, 판단 기준과 검증 방식은 하나하나 직접 정했습니다.
이 시리즈는 그 과정을 숨김없이 기록한 개발기입니다. 미리 말씀드리면 처음 아이디어는 10년치 데이터 앞에서 무너졌고, 여러 번 방향을 바꾼 끝에 아주 작은 우위 하나를 찾았습니다. 1편에서는 첫 번째 스크리너를 어떤 조건으로, 어떤 데이터로 만들었는지 정리합니다.
① ‘거래량 급증 + 주가 정체’ 종목을 찾는 구체적인 조건 ② 무료로 한국 주식 데이터를 받는 방법(pykrx) ③ 스크리너를 만들 때 반드시 넣어야 할 품질 필터
1. ‘흡수 거래량’이란 무엇인가
주가는 사려는 사람과 팔려는 사람이 만나는 지점에서 결정됩니다. 거래량이 평소보다 크게 늘었다는 건 그날 손바뀜이 많았다는 뜻이죠. 보통은 거래량이 터지면 주가도 크게 움직입니다. 호재가 나와 급등하거나, 악재로 급락하거나요.
그런데 거래량은 3배 이상 터졌는데 주가는 ±3% 안에서 끝난 날이 있습니다. 흡수 이론은 이걸 이렇게 해석합니다.
- 누군가 대량으로 팔았는데 주가가 밀리지 않았다 → 반대편에서 그 물량을 받아준 매수자가 있었다
- 그 매수자가 기관이나 큰손이라면, 물량을 다 모은 뒤 주가를 끌어올릴 수 있다
- 따라서 흡수가 일어난 종목을 미리 찾아 두면 상승 초입을 잡을 수 있다
논리는 깔끔합니다. 문제는 이게 실제로 돈이 되는지였습니다. 그걸 확인하려면 먼저 조건을 숫자로 정확히 정의해야 했습니다.

사진: heecheol890102 (Pixabay) · Wikimedia Commons (CC0)
2. 스크리너 조건을 숫자로 정의하기
“거래량이 많다”, “주가가 버텼다”는 말은 사람마다 다르게 해석합니다. 프로그램은 모호한 말을 이해하지 못하니 조건부터 숫자로 못 박았습니다.
| 구분 | 조건 | 이렇게 정한 이유 |
|---|---|---|
| 거래량 급증 | 당일 거래량 ≥ 직전 20거래일 평균 × 3 | 평균에 당일을 빼야 합니다. 당일을 넣으면 평균 자체가 커져 조건이 거의 안 걸립니다. |
| 주가 정체 | 당일 종가 등락률 ±3% 이내 | 물량을 받아냈다면 가격이 크게 밀리지도, 튀지도 않았어야 합니다. |
| 장중 변동폭 | 고가와 저가 차이 6% 이하 | 장중에 위아래로 크게 흔들린 날은 ‘버틴’ 날로 보기 어렵습니다. |
| 거래대금 | 10억 원 이상 | 거래가 적은 종목은 몇 건의 주문만으로도 3배가 됩니다. |
| 거래정지 | 직전 20일 안에 정지 이력 없음 | 재개 직후의 비정상 거래량을 걸러냅니다. |
| 가격 왜곡 | 하루 ±31% 넘는 변동 종목 제외, 스팩 제외 | 액면분할·병합으로 가격이 끊긴 종목은 계산이 틀어집니다. |
여기에 ‘강화 조건’을 따로 두어 기본 조건과 성적을 비교할 수 있게 했습니다.
- 종가 위치 0.5 이상: 그날 고가와 저가 사이에서 위쪽 절반에서 마감 → 매수 쪽이 물량을 받아냈다는 해석에 더 가깝습니다.
- 바닥권: 최근 120거래일 가격 범위의 아래쪽 절반 → 고점에서 큰손이 물량을 넘기는 ‘분산’과 구분하려는 장치입니다.
- 시장 추세 필터: 해당 시장 지수가 20일 이동평균 위에 있을 때만 신규 진입합니다.

사진: Rafael Minguet Delgado · Pexels (Pexels 라이선스)
3. 매매 규칙까지 정해야 백테스트가 가능하다
종목만 찾아서는 성과를 계산할 수 없습니다. 언제 사고 언제 파는지까지 정해야 과거 데이터로 “이 방법을 1년 동안 썼다면 얼마가 됐을까”를 계산할 수 있습니다. 그래서 다음 규칙을 정했습니다.
- 진입: 신호가 나온 날 이후 5거래일 안에 그날 고가를 돌파하면 매수합니다. 갭상승으로 시작하면 시가에 산 것으로 봅니다.
- 무효: 돌파 전에 신호일 저가를 깨면 감시를 끝냅니다.
- 손절: 신호일 저가를 이탈하면 팝니다.
- 1차 익절: 손절폭의 2배만큼 오르면 절반을 팔고, 나머지의 손절선을 본전으로 올립니다.
- 나머지 청산: 종가가 10일 이동평균 아래로 내려가면 다음 날 시가에 팔고, 최대 40거래일까지만 보유합니다.
- 자금 관리: 최대 3종목, 종목당 자산의 1/3, 1주 단위로만 매수합니다.
4. 데이터는 어디서 받았나 — pykrx와 KRX 정보데이터시스템
한국 주식 시세는 한국거래소(KRX)가 운영하는 정보데이터시스템에서 무료로 볼 수 있습니다. 파이썬에서는 pykrx라는 오픈소스 라이브러리로 이 데이터를 받아올 수 있습니다. 하루 한 번 호출로 그날 전 종목의 시가·고가·저가·종가·거래량을 받을 수 있어서 스크리너에 딱 맞습니다.
- 설치:
pip install -U pykrx pandas - 최근 버전부터는 KRX 정보데이터시스템 무료 회원 로그인 정보를 환경변수로 넣어야 데이터를 받을 수 있습니다.
- 받은 데이터는 날짜별 파일로 저장(캐시)해 두고, 다음 실행부터는 새 거래일만 받도록 했습니다.
사진: hyolee2 · Wikimedia Commons (CC BY-SA 3.0)
여기서 한 번 크게 데였습니다. 10년치를 한꺼번에 받으려고 요청을 쉬지 않고 보냈더니 데이터 제공처에서 접속이 차단된 겁니다. 그 뒤로는 다음 원칙을 지킵니다.
- 요청 사이에 1.5~2.5초 무작위로 쉬기
- 한 번 실행할 때 최대 900건까지만 받기 → 10년치는 며칠에 나눠 받기
- 최신 날짜부터 받고, 중간에 끊겨도 받은 만큼은 저장해 두었다가 이어 받기
- 응답이 빈 채로 계속 오면 차단으로 보고 스스로 멈추기
5. 완성된 1차 스크리너의 모습
처음 버전은 명령 창에서 실행하는 형태였지만, 매일 쓰기 편하도록 더블클릭 한 번으로 실행되는 배치 파일로 바꿨습니다. 결과는 엑셀 파일로 나오고, 다음 내용을 담았습니다.
| 결과 항목 | 내용 |
|---|---|
| 오늘 신호 | 조건을 만족한 종목, 거래량 배수, 등락률, 종가 위치, 바닥권 여부 |
| 진입 대기 목록 | 최근 5거래일 안에 신호가 나온 종목의 돌파가·손절가·목표가 |
| 백테스트 | 최근 1년(기간 지정 가능), 100만 원 기준 기본 조건 vs 강화 조건 성과 비교 |
처음 결과 화면을 봤을 때는 솔직히 설렜습니다. 매일 수십 개 종목이 걸렸고, 차트를 열어 보면 그럴듯한 모양이 많았거든요.

사진: Nemuel Sereti · Pexels (Pexels 라이선스)
6. 그런데, 정말 돈이 될까?
차트를 몇 개 골라 보면 흡수 뒤에 오른 종목이 꼭 눈에 띕니다. 하지만 이건 기억에 남는 사례만 보는 착각일 수 있습니다. 흡수 뒤에 그대로 흘러내린 종목은 차트를 열어 보지도 않으니까요.
그래서 다음 단계로 10년치 실제 데이터 전체에 같은 규칙을 기계적으로 적용해 보기로 했습니다. 결과는 기대와 완전히 달랐습니다. 다음 편에서는 그 불편한 진실과, 패턴 매매가 왜 통하지 않았는지를 숫자로 정리하겠습니다.
정리 — 흡수 거래량 스크리너 핵심 요약
- 핵심 조건: 거래량 ≥ 직전 20일 평균(당일 제외) × 3, 종가 등락률 ±3% 이내
- 품질 필터: 장중 변동폭 6% 이하, 거래대금 10억 원 이상, 거래정지·가격 왜곡·스팩 제외
- 매매 규칙: 5일 안 고가 돌파 진입, 저가 이탈 손절, 2R 절반 익절, 10일선 이탈 청산
- 데이터: pykrx + KRX 정보데이터시스템(무료 회원), 속도 제한과 캐시는 필수
- 다음 과제: 그럴듯한 차트가 아니라 10년 전체 데이터로 검증하기
자주 묻는 질문
Q. 코딩을 몰라도 만들 수 있나요?
저도 전문 개발자가 아닙니다. AI 코딩 도우미에게 조건을 숫자로 정확히 설명하면 코드는 만들어 줍니다. 다만 조건을 정확히 정의하고 결과를 의심하는 일은 사람이 해야 합니다.
Q. 거래량 3배, ±3%는 정답인가요?
아닙니다. 영상에서 본 기준을 출발점으로 삼았을 뿐입니다. 숫자를 바꿔 가며 성적이 좋은 조합을 고르는 순간 과최적화에 빠지는데, 이 이야기는 2편에서 자세히 다룹니다.
“주식 스크리너 만들기 | 거래량 급증 종목 검색 파이썬 개발기 1편”에 대한 7개의 생각