📡 스캔 데이터 누적 현황

2026-06-06 05:01:51 KST  ·  60초 자동 갱신 ← 대시보드 🔍 종목 뷰 📖 API 문서

총 스캔 기록
6,852
stock_data_daily 행 수
20260603 ~ 20260606
누적 스캔일
4
고유 scan_date 수
고유 종목 수
2,145
전체 2,400종목 중 89% 커버
아카이브
주별 0주 · 0행
월별 0개월 · 0행
스캔 사이클 진행
스캔일: 20260606 ⟳ 진행 중
74%
1,777 / 2,400종목  ·  약 3시간 43분 후
배치 #254  ·  7종목/2.5분 → 1사이클 ≈ 14시간
롤링 아카이브 진행
주별
100%
20260525 · 2,400/2,400
월별
100%
2026-05 · 2,400/2,400

🔍 스캔 위치 상세

현재 위치: 인덱스 1,777 / 2,400  ·  배치 #254  ·  예상 완료 약 3시간 43분 후  ·  마지막 갱신: 2026-06-05 19:56 UTC

다음 스캔 배치 (예정)

#티커종목명
1778 051630 진양화학
1779 263920 휴엠앤씨
1780 442310 대신밸런스제14호스팩
1781 103230 에스앤더블류
1782 076080 웰크론한텍
1783 051380 피씨디렉트
1784 052020 에스티큐브

직전 스캔 배치 (완료)

#티커종목명전략NCAV
1771 175330 JB금융지주
1772 002700 신일전자
1773 389470 인벤티지랩 0.02x
1774 007340 DN오토모티브 PER -0.38x
1775 086890 이수앱지스
1776 137080 나래나노텍 N PBR PER RIM 1.38x
1777 106240 파인테크닉스 PBR -0.45x

최근 스캔된 종목 (오늘 · 최대 21개)

티커종목명전략 NCAVPBRPERROE
007340 DN오토모티브 PER -0.38x 1.06 8.58 12.4%
389470 인벤티지랩 0.02x 9.10 -61.52 -14.8%
137080 나래나노텍 NCAV PBR PER RIM 1.38x 0.42 1.23 34.3%
106240 파인테크닉스 PBR -0.45x 0.40 -1.06 -38.0%
012330 현대모비스 0.15x 1.26 17.56 7.2%
065350 신성델타테크 -0.10x 4.48 51.39 8.7%
088390 이녹스 PBR PER RIM -0.48x 0.48 3.59 13.2%
036670 KCI NCAV PBR PER RIM 1.28x 0.47 3.90 12.0%
048470 대동스틸 NCAV PBR 2.07x 0.40 64.67 0.6%
033790 스카이문스테크놀로지 0.04x 4.32 -86.50 -5.0%
098660 에스티오 -0.88x 0.76 -3.63 -20.8%
025980 아난티 -1.46x 0.63 -11.05 -5.7%
009420 한올바이오파마 0.01x 18.18 -546.23 -3.3%
041920 메디아나 0.40x 1.93 49.93 3.9%
080160 모두투어 0.13x 1.78 11.81 15.1%
035150 백산 PER RIM 0.28x 0.81 6.46 12.6%
299480 지앤이헬스케어 0.27x 0.92 -66.33 -1.4%
104620 노랑풍선 -0.13x 1.56 -21.42 -7.3%
036690 코맥스 -0.25x 4.56 -3.02 -150.9%
000990 DB하이텍 0.09x 3.30 30.05 11.0%
002960 한국쉘석유 0.14x 5.13 17.80 28.8%
날짜별 스캔 현황 최근 14일 · stock_data_daily
스캔일전체 NCAV 저PBR 저PER S-RIM
20260606 566 57 182 127 58
20260605 2,090 218 630 513 239
20260604 2,070 207 609 491 237
20260603 2,126 218 628 503 236

📌 데이터 수집 파이프라인

