콘텐츠로 이동

Momentum

거래일마다 한 번, 확인되었고 가속 중인 상승 추세에 있는 종목을 시장에서 걸러내는 내부 리서치 도구입니다. 중국 기술적 트레이더들이 「主升浪(주된 상승 파동)」이라 부르는 형태를 대상으로 합니다. 이 페이지는 알고리즘 전체 — 모든 시그널, 모든 수식, 모든 가중치 — 를 기록합니다.

서술적 스크리닝이며 투자 조언이 아닙니다

이 스크리너는 운영자 전용 실험 기능으로, 일반 StockClaw 앱의 일부가 아닙니다. 후보 선정은 일봉 OHLCV 데이터 위에서 순수하게 결정론적인 알고리즘으로 이루어지며, LLM은 선정 이후 서술적 해설만 작성할 뿐 종목을 추가·제거·선택할 수 없습니다. 출력은 알고리즘 스크리닝 결과로 정보 제공 목적이며 투자 조언이 아닙니다.

아키텍처: 엄격히 분리된 3계층

계층 역할 금지 사항
1. 퀀트 스크린 일봉 데이터 위의 결정론적 시그널 계산. 같은 입력 → 항상 같은 출력. 이 계층 어디에도 LLM 없음.
2. LLM 해설 퀀트 계층이 이미 고른 각 후보에 2–4문장 설명(중국어+영어) 작성. 종목 선택·제외·재정렬·날조 불가, 숫자 수정 불가. 후보 외 종목 언급이나 조언성 표현("recommend", "买点" 등)이 있으면 전체 거부되고 지표만 표시로 폴백.
3. 스냅샷 일일 결과 캐시, Top 5 요약을 운영자 Telegram으로 전송.

유니버스

현재 프로덕션 유니버스는 S&P 500 ∪ Nasdaq 100(중복 제거 후 약 518개 종목)을 핵심으로 하고, 지수 밖 종목을 담는 수동 관리 워치리스트를 더합니다. Momentum Discovery는 더 넓게 grouped-daily DuckDB 일봉 테이블에서 충분한 이력, 최소 가격, 보통주에 가까운 심볼 형태, 최소 달러 유동성을 만족하는 종목을 읽고 자체 확장 유니버스 수를 표시합니다.

일봉 데이터는 거래일마다 한 번의 grouped-daily 일괄 요청(한 번의 호출로 미국 시장 전체 커버)으로 받아 DuckDB에 저장합니다. 종목별로 최근 120거래일을 평가하며, 이력이 65거래일 미만인 종목은 제외됩니다.

키가 필요 없는 공개 소스 두 가지가 컨텍스트를 제공합니다(점수에는 절대 반영되지 않음): FINRA 일일 Reg SHO 파일은 종목별 장외(TRF)·공매도 거래량을 제공하며 off_exchange_share_20d, short_vol_ratio_20d로 표시됩니다(미 동부 저녁 발표라 항상 T+1). CBOE의 VIX 히스토리는 마켓 서머리 계층에서 사용합니다.

무제한(유료) 시세 플랜에서는 점수 밖 컨텍스트 열 두 개가 추가됩니다: close_vs_vwap_pct(일봉의 거래량가중평균가 대비 종가 위치)와 late_day_volume_share(정규장 마지막 30분에 거래된 거래량 비중, 후보별 1분봉에서 산출 — 기관은 체결을 마감 구간에 집중시킵니다). 스로틀 플랜에서는 두 열이 그냥 생략됩니다.

FMP Premium과 Unusual Whales는 설정된 경우 기술 점수 계산 이후 메인 리더보드에 상한이 있는 유료 데이터 확인 보너스를 더할 수 있습니다. 이 보너스는 거래량 게이트를 거치며, 확장 행에 내역이 표시됩니다.

여섯 가지 시그널

모든 윈도우는 거래일 기준, 모든 가격은 수정 종가입니다. "MAₙ"은 n일 단순이동평균.

1. 이동평균 정배열 (均线多头排列) — 불리언

close > MA20 > MA50   그리고   MA20 > MA20[-5]   그리고   MA50 > MA50[-5]

