클로드코드(Claude Code)로
주식 분석 웹 서비스 만들기
— #4. 주식 분석 기능 만들기
웹 페이지가 완성됐으니 이제 핵심인 분석 기능을 붙일 차례다. RSI, MACD, 볼린저밴드, SuperTrend, ADX 등 8개 지표를 조합한 4가지 전략을 4개 시간봉에 걸쳐 독립 실행하고, 2개 이상 전략에서 동시에 매수 신호가 나온 종목만 추천하는 구조를 Claude Code로 구현했다. 아래에 실제 사용한 프롬프트와 구현 내용을 정리했다.
01 사용한 프롬프트 모음
Claude Code에 아래 프롬프트를 순서대로 입력하면 이 글의 기능 전체를 재현할 수 있다. 각 프롬프트는 독립된 작업 단위로 설계했으며, 이전 결과물이 다음 프롬프트의 컨텍스트가 된다.
# 4가지 기술적 분석 전략 모듈을 Python으로 구현해줘. # 각 전략은 독립적으로 buy/sell/neutral 신호와 0~100 강도를 반환해야 해. # # 전략 1: RSI(14) + MACD(12/26/9) + 볼린저밴드(20, 2σ) 복합 모멘텀 # 전략 2: SuperTrend(10, 3×ATR) + EMA 크로스오버(5 vs 20) 추세 추종 # 전략 3: Stochastic(14,3) + ADX(14) 모멘텀 + 추세 강도 # 전략 4: 볼린저밴드 단독 평균 회귀 # # 입력: OHLCV 캔들 리스트 (최소 30개) # 출력: {"strategy": str, "signal": "buy"|"sell"|"neutral", "strength": int, "details": dict} # Wilder's Smoothing 방식으로 RSI를 구현하고, 각 지표 계산 함수는 별도 분리해줘.
# 60분봉 OHLCV 리스트를 받아 3시간봉과 6시간봉으로 집계하는 함수를 만들어줘. # 집계 규칙: # Open = 그룹 내 첫 캔들 시가 # High = 그룹 내 최고가 # Low = 그룹 내 최저가 # Close = 그룹 내 마지막 캔들 종가 # Volume = 그룹 내 거래량 합산 # 1h → 3h: 3개 묶기 / 1h → 6h: 6개 묶기 # SQLAlchemy 모델(ChartData)에서 바로 읽어 변환까지 처리하는 코드도 포함해줘.
# 종목별 매수 추천 알고리즘을 구현해줘. # 입력: 종목 리스트, 시간봉("1h"|"3h"|"6h"|"1d"), 마켓("KOSPI"|"NASDAQ") # # 처리 흐름: # 1. 종목마다 최근 100개 캔들 로드 (최소 30개 미만 시 건너뜀) # 2. 4개 전략 독립 실행 # 3. buy 신호 개수 카운트, 복합점수 = buy strength 합계 / 4 # 4. buy 전략 2개 이상인 종목만 필터링 # 5. 복합점수 기준 상위 20개 추출 # 결과는 PostgreSQL TechnicalSignal 테이블에 upsert 처리해줘.
# 3가지 랭킹 데이터 교차 분석 추천 로직을 구현해줘. # 조회 순위(30%), 외국인 순매수(40%), 기관 순매수(30%) 가중치로 # 세 카테고리에 모두 등장하는 종목의 복합 점수를 계산하고 Top 10 추출. # 점수 = view_rank × 0.3 + foreign_rank × 0.4 + inst_rank × 0.3 # (순위가 낮을수록 점수가 낮고 = 더 좋은 종목) # 결과는 Recommendation 테이블에 저장하고, FastAPI GET /api/recommend 엔드포인트도 만들어줘.
# APScheduler를 사용해서 아래 주기로 데이터 수집 + 분석을 자동 실행하는 스케줄러를 만들어줘. # - 조회 순위: 60초 # - 외국인/기관 순매수: 300초 # - 60분봉 수집 + 3h/6h 집계: 600초 # - 기술적 분석 추천 갱신: 300초 # - 교차 분석 추천 갱신: 300초 # - NASDAQ yfinance 수집: 3600초 # FastAPI lifespan 이벤트로 앱 시작 시 스케줄러도 함께 시작하도록 설정해줘.
# Next.js 14 App Router + TypeScript + Tailwind CSS로 # 주식 분석 탭 UI를 만들어줘. # # 기능: # - 봉 단위 선택 버튼: 1시간 / 3시간 / 6시간 / 1일 # - KOSPI / NASDAQ 마켓 탭 전환 # - GET /api/technical 호출 → 카드 그리드 표시 (모바일 2열 → 데스크탑 5열) # - 각 카드에 종목명, 현재가, 등락률, 전략 매수 개수(■□ 아이콘), 복합점수 표시 # - 카드 클릭 시 4개 전략 상세 신호/지표값 모달 표시 # - 5분마다 자동 갱신 (setInterval)
02 시스템 구조 개요
이번 편에서 구현한 기능은 크게 세 레이어로 나뉜다. 데이터 수집 → 기술적 분석 → API + UI 순서로 연결된다.
국내 OHLCV + 랭킹
NASDAQ 20종목
= 16 신호/종목
2개+ 전략 필터
| 구분 | 기술 | 역할 |
|---|---|---|
| 백엔드 | Python, FastAPI, SQLAlchemy, APScheduler | 분석 엔진 + API 서버 |
| 프론트엔드 | Next.js 14, TypeScript, Tailwind CSS | 분석 결과 시각화 UI |
| 데이터베이스 | PostgreSQL | 캔들·신호·추천 저장 |
| 국내 데이터 | 키움증권 REST API | KOSPI/KOSDAQ OHLCV + 수급 |
| 해외 데이터 | yfinance (무료, API키 불필요) | NASDAQ 주요 20종목 |
| 알림 | 카카오톡 개인 메시지 API | 매수 추천 알림 |
03 데이터 수집 구조
국내 주식은 키움증권 REST API, NASDAQ은 yfinance로 수집한다. 두 소스 모두 동일한 DB 스키마(ChartData)에 저장되며, 60분봉은 수집 후 즉시 3시간봉·6시간봉으로 집계된다.
일봉 ka10081, 60분봉 ka10080 엔드포인트로 OHLCV 수집. 조회/거래량/외국인/기관 4종 랭킹을 60~300초 주기로 별도 수집.
AAPL, NVDA, MSFT 등 주요 20종목. 일봉(1년) + 시간봉(60일) 1시간마다 갱신. 가격은 정밀도 유지를 위해 ×100 정수 저장.
분봉 집계는 단순하지만 중요한 규칙을 따른다. 캔들을 그룹으로 묶을 때 시가는 첫 캔들, 종가는 마지막 캔들, 고가/저가는 그룹 내 극값, 거래량은 합산으로 처리한다.
# 1시간봉 3개를 묶어 3시간봉 1개 생성
def aggregate_candles(candles: list, n: int) -> list:
result = []
for i in range(0, len(candles) - n + 1, n):
group = candles[i:i+n]
result.append({
"open": group[0]["open"],
"high": max(c["high"] for c in group),
"low": min(c["low"] for c in group),
"close": group[-1]["close"],
"volume": sum(c["volume"] for c in group),
})
return result
04 4가지 기술적 분석 전략
각 전략은 독립 모듈로 구현되며 signal(buy/sell/neutral)과 strength(0~100) 두 값을 반환한다. 점수 기반 가산 방식이라 조건이 많이 충족될수록 강도가 높아진다.
-
전략 1 — RSI + MACD + 볼린저밴드 (모멘텀 복합) RSI 과매도(30 이하 +35점), MACD 골든크로스(+35점), 볼린저밴드 하단 10% 이하(+30점)를 합산. 매수·매도 점수가 각각 40점 이상이면 신호 발생. RSI는 Wilder's Smoothing 방식으로 계산.
-
전략 2 — SuperTrend + EMA 크로스오버 (추세 추종) SuperTrend(10, 3×ATR)로 추세 방향 판단(+40점), EMA5 > EMA20 골든크로스(+30점 + 보너스 +15점). 추세가 전환되는 시점에 추가 점수를 부여해 진입 타이밍을 포착.
-
전략 3 — 스토캐스틱 + ADX (모멘텀 + 추세 강도) 스토캐스틱 %K 20 이하(+40점)에 ADX 필터를 결합. ADX ≥ 20이면 신호를 1.2배 증폭, ADX < 20이면 0.6배 감쇄. 횡보장에서의 거짓 신호를 자동으로 줄여준다.
-
전략 4 — 볼린저밴드 단독 (평균 회귀) 가격이 하단밴드 이하일 때 +50점, 밴드 하위 20% 구간 +35점. 밴드 폭이 3% 미만(변동성 수축)이면 돌파 임박으로 +10점 추가. RSI < 35 보조 확인 시 +15점.
# 첫 14봉: 단순 평균으로 초기화 avg_gain = sum(gains[:14]) / 14 avg_loss = sum(losses[:14]) / 14 # 이후 봉: 지수 평활 (Wilder's method) for i in range(14, len(closes)): avg_gain = (avg_gain * 13 + gains[i]) / 14 avg_loss = (avg_loss * 13 + losses[i]) / 14 rsi = 100 - (100 / (1 + avg_gain / avg_loss))
05 멀티 타임프레임 분석
4개 전략이 4개 시간봉(1h / 3h / 6h / 1d)에서 독립적으로 실행된다. 종목 하나당 총 16개의 신호가 생성되며, 사용자는 원하는 시간봉을 선택해 그 기준의 분석 결과를 볼 수 있다.
| 시간봉 | 의미 | 데이터 소스 |
|---|---|---|
| 1h | 장중 실시간 모멘텀 | 키움 60분봉 직접 수집 |
| 3h | 중기 추세 흐름 | 1h 캔들 3개 집계 |
| 6h | 세션 레벨 패턴 | 1h 캔들 6개 집계 |
| 1d | 장기 추세 확인 | 일봉 직접 수집 |
06 매수 추천 알고리즘
단순히 신호 개수만 세는 것이 아니라 강도(strength)까지 반영한 복합 점수로 종목을 정렬한다.
- 01 최근 100개 캔들 로드 — 최소 30개 미만이면 건너뜀
- 02 4개 전략 독립 실행 → 각각 signal + strength 반환
- 03 buy 신호 개수 카운트. 2개 이상인 종목만 후보 유지
- 04 복합 점수 = (4개 전략 strength 합계) / 4
- 05 복합 점수 기준 상위 20개 추출 → DB upsert
예시: RSI+MACD+BB(75점 buy), SuperTrend+EMA(62점 buy), Stochastic+ADX(neutral), Bollinger(58점 buy)일 경우 → 복합 점수 48.75점, 매수 전략 3개로 추천 대상 확정.
07 교차 분석 추천 (외국인/기관/조회)
기술적 분석과 별도로 운영하는 수급 기반 추천이다. 개인(조회), 외국인, 기관이 동시에 관심 갖는 종목은 상승 확률이 높다는 가설을 수식으로 구현했다.
| 카테고리 | 가중치 | 의미 |
|---|---|---|
| 조회 순위 | 30% | 개인 투자자 관심도 |
| 외국인 순매수 | 40% | 스마트 머니 동향 |
| 기관 순매수 | 30% | 기관 수급 동향 |
# 3가지 랭킹의 교집합 종목만 대상 candidates = view_set ∩ foreign_set ∩ institution_set # 복합 점수 계산 (낮을수록 좋음 — 순위가 낮으면 점수 낮음) score = view_rank × 0.3 + foreign_rank × 0.4 + inst_rank × 0.3 # 점수 오름차순 정렬 → Top 10 추출 result = sorted(candidates, key=lambda x: x.score)[:10]
08 백테스팅 결과
약 1년(250~311 거래일) 동안 NASDAQ 10종목 + KOSPI/KOSDAQ 20종목을 대상으로 4가지 설정을 비교 테스트했다. 진입 조건(몇 개 전략 동시 신호), 목표가, 손절가, 최대 보유일을 달리하며 검증했다.
(3개+ 전략 동시)
평균 수익/거래
1년 누적 수익
| 전략 | 목표가 | 손절가 | 진입조건 | 승률 | 누적수익 |
|---|---|---|---|---|---|
| A (공격적) | +3% | -2% | 2개+ | 47.9% | +247% |
| B (기본) | +5% | -3% | 2개+ | 50.5% | +452% |
| C (보수적) | +7% | -4% | 3개+ | 51.6% | +430% |
| D (타이트 손절) | +5% | -2% | 2개+ | 45.1% | +344% |
09 API 설계
FastAPI 기반으로 3개 핵심 엔드포인트를 구현했다. 응답 구조는 프론트엔드 카드 UI와 1:1로 대응되도록 설계했다.
| 엔드포인트 | 파라미터 | 설명 |
|---|---|---|
| GET /api/technical | interval, market, at | 기술적 분석 매수 추천 Top 20 (전략별 상세 포함) |
| GET /api/technical/{code} | — | 특정 종목의 4전략 × 4시간봉 전체 신호 |
| GET /api/recommend | market | 수급 교차 분석 추천 Top 10 |
스케줄러는 APScheduler로 구동하며 FastAPI의 lifespan 이벤트에 연결해 앱 시작과 동시에 활성화된다. 가장 빠른 작업이 60초, 가장 느린 NASDAQ 수집이 3600초 주기다.
10 프론트엔드 UI
분석 결과는 반응형 카드 그리드로 표시된다. 모바일에서는 2열, 데스크탑에서는 5열로 자동 전환되며 5분마다 자동 갱신된다.
-
봉 단위 선택 버튼 1시간 / 3시간 / 6시간 / 1일 버튼을 클릭하면 해당 시간봉의 분석 결과로 즉시 갱신된다.
-
종목 카드 종목명, 현재가, 등락률, 전략 매수 개수를 ■□ 아이콘으로 시각화, 복합점수 표시. Tailwind
grid-cols-2 lg:grid-cols-5반응형. -
종목 상세 모달 카드 클릭 시 4개 전략 각각의 신호, 강도, RSI·MACD·BB 포지션 등 세부 지표값을 모달로 확인할 수 있다.



이번 편에서는 4가지 기술적 분석 전략(RSI+MACD+BB, SuperTrend+EMA, Stochastic+ADX, 볼린저밴드)을 4개 시간봉에 걸쳐 독립 실행하고, 2개 이상 전략에서 동시에 매수 신호가 나온 종목을 자동 추출하는 시스템을 Claude Code로 구현했다. 약 1년 백테스팅 결과 기본 설정(+5%/−3%, 5일 보유, 2개+ 전략)에서 누적 수익 +452%를 기록했다. 다음 편에서는 카카오톡 알림 연동과 단타 매매 포지션 관리 기능을 다룬다.
'비전공자의 바이브 코딩 > 일상 & 기초' 카테고리의 다른 글
| 클로드코드(Claude Code)로 코인 자동매매 프로그램 만들기 : #1. 계획 수립 및 PRD (0) | 2026.05.16 |
|---|---|
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #5. 카카오톡 연동하기 (1) | 2026.05.05 |
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #3. 웹 페이지 만들기 (0) | 2026.05.04 |
| RAG 완벽 정리 (0) | 2026.05.03 |
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #2. PRD, 개발계획서 작성하기 (0) | 2026.04.25 |