API나 파이썬 등을 이용해 스스로 스크리닝 시스템을 구축하려면 어떤 데이터와 절차가 필요한가요?
전문가스크리닝·조건검색최종 수정일
스스로 스크리닝 시스템을 구축한다는 것은 결국 ①데이터 수집 → ②저장·정제 → ③지표 계산과 조건 필터링 → ④검증(백테스트) → ⑤운영 자동화라는 파이프라인을 직접 짜는 일입니다. 순서대로 필요한 데이터와 절차를 정리하겠습니다.
먼저 데이터 계층을 세 종류로 나눠 확보해야 합니다. 첫째는 가격·거래 데이터(OHLCV, 시가총액, 거래대금, 상장주식수)로, 한국거래소가 운영하는 KRX 정보데이터시스템(data.krx.co.kr)과 공식 Open API(openapi.krx.co.kr)가 1차 소스이며, 파이썬에서는 pykrx 라이브러리로 전 종목 시세를 손쉽게 DataFrame으로 받을 수 있습니다[2]. 둘째는 재무 데이터로, 금융감독원 전자공시시스템의 Open DART(opendart.fss.or.kr) API를 통해 상장사 정기보고서의 재무제표(매출·영업이익·순이익·자본·부채 등)를 분기 단위로 받아 PER·PBR·ROE·부채비율 같은 밸류·퀄리티 지표를 산출합니다[1]. OpenDartReader, dart-fss 같은 래퍼가 파싱 부담을 줄여줍니다. 셋째는 실시간 시세와 주문 실행이 필요할 때 쓰는 증권사 API로, 한국투자증권 KIS Developers나 키움 REST API가 REST·WebSocket 방식으로 호가·체결과 매매 기능을 제공합니다.
절차를 구체화하면, ①앱키·시크릿키 발급과 인증(대부분 OAuth 토큰 방식)으로 접근 권한을 확보하고, ②상장 종목 리스트를 기준 테이블로 잡은 뒤 가격·재무 데이터를 정기 수집해 CSV나 SQLite·PostgreSQL 같은 DB에 적재합니다. 이때 액면분할·유상증자·배당을 반영한 수정주가 처리, 종목코드 변경·상장폐지·거래정지 종목 처리, 결측치·이상치 보정이 데이터 품질의 핵심입니다. ③pandas로 이동평균·RSI·거래대금 급증 같은 기술적 지표와 밸류·재무 지표를 계산하고, 원하는 조건(예: 시가총액 하한, PBR 상한, 거래대금 하한, 특정 이동평균 정배열)을 불리언 마스크로 결합해 종목을 걸러냅니다. ④여기서 반드시 백테스트로 검증하되, 미래 정보가 과거 시점에 새어드는 lookahead bias와 이미 상장폐지된 종목을 빼고 계산하는 생존편향(survivorship bias), 그리고 과최적화(overfitting)를 경계해야 합니다. 특히 재무 데이터는 공시 시점(발표 지연)을 반영해 '그 시점에 실제로 알 수 있었던' 값만 써야 결과가 왜곡되지 않습니다. ⑤마지막으로 스케줄러(cron, APScheduler 등)로 장 마감 후 배치 수집·스크리닝을 자동화하고, 로깅과 예외 처리로 API 장애나 데이터 누락에 대응합니다.
한계와 주의점도 분명합니다. 무료·스크래핑 기반 소스는 요청 과다 시 서버 차단이나 구조 변경으로 중단될 수 있어 요청 간 지연과 재시도 로직이 필요하고, 각 데이터 제공처의 이용약관·재배포 제한을 확인해야 합니다. 무엇보다 스크리닝은 '후보를 좁혀주는 도구'일 뿐 매매 신호나 수익을 보장하지 않으며, 백테스트 성과가 좋아도 미래 수익으로 이어진다는 보장은 없습니다. 자동 주문까지 연결하는 경우 주문 오류·중복 체결·시스템 장애로 실제 손실이 발생할 수 있으므로 소액·모의투자로 충분히 검증한 뒤 확장하는 것이 안전하며, 모든 투자 판단과 책임은 투자자 본인에게 있습니다.
본 콘텐츠는 일반적 정보·교육 목적이며 특정 종목의 매수·매도 추천이 아닙니다. 세부 조건과 제도는 기관·시점에 따라 다를 수 있으므로 실제 거래 전 해당 기관의 안내를 확인하시기 바랍니다. 투자 판단과 책임은 투자자 본인에게 있습니다.
참고 자료
- 금융감독원 전자공시시스템 Open DART (opendart.fss.or.kr)
- 한국거래소 KRX 정보데이터시스템 / KRX Data Marketplace Open API