상승 중인 MA20 위에 가격이 있고, 그 MA20이 상승 중인 MA50 위에 있어야 합니다("[-5]"는 5거래일 전 값). 하락 추세 속 반등을 걸러냅니다.

2. 박스권 돌파 신고가 (平台突破创新高) — 불리언

최근 5거래일 중 어느 날 d의 종가가 d 이전 60거래일의 모든 종가보다 높으면 참 — 박스권 상단을 뚫고 60일 신고가를 기록했다는 뜻입니다. 조건을 만족한 첫 거래일이 아래 거래량 검증의 기준점이 됩니다.

3. 거래량 확인 (放量确认) — 연속 비율

vol_surge = mean(돌파일 이후 거래량)
          ÷ mean(돌파일 이전 20거래일 거래량)

돌파가 없으면 "최근 거래량 ÷ 직전 20일 평균"으로 대체. 비율 ≥ 1.5× 면 확인 성립. 기관을 포함한 실제 자금이 움직이는지를 스크리너가 직접 읽는 수치입니다: 확신 있는 매수는 반드시 장내 거래량 확대로 나타납니다.

4. 기울기 가속 (斜率加速) — 연속 비율

"가속하는 主升浪"의 핵심 정량 정의:

accel = OLS_slope(최근 5일 종가) ÷ OLS_slope(최근 20일 종가)
        (두 기울기 모두 > 0 필요, 아니면 accel = 0)

두 기울기는 종가를 거래일 인덱스에 회귀한 최소제곱 기울기입니다. 비율 > 1.5 는 최근 1주의 상승이 최근 1개월보다 뚜렷이 빠르다는 뜻 — 추세가 이어지는 게 아니라 가팔라지고 있다는 의미입니다.

5. 시장 대비 상대강도 (相对强度) — 연속값

RS = (close ÷ close[-20] − 1) − (SPY ÷ SPY[-20] − 1)

종목의 20거래일 수익률에서 SPY 수익률을 뺀 값. 양의 RS는 지수를 앞선다는 것 — 베타가 아닌 주도력을 뜻합니다.

6. 기관 매집 흔적 프록시 — 연속값, 게이트 포함

이 단계에는 13F나 자금 흐름 피드가 없으므로, 확신 있는 매수가 일봉에 남기는 흔적을 읽습니다 — 두 성분이 동시에 성립해야 합니다:

up_vol_share = Σ 상승일 거래량 ÷ Σ 총 거래량          (최근 20거래일)
A/D 게이트:   A/D 라인(cumsum((2C−H−L)/(H−L) × V))의
              20거래일 회귀 기울기가 > 0 이어야 함

accumulation = A/D 기울기가 양수이면 up_vol_share, 아니면 0

0.5는 거래량이 상승일과 하락일에 대칭이라는 뜻이며, 지속적으로 그 위라면 거래량이 상승일에 집중된다는 것 — 고전적인 「조용한 매집」 패턴입니다. A/D 게이트는 종가가 계속 일중 저가 부근에서 끝나는 시리즈를 걸러냅니다.

시그널에서 0–100 점수로

각 시그널을 [0, 1] 서브스코어로 매핑한 뒤 가중 합산합니다:

시그널 서브스코어 매핑 가중치
MA 정배열 참=1, 거짓=0 18
돌파 신고가 참=1, 거짓=0 22
거래량 clip((비율 − 1) / (3 − 1), 0, 1) — 평균 이하 0점, 3×에서 만점 18
기울기 가속 두 기울기 양수일 때 clip(비율 / 1.5, 0, 1), 아니면 0 — 임계값 1.5에서 만점 18
상대강도 RS > 0일 때 clip(RS / 0.10, 0, 1), 아니면 0 — SPY +10pp에서 만점 14
매집 clip((비중 − 0.50) / (0.65 − 0.50), 0, 1) — 대칭 비중 0점, 0.65에서 만점 10
technical_score = 18·s_MA + 22·s_BO + 18·s_VOL + 18·s_ACC + 14·s_RS + 10·s_INST   ∈ [0, 100]

