주말 동안 Claude Code를 공동 개발자로 활용하여 무료 Bloomberg 스타일 주식 분석기를 만들었습니다
요약
개인 트레이더가 기존 시장 분석 도구의 높은 진입 장벽과 복잡성 문제점을 해결하기 위해, Streamlit Community Cloud를 활용하여 무료 오픈 소스 S&P 500 기술적 분석 앱 'StockIQ'를 개발했습니다. 이 앱은 실시간 시장 스냅샷부터 다양한 지표 기반 예측 및 종목 스크리닝 기능까지 총 10개의 페이지로 구성되어 있습니다. 특히, 개발 과정에서 Claude Code를 페어 프로그래밍 파트너로 활용하여 복잡한 기술적 지표 계산 로직과 Streamlit 앱의 반복적인 골격(boilerplate) 코드를 신속하게 구현하는 데 큰 도움을 받았다고 설명합니다.
핵심 포인트
- StockIQ는 유료 결제 장벽이 없는 무료 오픈 소스 S&P 500 기술 분석 애플리케이션입니다.
- 앱은 SPY 실시간 스냅샷, 갭 테이블, MA/RSI/Fibonacci 기반의 대화형 차트 등 총 10가지 전문적인 트레이딩 기능을 제공합니다.
- 개발 과정에서 Claude Code를 활용하여 복잡한 지표 계산 로직(Indicator math)과 Streamlit 앱의 반복적인 구조 코드 작성을 효율적으로 처리했습니다.
- 기술 스택은 yfinance, pandas, plotly, anthropic SDK 등을 사용하며, 배포는 Streamlit Community Cloud에 이루어졌습니다.
저는 활발하게 활동하는 개인 트레이더(retail trader)입니다. 그리고 수년 동안 동일한 문제로 짜증이 났습니다. 모든 좋은 기술적 분석(technical analysis) 도구는 유료 결제 장벽이 있거나, 브로커리지 UI 뒤에 갇혀 있거나, 혹은 저처럼 월 300달러를 내지 않고 한 차트에서 RSI, 이동 평균(moving averages), Fibonacci 레벨을 보고 싶은 사람이 아닌 기관들을 위해 만들어져 있었습니다. 그래서 저는 저만의 것을 만들었습니다. StockIQ를 소개합니다 — Streamlit Community Cloud에 배포된 무료 오픈 소스(open-source) S&P 500 기술적 분석 앱입니다. 로그인도 필요 없고, 유료 결제 장벽도 없으며, 군더더기도 없습니다. 그리고 반전은, 제가 거의 모든 것을 Claude Code를 페어 프로그래밍(pair-programming) 파트너로 삼아 만들었다는 점입니다.
StockIQ가 하는 일
이 앱은 10개의 페이지로 구성되어 있으며, 각 페이지는 트레이더로서 제가 실제로 던지는 질문에 답합니다:
SPY Live — 실시간 SPY 가격과 SPX, Nasdaq, Dow, Russell 2000, VIX를 포함하는 시장 스냅샷을 제공합니다. 제가 매일 아침 가장 먼저 여는 페이지입니다.
SPY Gap Table — 제가 가장 좋아하는 기능 중 하나입니다. 지난 30일 동안의 모든 SPY 일일 갭(gap)을 표로 정리하고 세션 중 실시간 채워짐(fill) 상태를 보여줍니다. 갭은 채워지는 경향이 있습니다. 이 페이지는 그 우위(edge)를 실제로 실행 가능한 무언가로 바꿔줍니다.
Stock Analyzer — 앱의 핵심입니다. MA5/20/50/100/200, 주간 MA200, RSI, Fibonacci 되돌림(retracement) 레벨, 7가지 자동 감지 캔들스틱 반전 패턴(candlestick reversal patterns), 골든/데드 크로스(Golden/Death Cross) 마커, 그리고 종합 신호 점수(composite signal score)를 포함하는 모든 S&P 500 티커(ticker)를 위한 대화형 Plotly 차트입니다.
AI Forecast — Claude 기반의 SPY 10일 방향성 예측입니다. 앱은 최근의 다중 지표 컨텍스트(multi-indicator context)를 Anthropic SDK를 통해 Claude에 전달하고 논리적인 예측을 요청합니다. 저는 이것을 수정구슬이 아닌 '제2의 의견'으로 정의하지만, 모든 지표가 하나의 서사로 합성되는 것은 진정으로 유용합니다.
Weekly/Monthly Screener — 캔들스틱 패턴 강도에 따라 상위 50개의 S&P 500 종목을 순위 매깁니다.
Bounce Radar — 현재 200일 이동 평균선(moving average)의 5% 이내에 있는 주식들을 보여줍니다. 전형적인 평균 회귀(mean-reversion) 설정 필터입니다.
Squeeze Scanner — 높은 RSI와 높은 공매도 잔고(short interest)를 결합합니다. 고위험 고수익(high-risk, high-reward) 설정입니다.
Strong Buy / Strong Sell — 애널리스트 컨센서스(analyst consensus) 데이터에 의해 구동됩니다.
Munger Watchlist — 높은 ROE(자기자본이익률), 건전한 마진, 낮은 부채를 보유하고 있으며 200주 이동평균선(MA) 근처에서 거래되는 우량 기업들입니다. 장기 복리 성장주(long-term compounder) 필터입니다.
기술 스택:
- 시장 데이터: yfinance + pandas
- 모든 차트: plotly
- AI 예측 페이지: anthropic SDK
- 배포: Streamlit Community Cloud (무료 티어, 문제 없음)
의도적으로 단순하게 만들었습니다. 데이터베이스 없음. 인증 레이어(auth layer) 없음. 유지 관리할 인프라 없음. Python 앱으로 실행되며 Streamlit이 나머지 모든 것을 처리합니다.
Claude Code와 함께 구축하기: 실제로 일어난 일
이 부분은 솔직하게 말씀드리고 싶습니다. 왜냐하면 경험이 시작 전 기대했던 것과는 달랐기 때문입니다.
Claude Code가 진정으로 뛰어난 점:
- 지표 수학 (Indicator math): RSI 계산, 피보나치 레벨(Fibonacci level) 생성, 이동평균선(moving average) 로직, 캔들스틱 패턴(candlestick pattern) 탐지 — 이 모든 것은 잘 알려진 공식적인 코드입니다. Claude Code는 이를 빠르고 정확하게 처리합니다. 구현 세부 사항에 대해 전혀 고민할 필요가 없었습니다. 저는 그저 원하는 것을 설명하고 결과물을 검토하기만 하면 되었습니다.
- 상용구 및 연결 (Boilerplate and wiring): 모든 Stream streamlit 앱은 페이지 설정(page config), 사이드바(sidebar), 세션 상태(session state), 캐싱 데코레이터(caching decorators), 레이아웃 컬럼(layout columns)과 같은 동일한 골격을 가집니다. Claude Code는 이 모든 것을 즉시 작성합니다. 그것만으로도 10페이지 분량의 앱을 만드는 동안 수 시간을 절약했습니다.
- 컨텍스트를 활용한 디버깅 (Debugging with context): 무언가 고장 났을 때, 에러 메시지와 관련 코드를 붙여넣으면 몇 초 만에 진단을 받을 수 있었습니다. 첫 번째 시도에 항상 맞지는 않았지만, 보통 두 번째 시도에는 맞았습니다.
제가 직접 주도권을 잡아야 했던 부분:
- 아키텍처 결정 (Architecture decisions): 10페이지 규모의 Streamlit 앱이 스파게티 코드가 되지 않도록 구조를 어떻게 잡을 것인가. 어떤 페이지들이 서로 묶여야 하는가. 무엇을 공유 유틸리티 모듈(shared utility module)에 넣고 무엇을 페이지 파일에 넣을 것인가. Claude Code가 답을 제시하긴 하지만, 그것이 항상 당신이 원하는 답은 아닙니다. 저는 여러 번 반박하고 방향을 다시 지시해야 했습니다.
- UX 결정 (The UX calls): 장중에 이 화면을 훑어보는 트레이더에게 적절한 정보 밀도는 어느 정도인가? 주식 분석기(Stock Analyzer) 페이지에서 적절한 시각적 계층 구조(visual hierarchy)는 무엇인가?
이것들은 판단(judgment calls)의 영역이며, Claude Code는 여러 옵션을 프로토타이핑(prototype)할 수는 있지만, 어떤 것이 사용자에게 올바른 선택인지 알려줄 수는 없습니다. 신호 해석(Signal interpretation). 주식 분석기(Stock Analyzer) 페이지의 종합 신호 점수(composite signal score)를 구현하려면 실제적인 결정을 내려야 했습니다. RSI에 얼마만큼의 가중치를 둘 것인가, 아니면 이동평균선(MA) 위치나 패턴 강도에 비해 어느 정도를 줄 것인가? Claude Code는 이에 답할 수 없었습니다. 그것은 엔지니어링 지식이 아니라 트레이딩(trading) 지식이기 때문입니다. 데이터 레이어의 주의사항(Data layer gotchas). yfinance에는 이를 다뤄보지 않은 사람을 당황하게 만드는 미묘한 동작들이 있습니다. 속도 제한(rate limits), 티커 상장 폐지(ticker delisting)의 예외 사례, 장중 데이터(intraday data)의 시간대(timezone) 처리 등이 그것입니다. Claude Code는 일반적인 패턴은 알고 있었지만, 제가 맞닥뜨린 구체적인 주의사항을 항상 인지하고 있지는 않았습니다. 이 중 일부는 제가 직접 조사해야 했습니다. 정립된 멘탈 모델(The mental model that stuck). 프로젝트가 끝날 무렵, 저는 적절하다고 느껴지는 프레임워크(framing)를 갖게 되었습니다. '아키텍처(architecture)와 취향(taste)은 내가 소유한다. Claude Code는 타이핑 속도를 가속화할 뿐이다.' 그것이 전부입니다. 만약 Claude Code가 모든 결정을 내릴 것이라고 생각하며 AI 보조 빌드(AI-assisted build)에 임한다면, 당신은 평범한 앱을 얻게 될 것입니다. 반대로 당신이 무엇을 왜 만드는지에 대한 강력한 의견을 가지고, Claude Code를 그 의견을 더 빠르게 실행하는 도구로 사용한다면, 당신의 사고가 실제로 반영된 결과물을 출시하게 될 것입니다. 다르게 했을 몇 가지 사항들(A Few Things I'd Do Differently). 적절한 페이지 구조부터 시작하기. 저는 올바른 접근 방식을 찾기 전까지 멀티 페이지 레이아웃을 두 번이나 리팩터링(refactor)했습니다. 초기에 계획을 조금 더 세웠더라면 시간을 아낄 수 있었을 것입니다. 첫날부터 더 공격적으로 캐싱(cache)하기. 이와 같이 데이터 집약적인 앱에서는 Streamlit의 @st.cache_data 데코레이터(decorator)가 가장 큰 도움이 됩니다. 저는 캐싱을 점진적으로 추가했지만, 처음부터 구축했어야 했습니다. AI 페이지를 마지막에 만들기. 저는 Claude 예측 기능에 흥분하여 이를 초기에 만들었습니다. 하지만 유용한 방향성 예측(directional forecast)을 위한 프롬프트 엔지니어링(prompt engineering)에는 반복적인 작업(iteration)이 필요했으며, 앱의 나머지 부분이 안정된 후에 반복 작업을 수행하는 것이 더 쉬웠을 것입니다. 직접 써보기, 포크하기(Try It, Fork It). 앱은 stpicker.streamlit.app 에서 라이브 상태이며, 계정 없이 완전히 무료로 이용할 수 있습니다.
직접 포크(fork)하거나, 로컬에서 실행하거나, 다른 시장 또는 자산군(asset class)에 맞게 수정하고 싶다면 전체 소스 코드는 GitHub에 있습니다. 만약 전체적인 그림을 그리기 위해 여러 도구를 짜깁기해 온 개인 투자자(retail trader)라면, 저는 바로 당신을 위해 이것을 만들었습니다. 그리고 AI 코딩 에이전트(AI coding agent)와 함께 실제 앱을 출시하는 것이 실제로 어떤 느낌인지 궁금한 개발자라면, 위의 솔직한 기록이 도움이 되기를 바랍니다. 즐거운 트레이딩 되세요. 📈 Python, Streamlit, 그리고 Claude Code로 제작되었습니다. 오픈 소스이며, 영원히 무료입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기