
AI 기반 주식 그래프 전략 구축: 섹터 순환매에서 가격 귀속까지
요약
AI 테마 내에서 발생하는 복잡한 자산 순환매와 기업 간의 연관성을 추적하기 위해 LLM을 활용하는 전략을 제안합니다. 개별 기업의 비즈니스 모델과 뉴스, 섹터 분류를 분석하여 AI 주식 그래프를 구축하는 것이 목표입니다.
핵심 포인트
- AI 테마 내 기업들은 서로 밀접하게 연결되어 순환매 양상을 보임
- 수동으로 수백 개 기업의 비즈니스 변화와 가격 연계성을 추적하는 것은 한계가 있음
- LLM을 활용해 기업 비즈니스 이해 및 서브 섹터 분류 자동화 가능
- AI 인프라 체인 내의 가격 이상 징후와 테마 확산을 파악하는 도구로 활용
최근 AI는 믿을 수 없을 정도로 뜨겁습니다.
지난 2년 동안 가장 강력했던 시장 테마는 어떤 방식으로든 AI를 중심으로 돌아갔습니다. NVIDIA, AMD, Broadcom, TSMC, Micron, Microsoft, Google, Meta, CoreWeave, Supermicro... 때때로 이러한 기업 중 하나가 실적(earnings), 주문(orders), 자본 지출(capital expenditure), HBM, GPU, 클라우드 컴퓨팅(cloud computing) 또는 데이터 센터(data centers)와 같은 키워드 덕분에 갑자기 급등하곤 합니다.
더욱 흥미로운 점은 이들이 종종 고립되어 상승하지 않는다는 것입니다.

때로는 NVIDIA가 먼저 움직이면, 시장은 ASICs, 광학 모듈(optical modules), 서버(servers), 액체 냉각(liquid cooling), 그리고 전력(power) 분야를 파고들기 시작합니다. 때로는 Micron이 예상보다 좋은 실적을 발표하면, 자본은 HBM, 메모리(memory), 반도체 장비(semiconductor equipment), 그리고 첨단 패키징(advanced packaging)을 주목하기 시작합니다. 때로는 클라우드 제공업체들이 자본 지출 가이던스를 상향 조정하면, 전체 AI 인프라 체인(AI infrastructure chain)의 가격이 재조정(repriced)됩니다.
이것은 AI 테마 내에서의 자산 순환매(asset rotation)에 더 가깝게 보입니다. 시장은 단순히 주식 하나를 사는 것이 아닙니다. 대신, 하나의 커다란 내러티브(narrative) 아래에서 새로운 가지, 새로운 설명, 그리고 새로운 추격 대상(catch-up targets)을 계속해서 찾아 나섭니다.
여기서 문제가 발생합니다. 만약 이 모든 관계를 수동으로 정리해야 한다면, 그것은 너무나 지치는 일입니다.
한 사람이 NVIDIA, AMD, Micron, Microsoft, Google은 알 수 있겠지만, 수십 또는 수백 개의 전통 금융(TradFi) 주식 계약의 비즈니스 변화, 뉴스 업데이트, 섹터 분류, 그리고 가격 연계성을 지속적으로 추적하는 것은 어렵습니다. 더욱 복잡하게 만드는 것은 많은 기업이 단 하나의 속성만을 가지고 있지 않다는 점입니다. Google은 AI 클라우드, Gemini, 그리고 광고 플랫폼인 동시에 존재합니다. Microsoft는 클라우드, Copilot, 그리고 기업용 소프트웨어입니다. Broadcom은 ASICs, 네트워킹 칩, 그리고 AI 데이터 센터에 대한 노출(exposure)을 모두 가지고 있습니다.
그래서 저는 무언가를 시도해 보기 시작했습니다:
대규모 언어 모델 (LLM)이 AI 주식 그래프를 구축하는 데 도움을 줄 수 있을까요?
목표는 대규모 언어 모델 (LLM)이 무엇을 사야 할지 직접적으로 말하게 하는 것이 아닙니다. 대신, 모델이 더 잘할 수 있는 일, 즉 기업의 비즈니스를 이해하고, AI 서브 섹터 (sub-sectors)를 분류하며, 뉴스를 정리하고, 이벤트를 설명하며, 동일한 테마 내의 어떤 주식들이 한 기업의 가격 이상 징후 (price anomaly)에 영향을 받을 수 있는지 판단하는 일을 수행하게 하는 것입니다. 실제 매매 결정은 여전히 가격, 통계, 그리고 리스크 관리 (risk control)에 맡겨야 합니다.
첫째, 주식을 올바른 바구니에 담기
이 전략의 첫 번째 단계는 매매가 아니라 그래프를 구축하는 것입니다.
현재 거래소에는 꽤 많은 전통 금융 (TradFi) 주식 계약들이 있습니다. 우리는 NVDA, AMD, MU, MSFT, GOOGL, SMCI와 같은 주식 계약 배치를 직접 확보할 수 있습니다. 시스템은 먼저 주식 계약을 필터링하여 실제 주식 (EQUITY) 상품만을 유지합니다.
여기에는 매우 중요한 세부 사항이 하나 있습니다: ETF, 지수 (indices), 그리고 레버리지 ETF (leveraged ETFs)는 섞여서는 안 됩니다. 예를 들어, QQQ, SOXL, EWT 등이 계약 목록에 나타날 수 있지만, 이들은 기업의 주식이 아닙니다. 만약 이들이 AI 주식 바구니에 포함된다면, 이후의 통계적 관계가 오염될 것입니다.
핵심 필터링 로직은 대략 다음과 같습니다:
def refresh_equity_universe(store, force_reanalyze):
ms = exchange.GetMarkets()
symbols = []
...
주식 유니버스 (stock universe)를 확보한 후, 시스템은 대규모 언어 모델 (LLM)에게 각 주식에 대한 프로필 (profile)을 생성하도록 요청합니다.