기술 점수는 감사 가능한 기본 점수입니다. 메인 페이지는 이후 최종 score로 순위를 매깁니다. 이 값에는 상한이 있는 FMP/UW 확인 보너스와, 거래량 확인이 없는 신고가 돌파에 대한 거래량 페널티가 포함될 수 있습니다.

계산 예시 — MRNA, 2026-07-06 종가 (실제 스냅샷 데이터)

시그널 실측 서브스코어 × 가중치
MA 정배열 종가 81.80 > MA20 60.16 > MA50 53.18, 두 MA 상승 1.0 18.00
돌파 60일 신고가(고점과의 거리 0.0%) 1.0 22.00
거래량 1.455× (1.455−1)/2 = 0.2275 4.10
기울기 가속 5일 3.39 / 20일 1.75 → 1.935× 1.935/1.5 → 상한 1.0 18.00
상대강도 20일간 SPY 대비 +59.3pp 0.593/0.10 → 상한 1.0 14.00
매집 상승일 거래량 비중 0.810, A/D 기울기 양수 (0.810−0.50)/0.15 → 상한 1.0 10.00
합계 86.09

"왜 그 인기 종목이 리스트에 없나요?"

이유는 둘뿐이며, 거의 항상 두 번째입니다:

  1. 유니버스 밖. S&P 500 ∪ Nasdaq 100 ∪ 워치리스트만 스크리닝합니다. 그 외 종목은 워치리스트에 추가해야 합니다.
  2. 지금 이 순간 主升浪에 있지 않음. 미디어의 화제성과 기술적 형태는 별개입니다. 2026-07-08 스냅샷의 실제 사례: LITE(Lumentum) — 화제성 높은 광학/AI 종목이고 유니버스에 포함되어 있음에도 그날 점수는 0.0: 종가 731은 MA20(851)과 MA50(895) 아래, 60일 고점 대비 −30.6%, 20일 수익률 −22.6%, 거래량 비율 0.66×, SPY 대비 −21.9pp. 다섯 시그널 전부 불성립. 깊은 조정 중인 인기 종목이야말로 이 스크리너가 설계상 배제해야 할 대상입니다. 다시 바닥을 다지고 거래량을 동반해 돌파하면 자연히 리스트로 돌아옵니다.

스크리너가 의도적으로 "보지 않는" 것

  • 무제한 펀더멘털 — 실적, 밸류에이션, 가이던스, 애널리스트 맥락은 훼손된 기술 구조를 대체할 수 없습니다.
  • 원시 뉴스와 심리 — 일반 헤드라인과 소셜 화제성은 종목을 고르지 않습니다. 정규화된 명확한 촉매만 맥락이 됩니다.
  • 독립 자금흐름 선별 — FMP와 Unusual Whales는 기술적으로 타당한 후보를 확인할 수 있지만, 리더보드는 가격/거래량 우선입니다. 유료 데이터는 상한과 거래량 게이트가 있으며 설명 가능한 서브스코어로 표시됩니다.
  • 장중 시세 — 일봉 종가만 사용, 미국장 마감 후 하루 한 번 스냅샷 생성.

임계값은 엔지니어링 기본값이며 검증된 최적값이 아닙니다

위의 모든 상수(60일 돌파 윈도우, 1.5× 거래량 배수, 1.5 가속 임계값, 각 가중치…)는 일원 관리되는 합리적 초깃값일 뿐 백테스트 최적화는 미완료입니다. 랭킹은 차트에서 직접 확인해야 할 후보 목록으로 다루고, 결론으로 다루지 마세요.

뉴스 촉매, 섹터 공명, 거래량 품질

프로덕션 스크리너는 의도적으로 가격과 거래량을 우선합니다. v3 확인 계층도 이 규율을 유지합니다: 결정론적 technical_score는 첫 후보 진입 게이트와 히스토리컬 검증 기준으로 남기고, 촉매, 같은 테마/업종의 동반 참여, 거래량 품질, FMP, Unusual Whales 플로우 확인을 설명합니다.

추가되는 선택 필드는 다섯 가지입니다:

