모든 글

내 계좌를 읽고, AI 전문가들이 토론한다: 주식 분석 에이전트 구축기

주식을 보유하고 있으면 장이 끝난 뒤에도 생각이 멈추지 않는다.

주식을 보유하고 있으면 장이 끝난 뒤에도 생각이 멈추지 않는다.

오늘 하락은 단순한 조정일까, 추세가 꺾인 신호일까? 좋은 실적이 발표됐는데 주가는 왜 빠졌을까? 지금 추가 매수해야 할까, 그냥 지켜봐야 할까? 뉴스와 커뮤니티의 반응은 정말 의미가 있는 걸까?

문제는 이 질문에 답하려면 너무 많은 화면을 오가야 한다는 점이었다. 계좌 앱에서 보유 수량을 확인하고, 차트를 열어 기술 지표를 보고, 뉴스를 검색한 다음, 시장 지수와 커뮤니티 반응까지 살펴봐야 했다. 그렇게 자료를 모아도 마지막 판단은 그날의 기분과 기억에 영향을 받기 쉬웠다.

그래서 내가 실제로 보유한 종목을 기준으로 자료를 모으고, 서로 다른 관점을 가진 AI 전문가들이 의견을 낸 뒤, 다음 거래일의 행동 후보까지 정리해 주는 개인용 주식 분석 에이전트를 만들기 시작했다.

이 글은 코드 설명보다는 다음 세 가지 질문을 중심으로 정리한 구축 기록이다.

  • 분석 버튼을 누르면 뒤에서 어떤 일이 일어나는가?
  • 여러 AI 전문가를 둔 이유는 무엇인가?
  • 오늘의 판단을 왜 다음 날까지 저장해야 하는가?

내가 원한 것은 단순한 상승·하락 예측이 아니었다

처음에는 종목명과 최근 차트를 AI에게 주고 “내일 오를까?”라고 물으면 충분할 것 같았다. 하지만 상승 가능성 60% 같은 숫자만으로는 실제 행동을 결정하기 어려웠다.

내가 궁금했던 것은 숫자 뒤의 맥락이었다.

차트는 상승을 가리키지만 시장 전체가 위험 회피 국면이라면 어떻게 봐야 할까?

기업의 장기 전망은 좋지만 단기 기대가 과열됐다면 지금 들어가도 될까?

이미 보유한 종목이라면 신규 진입 종목과 같은 결론을 내려도 될까?

그래서 이 시스템의 목표를 “주가를 맞히는 모델”이 아니라 여러 근거를 한곳에 모으고, 충돌하는 관점을 비교한 뒤, 사람이 판단하기 좋은 형태로 정리하는 연구 도구로 잡았다.

Analyze를 누르면 어떤 일이 일어날까?

stock-agent-architecture-overview

전체 흐름은 크게 세 단계로 나뉜다.

1. 내 계좌와 시장에서 근거를 모은다

먼저 Toss 계좌에서 현재 보유 종목과 평가금액을 읽는다. 계좌 연결은 조회 전용이며, 이 시스템이 직접 주문을 실행하지는 않는다.

분석할 종목이 정해지면 가격과 거래량, 기업 정보, 뉴스, 소셜 반응, 시장 분위기를 함께 가져온다.

  • Toss Account: 내가 실제로 보유하고 있는지, 포지션 규모가 어느 정도인지 확인한다.
  • Yahoo Finance: 최근 가격, 거래량, 기업 성장성과 밸류에이션을 확인한다.
  • Finnhub News: 최근 기업 뉴스와 촉매를 수집한다.
  • Social Media: Stocktwits와 Reddit 등에서 투자자 반응을 살펴본다.
  • Market & Risk: SPY, QQQ와 함께 비트코인·이더리움 흐름을 보고 시장의 위험 선호도를 판단한다.

뉴스는 제목만 모아 세는 방식으로 끝내지 않는다. 가능한 기사에는 직접 접근해 본문 일부를 함께 읽도록 했다. 물론 유료 기사나 접근이 차단된 페이지는 읽지 못할 수 있다. 이때는 마치 충분히 읽은 것처럼 행동하지 않고, 본문 수집에 실패했다는 사실을 결과에 남긴다.

여러 출처에서 가져온 정보는 하나의 연구 자료로 정리된다. 출처와 링크, 작성 시점도 함께 보관해 나중에 어떤 근거가 판단에 사용됐는지 확인할 수 있다.

2. 다섯 명의 AI 전문가가 같은 자료를 다르게 읽는다

모든 자료를 하나의 AI에게 주는 대신 다섯 가지 역할로 나눴다.

  • 기술적 분석가는 추세, 모멘텀, 변동성, 지지와 저항을 본다.
  • 기본적 분석가는 성장성, 수익성, 밸류에이션과 기업 촉매를 본다.
  • 심리 분석가는 뉴스 본문과 소셜 반응 속 기대, 공포, 과열을 본다.
  • 시장 분석가는 개별 종목보다 큰 시장의 위험 선호와 업종 흐름을 본다.
  • 리스크 담당자는 계좌 집중도, 높은 변동성, 데이터 부족과 반대 시나리오를 찾는다.