프로필은 단순히 "이것은 기술주입니다"와 같은 문장이 아닙니다. 대신, 해당 주식이 어떤 AI 하위 섹터 (sub-sectors)에 속하는지를 결정해야 합니다. 예를 들어, 하나의 주식은 동시에 여러 바스켓 (baskets)에 속할 수 있습니다. Google은 AI 클라우드 (AI cloud), AI 모델 애플리케이션 (AI model applications), 그리고 AI 플랫폼 광고 (AI platform advertising)에 모두 속할 수 있습니다. Microsoft는 AI 클라우드와 기업용 AI 애플리케이션 (enterprise AI applications)에 속할 수 있습니다. NVIDIA는 AI 컴퓨팅 파워 (AI computing power)와 AI 서버 (AI servers)에 속할 수 있습니다. Micron은 AI 메모리 (AI memory)에 속할 수 있습니다.
이 단계의 핵심은 다음과 같습니다: AI 시대에 주식은 단일 레이블 (single-label) 자산이 아닙니다. 이들은 멀티 레이블 (multi-label) 자산입니다.
각 주식은 여러 속성을 가집니다: 어떤 바스켓에 속하는지, 노출도 (exposure)가 얼마나 높은지, 해당 바스켓에서 리더 (leader)에 가까운지 아니면 팔로워 (follower)에 가까운지, 어떤 기업이 해당 주식에 영향을 미칠 수 있는지, 그리고 해당 주식이 어떤 기업에 영향을 미칠 수 있는지 등입니다.
저는 대규모 언어 모델 (LLM)에게 강력하게 제약된 출력 구조를 부여했습니다:
schema = {
"symbol": symbol,
"asset_type": "stock|adr|etf|leveraged_etf|index|fund|other",
...
여기서 가장 중요한 필드는 asset_type입니다. 오직 주식 (stock)과 ADR (adr)만이 바스켓에 들어갈 수 있습니다. ETF, 레버리지 ETF (leveraged ETFs), 지수 (indices), 펀드 (funds), 원자재 (commodities), 그리고 지역별 ETF (regional ETFs)는 직접 필터링되어 제외됩니다.
또한, reason은 중국어로 작성되어야 하며, 필드 이름은 일관되게 유지되어야 하고, 신뢰도 (confidence)는 0에서 100 사이의 범위로 정규화 (normalized)되어야 합니다. 그렇지 않으면 나중에 실시간 트레이딩 대시보드 (live trading dashboard)가 매우 지저분해 보일 것입니다.
섹터 정보는 추측에 의존할 수 없다
주식 분류만으로는 충분하지 않습니다.
AI 섹터는 너무 빠르게 변합니다. 오늘은 시장이 GPU에 대해 투기할 수 있습니다. 내일은 HBM으로 이동할 수 있습니다. 그다음 날은 광모듈 (optical modules)로 이동할 수 있습니다. 며칠 후에는 액체 냉각 (liquid cooling), 전력 (power), 또는 클라우드 제공업체의 자본 지출 (capital expenditure) 거래가 시작될 수도 있습니다.
시스템이 대규모 언어 모델 (LLM) 자체의 지식에만 의존한다면, 정보가 쉽게 낙후될 수 있습니다. 따라서 시스템에는 실시간 정보원 (real-time information source)도 필요합니다.
여기서는 BraveSearch를 연결했습니다. 시스템은 각 AI 바스켓 (basket)에 대한 섹터 정보를 주기적으로 검색하며, 각 바스켓 내부의 주요 종목에 대한 뉴스도 검색합니다.
예를 들어, AI 메모리 바스켓은 Micron, Western Digital, SanDisk, HBM, DRAM, NAND와 같은 키워드를 살펴봅니다. AI 광통신 바스켓은 Ciena, Credo, Lumentum, AAOI, 800G, 1.6T 광모듈 (optical modules)과 같은 정보를 살펴봅니다.
바스켓 인텔리전스 (basket intelligence)를 위한 핵심 프로세스는 다음과 같습니다:
def refresh_basket_intelligence(store):
if not BRAVE_KEY:
return
...
이 단계의 역할은 각 AI 서브 섹터 (sub-sector)를 위한 동적인 배경을 구축하는 것입니다.
BraveSearch를 통해 가져온 뉴스를 바탕으로, 대규모 언어 모델 (LLM)은 섹터 트렌드 (sector trend), 핵심 촉매제 (core catalysts), 핵심 리스크 (core risks), 후보 대장주 (candidate leaders), 후보 추종주 (candidate followers), 그리고 나중에 검증이 필요한 관계들을 출력합니다.
이는 대규모 언어 모델 (LLM)에게 직접 “AI 메모리에 대해 어떻게 생각하니?”라고 묻는 것과는 다릅니다. 여기서는 먼저 실시간 뉴스를 입력값으로 제공한 다음, 이를 요약하도록 합니다.
이것은 뉴스 기반 매매가 아닙니다; 가격 이상 징후가 먼저입니다
예를 들어, 어떤 기업이 예상치를 상회하는 실적을 발표하면, 시스템이 대규모 언어 모델 (LLM)에게 어떤 종목이 수혜를 입을지 묻고, 그 후 직접 신호를 생성하는 방식입니다. 하지만 신중하게 고민해 본 결과, 이 경로는 노이즈 (noise)가 매우 심합니다. 뉴스가 너무 많습니다. 많은 뉴스 항목이 중요해 보이지만, 시장은 전혀 신경 쓰지 않는 경우가 많습니다.
그래서 저는 로직을 뒤집었습니다.
먼저 가격을 보고, 그다음 뉴스를 보는 것입니다.
바스켓(basket) 내의 모든 주식이 상대적으로 안정적이라면, 시스템은 관찰만 수행합니다. 오직 하나의 주식이 바스켓의 평균 성과에서 명확하게 벗어나 현재의 리더(leader)가 되었을 때만 시스템은 다음과 같은 질문을 던집니다.
왜 움직였는가?
이 단계에서는 바스켓 내부의 Z-Score (ZScore)를 사용합니다.
간단히 말해, 특정 주식이 동일한 바스켓 내의 다른 주식들과 비교했을 때 비정상적으로 강세인지 또는 비정상적으로 약세인지를 확인하는 것입니다. 만약 동일한 바스켓 내의 다른 주식들은 아직 반응하지 않았는데 특정 주식 하나가 갑자기 돌파(breakout)한다면, 확산(diffusion)의 기회가 있을 수 있습니다.
바스켓 Z-Score (ZScore)를 계산하는 핵심 로직은 다음과 같습니다:
def calc_basket_zscores(store, symbols):
returns = {}
min_len = 999999
...
바스켓의 최대 편차가 돌파 임계값(breakout threshold)을 초과하면, 시스템은 BREAKOUT_DETECTED 상태로 진입합니다.
이 시점에서 시스템은 즉시 거래를 수행하지 않습니다. 대신, 그 원인을 찾기 시작합니다.
뉴스는 설명을 담당하고, 통계적 관계는 검증을 담당한다
리더가 가격 돌파를 보여준 후, 시스템은 해당 주식의 최신 뉴스를 가져온 다음 거대 언어 모델 (Large Language Model, LLM)에게 이 뉴스가 가격 이상 현상을 설명할 수 있는지 판단하도록 요청합니다.
하지만 이것은 단순히 "이 뉴스가 강세(bullish)인가요?"라고 묻는 것이 아닙니다.
시스템은 현재의 바스켓, 섹터 인텔리전스 (sector intelligence), 실시간 가격 상태, 리더의 Z-Score (ZScore), 후보 팔로워 (candidate followers), 이미 검증된 통계적 관계, 그리고 BraveSearch를 통해 가져온 뉴스를 거대 언어 모델 (LLM)에 함께 전달합니다.
거대 언어 모델 (LLM)은 다음 사항에 답해야 합니다:
(1) 이 뉴스가 리더의 가격 이상 현상을 설명할 수 있는가.
(2) 뉴스의 방향이 가격의 방향과 일치하는가.
(3) 거래가 허용되는가.
(4) 어떤 팔로워 (followers)들이 영향을 받는가.
(5) 각 팔로워 (followers)에게 미치는 영향의 크기는 어느 정도인가.
(6) 왜 이 팔로워 (followers)들이 영향을 받을 수 있는가.
핵심 귀속 (attribution) 로직은 다음과 같습니다:
def explain_breakout_with_news(store, bid, leader, direction, leader_z, followers, edges):
if not BRAVE_KEY:
return None
...
하지만 대규모 언어 모델 (Large Language Model, LLM)이 특정 팔로워 (follower)가 영향을 받을 수 있다고 말하더라도, 시스템이 즉시 거래를 실행할 수는 없습니다.
K-선 (K-line) 통계적 관계를 확인하는 과정이 추가로 필요합니다.
각 바스켓 (basket) 내부에서 시스템은 주식 간의 역사적 연관성 (linkages)을 계산합니다. 예를 들어: 소스 (source)가 돌파 (breakout)한 후, 타겟 (target)이 자주 따라가는가? 상관관계 (correlation)는 어떠한가? 최적의 시차 (lag period)는 얼마인가? 평균적인 후속 수익률 (follow-up return)은 얼마인가? 등을 분석합니다.
통계적 필터 (statistical filter)를 통과한 '소스 $\rightarrow$ 타겟' 관계만이 활성 엣지 (active edge)가 됩니다.
def rebuild_basket_stats(store):
edges = []
...
이 단계는 매우 중요합니다.
대규모 언어 모델 (LLM)은 논리를 이해하는 데 능숙하지만, 시장이 반드시 논리에 따라 움직이는 것은 아닙니다. 통계적 관계는 이러한 논리가 과거에 실제로 시장에서 거래되었는지를 검증하는 데 사용됩니다.
이 전략은 추격 매수가 아닌 확산 (Diffusion)을 거래한다
이 전략은 리더 (leader)를 추격하도록 설계되지 않았습니다.
리더는 이미 돌파했습니다. 만약 우리가 그것을 직접 매수한다면, 그것은 쉽게 고점 추격 매수 (chasing at a high price)가 될 수 있습니다. 이 전략이 진정으로 포착하고자 하는 것은 동일한 AI 바스켓 (AI basket) 내부의 확산 (diffusion) 기회입니다.
다시 말해: 리더는 이미 움직였고 뉴스는 타당하지만, 일부 팔로워 (followers)들은 아직 완전히 반응하지 않은 상태를 찾는 것입니다. 만약 이 팔로워들이 역사적으로 리더와 연관성을 보여왔다면, 단기적인 후속 기회가 있을 수 있습니다.
돌파 스캐닝 (breakout scanning) 과정에서 시스템은 먼저 활성 엣지 (active edges)를 찾은 다음, 뒤처진 팔로워 (lagging followers)를 찾습니다:
def scan_price_breakouts(store):
for bid, rt in store["realtime"].items():
if rt["state"] != "BREAKOUT_DETECTED":
...
뉴스 귀속 (news attribution) 단계까지 통과해야만 시스템은 확정된 신호 (confirmed signal)를 생성합니다.
주요 거래 대상은 팔로워 (followers)입니다.
현재 포지션이 없는 경우, 시스템은 신호 방향에 따라 포지션을 오픈합니다. 동일한 계약에 대해 이미 동일한 방향의 포지션이 있는 경우, 포지션을 추가합니다 (add to the position). 만약 반대 방향의 포지션이 이미 있는 경우에는, 먼저 해당 포지션을 종료한 후 새로운 방향으로 새로운 포지션을 오픈합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