필드 의미 경계
catalyst_context 신선한 뉴스/이벤트 맥락: 촉매 유형, 신선도, 소스 수, 신뢰도, 짧은 근거 요약. 헤드라인만으로 기술적으로 무너진 종목을 Top 20에 넣을 수 없습니다.
sector_resonance 같은 테마/업종이 함께 움직이는지: 피어 폭, 리더, 상대강도, Top20 확인 여부. 섹터 로테이션을 세분화할 뿐, 개별 종목 시그널을 대체하지 않습니다.
volume_quality 참여도가 개선되는지: 1일 거래량비와 5일/20일 기준, 상승일 거래량 추세, 돌파 참여 품질, 장중 데이터가 있을 때의 마감 전 확인. 장중 데이터가 없으면 맥락 없음으로 표시하고, 음수 점수로 처리하지 않습니다.
trade_character 설명용 거래 성격: 대형 기관형, 고베타 성장, 표준 모멘텀. 초기 아님, 고점 근접, 밸류에이션 높음, 낮은/높은 변동성, 연장 등의 플래그를 포함합니다. 거래 성격 설명일 뿐 추천이나 새 편입 조건이 아닙니다.
paid_confirmation FMP와 Unusual Whales 확인. fmp_confirmation, flow_confirmation, 상한이 있는 bonus, volume_factor, volume_penalty를 포함합니다. 유료 맥락은 기술 게이트와 거래량 게이트 이후에만 최종 순위에 영향을 줍니다.
report_score 표시용 혼합 점수. 기술 점수, 명확한 촉매, 공명, 거래량 개선, 거래 성격 품질을 사용하며 선택 컨텍스트가 빠지면 재정규화합니다. 기술 점수는 감사와 리플레이를 위해 유지됩니다.

뉴스 촉매는 momentum_screener/ 안에 새 뉴스 크롤러를 만들기보다 StockClaw의 기존 ingestion / signal 데이터를 가능한 한 재사용합니다. 이벤트는 실적/가이던스, 애널리스트, 제품, 정책/규제, M&A, AI 설비투자/공급망, 섹터 매크로, 기타로 정규화됩니다. 일반적인 routine_news/other는 뉴스 열기로 표시하고 촉매로 표시하지 않으며, report_score의 촉매 성분에도 들어가지 않습니다. 섹터 공명도 넓은 대분류보다 세부 테마를 우선해, 기술주는 cybersecurity, AI 네트워킹/광학, 반도체 장비 같은 버킷으로 최대한 분류합니다. 거래 성격은 AAPL/MSFT 같은 안정적인 대형 기관 추세와 LITE/ALAB/FTNT 같은 고베타 성장 움직임을 분리해 기관형, 고점 근접, 초기 아님, 낮은 탄력, 밸류에이션 민감도 등을 설명하되 원래 기술 점수는 바꾸지 않습니다. LLM은 이 정규화된 사실만 요약할 수 있으며, 종목 선택, 숫자 변경, 입력 밖 티커 언급, 조언성 표현은 계속 금지됩니다.

데일리 리서치 노트