이렇게 역할을 나눈 이유는 확증 편향을 줄이기 위해서다. 좋은 실적은 기본적 분석가에게 강한 상승 근거가 될 수 있지만, 리스크 담당자는 이미 기대가 가격에 반영됐거나 변동성이 지나치게 커졌다고 볼 수 있다.

각 전문가는 자신의 결론만 말하지 않는다. 판단의 근거, 반대 근거, 어떤 상황에서 자신의 결론이 틀렸다고 인정할지도 함께 작성한다.

현재 버전의 조정자는 이 의견들을 비교해 한쪽 의견이 충분히 우세할 때만 상승 또는 하락 방향을 선택한다. 의견이 팽팽하면 억지로 결론을 만들지 않고 중립으로 둔다. 아직 전문가들이 서로의 문장을 읽고 여러 차례 재반박하는 완전한 토론까지 구현한 것은 아니며, 지금은 독립 전문가 패널과 보수적인 종합 판단에 가깝다.

3. 예측을 실제 행동 언어로 바꾼다

사용자에게 필요한 것은 bearish라는 단어 하나가 아니다. 그래서 최종 단계에서는 전망과 현재 보유 여부를 함께 보고 다음 거래일에 검토할 행동으로 번역한다.

  • 미보유 종목의 상승 근거가 강하면 WATCH FOR ENTRY
  • 보유 종목의 상승 근거가 강하면 HOLD / ADD REVIEW
  • 미보유 종목의 하락 근거가 강하면 AVOID NEW BUY
  • 보유 종목의 하락 근거가 강하면 HOLD DEFENSIVELY 또는 SELL / STOP REVIEW
  • 판단이 애매하면 WATCH 또는 HOLD

이 문구들은 자동 주문이 아니다. 장 시작 전 새로운 뉴스와 지수 움직임을 다시 확인하고, 사람이 최종 결정을 내리기 위한 출발점이다.

결과는 한 화면에서 보고, 근거는 별도 보고서에서 읽는다

매일 사용하는 도구인 만큼 분석 흐름을 브라우저에서 볼 수 있는 React 대시보드를 만들었다.

stock-agent-dashboard-demo

대시보드에서는 현재 보유 종목을 고르거나 검색으로 다른 종목을 찾은 뒤 분석을 실행할 수 있다. 계좌, 시장, 뉴스, 소셜, 전문가 판단 중 어느 단계까지 진행됐는지도 화면에서 확인할 수 있다.

분석이 끝나면 최종 방향과 행동 제안, 기술 분석 요약, 전문가별 의견, 과거 판단 이력이 함께 나타난다. 빠르게 확인할 때는 이 화면만 봐도 된다.

하지만 매수나 매도를 고민할 때 짧은 요약만으로는 부족하다. 그래서 각 실행마다 별도의 Markdown 보고서도 생성한다.

stock-agent-markdown-report

보고서에는 다음 내용이 담긴다.

  • 한글로 정리한 핵심 결론과 체크리스트
  • 기술적 분석의 상승 근거와 하락 근거
  • 기업의 성장성과 밸류에이션
  • 시장의 위험 선호 상태
  • 전문가별 주장, 반대 근거와 무효화 조건
  • 판단에 사용된 뉴스와 소셜 원문 링크

대시보드가 현재 상태를 빠르게 파악하는 공간이라면, Markdown 보고서는 판단의 이유를 천천히 검토하는 공간이다.

판단 이력을 저장하는 것이 핵심인 이유

이 프로젝트에서 가장 중요하게 생각한 기능은 예측 자체보다 Judgment History다.

오늘 AI가 상승이라고 판단했는데 내일 주가가 하락했다면, 단순히 “이번에는 틀렸네”라고 넘기고 싶지 않았다. 당시 어떤 뉴스가 있었는지, 기술 분석과 시장 분석이 어떻게 충돌했는지, 리스크 경고를 무시하지는 않았는지 다시 확인할 수 있어야 했다.

stock-agent-feedback-loop

분석 결과는 로컬 SQLite에 저장된다. 다음 거래일 데이터가 생기면 실제 종가 방향과 예측을 비교해 맞음, 틀림, 중립으로 기록한다. 이후에는 해당 실행의 전문가 의견과 근거를 다시 열어볼 수 있다.

이력이 쌓이면 다음과 같은 질문에 답할 수 있다.

  • 상승장에서는 잘 맞지만 위험 회피 장에서는 계속 틀리는가?
  • 특정 종목이나 섹터에서 지나치게 낙관적인가?
  • 뉴스 심리를 과대평가하고 있지는 않은가?
  • 높은 확신을 보인 판단이 실제로도 더 정확했는가?

결국 좋은 에이전트는 한 번의 멋진 답변을 만드는 시스템이 아니라, 자신의 판단을 기억하고 다음 판단을 개선할 수 있는 시스템이라고 생각한다.