scheduled (* * * * *)
  │
  ├─ min%2===0 && min%10!==0  →  runNcavScanKr()     ← 스캔 슬롯
  │     KIS API: BalanceSheet · IncomeStatement · InquirePrice  (7종목/배치)
  │     └─ computeStrategies()  →  stock_data_daily UPSERT
  │
  ├─ min%5===3  →  runArchiveTick()              ← 아카이브 슬롯
  │     stock_data_daily  →  stock_data_archive  (50종목/tick)
  │     완료 후: 14일 초과 daily 삭제 / 26주 초과 weekly 삭제
  │
  └─ min%5===0  →  MainForKor / MainForUs               ← 트레이딩 슬롯
슬롯 분리: 트레이딩(min%5===0) · 스캔(짝수 분, 10배수 제외) · 아카이브(min%5===3)는 서로 겹치지 않습니다. Cloudflare Workers Free 플랜 cron 제한(CPU 10ms/호출)을 초과하지 않도록 모든 작업이 롤링 방식으로 처리됩니다.

🗄️ DB 스키마 · 전략 조건

stock_data_daily

UNIQUE(ticker, scan_date)
ticker, name, scan_date    TEXT
last_price, market_cap     REAL
current_assets             REAL  -- 유동자산
total_liabilities          REAL  -- 총부채
net_income, per, pbr       REAL
eps, bps                   REAL
ncav_ratio  = (CA - 부채) / 시총
roe         = 순이익 / 자기자본
strategies  TEXT  -- JSON 배열
보존: 14일 · 주별 아카이브 완료 후 초과분 자동 삭제

stock_data_archive

UNIQUE(ticker, period_type, period_label)
period_type   TEXT  -- 'weekly' | 'monthly'
period_label  TEXT  -- YYYYMMDD | YYYY-MM
period_end_date  TEXT  -- 마지막 scan_date
days_scanned  INT   -- 기간 내 스캔된 날 수
-- 나머지 컬럼: stock_data_daily 동일
주별: 26주 보존  ·  월별: 무기한 보존

전략 태그 조건 computeStrategies()

ncav ncav_ratio ≥ 1.0 (유동자산 − 총부채) / 시가총액 ≥ 1
low_pbr 0 < pbr < 0.5 주가순자산비율 0.5 미만
low_per 0 < per < 10 주가수익비율 10 미만
s_rim roe > 0.08 && 0 < pbr < 1.0 ROE 8% 초과 + PBR 1 미만
전략 태그는 스캔 시점에 계산되어 strategies 컬럼에 JSON 배열로 저장됩니다 (예: ["ncav","low_pbr"]). 원시 데이터가 보존되므로 조건 변경 시 UPDATE SQL로 재태깅이 가능합니다.

📦 보존 정책 · 핵심 함수

일별
stock_data_daily
14일
≈ 8 MB
주별
stock_data_archive
26주
≈ 30 MB
월별
stock_data_archive
무기한
+0.7 MB/월
삭제 안전성: 아카이브 UPSERT(멱등) 완료 후에만 오래된 데이터를 삭제합니다. Timeout으로 중단되더라도 다음 tick에 같은 인덱스부터 재시도하므로 데이터 손실이 없습니다. D1 Free 5GB 기준 1년 후 총합 ≈ 50 MB (약 1% 사용).

핵심 함수

scanNcavBatchKr(env, state) 7종목 배치 스캔 · KIS API 3종 호출 → batchCandidates 반환 ncavScanner.js
computeStrategies({...}) 전략 태그 배열 계산 · 순수 함수 (I/O 없음) ncavScanner.js
upsertStockDataToD1(env, candidates, date) 전체 스캔 결과를 stock_data_daily에 batch UPSERT ncavScanner.js
runArchiveTick(env) stock_archive_state 읽기 → 50종목 아카이브 → 완료 시 삭제 ncavScanKr.js
getStocksByStrategyD1(env, strategy, date) json_each(strategies) EXISTS 쿼리로 전략 종목 조회 d1Store.js