2026-07부터 스크리너는 「사실 먼저, 언어 나중」 순서로 완전한 일일 노트를 생성합니다:

  1. 결정론적 집계 계층(LLM 미사용): 마켓 개요(SPY/QQQ/DIA는 자체 일봉, VIX는 CBOE, 전체 시장 등락 종목 수), Top 20 섹터 구성, 리스트 통계(신고가 수, 거래량 확인 돌파 비율, 거래량비 중앙값, 평균 가속, 이격도와 ATR), 모멘텀 상태 라벨, 6장의 인사이트 카드, 종목별 리포트 필드(등급, 이격도, 형태, 리더 플래그) — 전부 screener_config.py의 고정 룰 테이블입니다.
  2. 히스토리컬 검증 — 실제 리플레이이며 약속이 아닙니다. 프로덕션 임계값으로 최근 30거래일을 일일 리플레이하고(퀀트 계층만) 실제 이후 흐름과 대조합니다: 종목별 5일 선행 수익률(승률·평균·대 SPY 초과), 일일 리밸런싱 Top 5 바스켓(누적 수익률·최대 낙폭). 동일 가중, 종가 대 종가, 비용 없음. 승률과 함께 손익 구조(평균 이익/평균 손실, 손익비, 건당 기대값)와 같은 윈도우에서의 벤치마크 자체 상승 확률도 보고합니다 — 모멘텀의 우위는 비대칭 손익에서 나오므로, 동전 던지기 수준에 가까운 승률 자체는 결론이 되지 않습니다. 이 통계는 과거 행동의 기술이며 예측이 아닙니다.
  3. 언어 계층: LLM이 마켓 서머리, 종목별 해설(집계와 전일 리스트 비교를 문맥으로 왜 오늘인가/무엇이 변했나/무엇이 독특한가에 답변), 일일 총평을 작성 — 모두 동일한 기계 검증 계약(조언성 표현 금지, 리스트 외 종목 금지; 위반 시 결정론적 템플릿으로 폴백) 하에 있습니다.
  4. 모멘텀 라이프사이클 분류: 각 후보는 우선순위 룰 캐스케이드로 초기 돌파 / 확인된 모멘텀 / 연장 모멘텀 / 소진 리스크로 분류됩니다(임계값은 screener_config.py: 먼저 소진 — 진행된 데다 거래량 감쇠·가속 평탄화 등 쇠약 확인 동반; 다음 초기 — 신고가, 20일 상승<12%, MA20 대비 이격<6%, Top20 진입 3일 이내, 가능한 경우 거래량 확인; 다음 연장; 확인된 모멘텀이 기본 중간). setup_stagebreakout_confirmed 또는 post_breakout_follow_through이면 과도하게 연장되지 않은 경우 초기 분류를 보조할 수 있습니다. 이력 입력은 불변의 report_history 테이블에서 옵니다.
  5. 초기 모멘텀 레이더:early_setupbreakout_watch는 Top20에 제한하지 않고 전체 평가 유니버스를 스캔합니다. Early Setup은 5일/10일 가속, 60일 고점 근접, 거래량 개선, 압축 후 확장, RS 개선, 세부 테마 공명을 중시합니다. Breakout Watch는 60일 고점 대비 -3%~0%, MA20/MA50 정렬, 5일 거래량 개선, 같은 테마 내 선행 피어를 요구합니다. 뉴스는 명확한 이벤트로 정규화된 경우에만 촉매로 표시하며 routine news는 촉매로 승격하지 않습니다. 전체 일일 리포트는 /momentum에 유지하고, 초기 후보에 집중하는 Early Momentum Radar는 /momentum/early 전용 페이지로 관리자 dashboard에서 열 수 있습니다. MOMENTUM_FUNDAMENTALS_PROVIDER=fmpFMP_API_KEY가 설정되면 초기 모델은 완화된 기술 후보에 대해 FMP Premium의 주식 뉴스/보도자료, 실적 캘린더, 애널리스트 등급, 목표가 컨센서스, 내부자 거래 통계, 기관 보유/13F 요약, 재무 성장 데이터를 가져옵니다. 이 값은 FMP 확인 서브스코어로 정규화되어 임계값 근처의 Early Setup / Breakout Watch 후보를 끌어올릴 수 있습니다. 미설정 또는 API 실패 시 기존 가격/거래량 모델로 자동 전환됩니다. /momentum/early 각 행은 fmp_confirmation, news_event_score, earnings_event_score, analyst_revision_score, price_target_score, insider_score, institutional_flow_score, fundamental_quality_score 전체 FMP 내역을 표시합니다. FMP 데이터가 없는 행도 같은 필드를 자리표시자로 보여주고 가능한 경우 unavailable 이유를 함께 표시합니다. UNUSUAL_WHALES_API_KEY가 설정되면 최근 options flow, dark-pool trades, lit-flow trades, options pulse 기반의 플로우 확인 계층도 추가되어 flow_confirmation, options_flow_quality, darkpool_accumulation, lit_flow_quality, dealer_pressure, flow_resonance로 정규화됩니다. 이는 주식 초기 모멘텀 연구용이며 옵션 매매 추천 계층이 아닙니다. FMP와 Unusual Whales는 endpoint 단위 best effort로 동작합니다. 일부 endpoint 실패는 partial_query_failed로 표시되고 성공한 같은 계층의 endpoint는 계속 서브스코어에 반영됩니다. 모든 endpoint가 실패한 경우에만 query_failed가 됩니다.