보유 종목이 아닌 새로운 후보도 찾을 수 있게 했다

처음에는 내 계좌에 있는 종목만 분석했다. 사용하다 보니 자연스럽게 “지금 시장에서 많이 눌렸지만 반등 가능성이 있는 종목은 무엇일까?”라는 질문이 생겼다.

그래서 두 가지 기능을 추가했다.

첫 번째는 종목 검색이다. 회사명이나 티커를 검색해 보유하지 않은 종목도 같은 분석 과정을 실행할 수 있다.

두 번째는 Market Scout다. 반도체, IT·소프트웨어, 바이오·헬스케어 섹터를 나눠 최근 하락 폭, 모멘텀, 기업 정보와 뉴스를 살펴보고 눌림목 반등 후보, 관찰 후보, 낮은 우선순위로 정리한다.

Market Scout의 결과 역시 추천 주문이 아니라 조사할 후보를 좁히는 필터다. 관심 후보를 찾으면 다시 전문가 분석을 실행해 더 자세한 근거를 확인한다. 스캔 결과도 날짜별로 저장하기 때문에 나중에 당시의 후보가 실제로 어떻게 움직였는지 비교할 수 있다.

만들면서 중요하다고 느낀 세 가지 선택

계산과 해석을 분리했다

RSI, MACD, 이동평균, 변동성처럼 공식이 정해진 값은 일반 코드가 계산한다. AI는 계산된 결과를 해석한다. 이렇게 해야 같은 데이터에서 같은 지표가 나오고, AI가 그럴듯한 숫자를 만들어 내는 문제를 줄일 수 있다.

AI가 실패해도 분석이 완전히 멈추지 않게 했다

뉴스 API가 실패하거나 로컬 AI가 올바른 형식으로 답하지 못할 수 있다. 하나의 소스가 실패했다고 전체 분석을 버리지 않고, 가능한 정보만으로 계속 진행하되 무엇이 부족했는지를 경고로 남긴다.

빠른 규칙 기반 분석과 로컬 Codex·Hermes 분석 모드를 선택할 수 있게 만든 이유도 같다. 상황에 따라 속도, 깊이, 안정성 사이에서 선택할 수 있다.

주문 기능은 의도적으로 넣지 않았다

이 시스템은 실제 계좌를 읽지만 주문을 내리지는 않는다. 좋은 도구는 사용자의 판단을 돕는 데서 멈춰야 한다고 생각했다. 특히 다음 날 방향처럼 불확실성이 큰 문제에서는 마지막 승인 과정을 없애는 것이 자동화가 아니라 위험의 확대가 될 수 있다.

아직 해결해야 할 것들

이 에이전트가 시장을 예언하는 것은 아니다. 여러 불완전한 정보를 더 일관된 방식으로 검토하도록 돕는 도구에 가깝다.

무료 시세와 뉴스 데이터는 지연되거나 누락될 수 있고, 일부 기사 본문은 읽지 못한다. 소셜 미디어에는 유용한 정보와 잡음이 함께 존재한다. 계좌의 현재가와 시장 데이터의 기준 시각이 다르면 가격이 어긋날 수도 있다.

전문가 토론도 아직 발전시킬 부분이 많다. 다음 버전에서는 상승 측과 하락 측이 서로의 핵심 근거를 직접 반박하고, 그 반론을 본 뒤 각 전문가가 확신도를 다시 조정하게 만들 계획이다.

또한 판단 이력이 충분히 쌓이면 단순 적중률뿐 아니라 시장 국면별 성능과 확신도의 신뢰성을 보여주는 회고 대시보드를 만들고 싶다. 그래야 “AI가 자신 있게 말했는가”가 아니라 “자신 있게 말한 판단이 실제로 더 정확했는가”를 확인할 수 있다.

마치며

이 프로젝트를 시작할 때는 내일 오를 종목을 찾아주는 AI를 상상했다. 만들면서 더 중요하다고 느낀 것은 예측 결과보다 판단 과정이었다.

어떤 정보를 봤는지, 서로 다른 전문가가 왜 충돌했는지, 어떤 위험을 놓쳤는지, 다음 날 실제 결과가 어땠는지를 남길 수 있어야 한다. 그래야 한 번의 그럴듯한 답변이 반복 가능한 투자 연구 과정으로 바뀐다.

지금의 Stock Research Agent는 완성된 투자 시스템이 아니다. 하지만 매일 흩어진 화면과 감에 의존하던 판단을, 수집하고 비교하고 기록하고 회고하는 하나의 흐름으로 바꿨다.

내게는 그 변화가 단순한 주가 예측보다 훨씬 의미 있는 결과였다.

이 글과 시스템은 개인적인 연구 기록이며 투자 권유가 아니다. 모든 매매 결정과 책임은 사용자 본인에게 있다.

END
Discussion

이 글에 대한 생각을 남겨주세요.

GitHub 계정으로 로그인하면 댓글과 반응을 남길 수 있습니다.