초기 레이더는 더 세밀한 setup_stage도 출력합니다: 베이스 형성, 변동성 수축, 돌파 준비, 돌파 시도, 돌파 확인, 돌파 후 추세 지속, 돌파 실패, 과도한 연장, 셋업 없음. 여기서 돌파 확인은 더 이상 “60일 고점 근접”에서 추론하지 않고, 명확한 베이스 피벗, 돌파 버퍼, 종가 안착, 거래량 확인, 종가 위치 같은 증거를 요구합니다. 각 행은 피벗 가격, 피벗까지 거리, 돌파 거래량비, 추세 점수, 촉매 점수, 돌파 품질, 데이터 완전성, 긍정/부정 reason code, 무효 조건을 표시합니다. FMP 또는 Unusual Whales의 partial_query_failed는 데이터 품질 객체에 반영되며, 실패한 컴포넌트는 unavailable/null로 표시되고 실제 0점처럼 평균에 들어가지 않습니다.

각 초기 행에는 entry_timing_profile도 포함되어 이미 발생한 상승을 앞으로 발생할 초기 기회와 혼동하지 않게 합니다. 분류는 early_setup, catalyst_repricing, confirmed_breakout, extended_chase_risk, pullback_preferred이며 20일 상승률, 60일 고점과의 거리, MA20 이격, 거래량 스파이크, 메가캡/기관형 성격, 명확한 촉매를 사용합니다. 편입과 표시 순서는 모두 타이밍 조정 점수로 정하며 raw score에서 timing/profile 감점을 뺍니다. 촉매 후 재평가와 추격 리스크 행은 조정 점수가 부족하면 Early Setup 기준을 통과하지 못하고, 통과하더라도 진짜 초기 셋업 뒤에 배치됩니다. UI와 Telegram에는 타이밍 조정 점수만 표시합니다.

Telegram은 먼저 전체 Momentum 일일 인텔리전스 메시지를 보내고, 초기 후보가 있으면 별도의 Early Momentum Radar 메시지를 추가로 보냅니다. 초기 메시지는 /momentum/early 행을 확장해 레이더 점수, 기술 점수, FMP 확인, Unusual Whales 플로우 확인, partial-data 이유, 가능한 리플레이 맥락을 표시합니다. 메인 일일 리포트는 Telegram 길이 제한을 피하기 위해 간단한 초기 요약만 유지합니다. 6. Momentum Discovery: /momentum/discovery는 같은 스냅샷의 discovery_screens를 읽어 유동성 돌파, 초기 베이스 돌파, 높은 FMP/UW 확인, 저품질 필터 행으로 나눕니다. 확장 bars 유니버스를 사용하지만 메인 Top 20은 계속 curated core universe에 남습니다. FMP/UW는 상한이 있는 Discovery 기술 후보에만 다시 조회하고, 모든 backfilled symbol에 호출하지 않습니다. 7. 인접 스크린: 같은 평가 결과 위의 4가지 임계값 변형(부상 모멘텀, 돌파 근접, 추세 내 눌림, RS 선도·미돌파), 완전히 결정론적.

LLM 계층의 하드 계약

해설 모델은 스크리닝된 후보와 실측값 받아 후보마다 중국어와 영어 설명을 반환합니다. 출력은 기계 검증됩니다:

  • 후보 리스트 밖 종목 코드 언급 → 거부.
  • 조언성 표현(推荐 / 建议买入 / 买点 / 必涨 / recommend / buy signal / price target / …) → 거부.
  • 거래량 형용사가 실측치와 모순되는 경우(예: 0.99×인데 "거래량 급증") → 거부(수치-서술 일관성, 규칙은 VOLUME_CLAIM_RULES)。
  • 거부되거나 파싱 불가한 출력은 1회 재시도, 재실패 시 해당 후보는 정량 지표만 표시.

UI에 표시되는 숫자는 항상 퀀트 계층에서 나오며, LLM에서 나오는 일은 없습니다.


본 콘텐츠는 공개 시장 데이터에 기반한 알고리즘 스크리닝 결과와 서술적 설명으로, 정보 제공 목적일 뿐 투자 조언을 구성하지 않습니다.