TradeSecretary — Claude 기반 일일 자동매매 비서
단일 LLM이 분석·전략·리서치·체결 4 역할을 순차로 도는 경량 일일 자동매매 비서
배경
별도로 진행 중인 PersonalTrader의 멀티에이전트 LangGraph 아키텍처가 깊어지면서, 개인용으로 쓰기에는 운용 비용과 디버깅 부담이 컸다. 매일 장전·장중·장후 루틴을 가볍게 돌려주는, 단일 LLM이 여러 역할을 순차로 맡는 경량 자동화 비서가 별도로 필요했다. Claude CLI를 서브프로세스로 호출하면 API 키·프롬프트 캐시 관리 없이도 4 역할을 바꿔가며 쓸 수 있다는 점에서 이 구조로 시작했다.
시스템 구조
- 단일 LLM 4 역할:
brain/{analyst, strategist, researcher, trader}가 Claude CLI subprocess를 통해 순차 호출된다. 멀티에이전트가 아니라 한 LLM이 역할만 바꿔 도는 구조. - DailyCycle 오케스트레이터:
scheduler/cycle.py가 하루 사이클(Collecting → Analyzing → Trading → Post-Market)을 주관한다. - 10 테이블 모델: watchlist_items · positions · orders · trade_signals · stock_analyses · news_events · daily_reports · trading_lessons · strategy_memories · daily_risk_states.
- 웹 레이어: FastAPI 라우터 9개(
analysis · cycle · logs · news · orders · positions · reports · settings · watchlist), 16 엔드포인트. 프론트는 Vite + React.
해결 과정
PersonalTrader와의 분리 설계. 멀티에이전트·Kafka·LangGraph 대신 한 LLM이 4 역할을 순차로 수행하는 구조로 가볍게 만들었다. brain/ 하위에 Analyst(분석)·Strategist(전략)·Researcher(리서치)·Trader(체결) 모듈을 두고, llm.py가 Claude CLI subprocess 호출을 공용화한다.
4 역할의 분담. 같은 LLM이지만 프롬프트와 도구 사용 권한을 바꿔가며 4 역할을 도는 구조다.
- Analyst: 기술 지표·재무 데이터·리서치 결과를 받아 종목별
quant_score와 매수/홀드/매도 신호를 도출한다. 외부 도구 없이 LLM 단독으로 판단. - Strategist: 아침 워치리스트 + 진입가 구간·손절가·익절가·확신도를 묶어 일일 트레이드 플랜을 만든다.
- Researcher: WebSearch + WebFetch를 활성화한 Claude CLI로 실적·캐탈리스트·규제·내부자 동향을 능동 조사한다. Analyst와 달리 외부 정보를 적극 끌어온다.
- Trader: 장중 시그널 중재를 담당한다. 손절·익절은 룰 기반(LLM 호출 없음), 확신도 0.8 이상은 즉시 체결, 0.5~0.8은 종목별 5분 throttle을 걸어 LLM에 재검토를 맡기고, 0.5 미만은 폐기한다.
DailyCycle 오케스트레이터. scheduler/cycle.py가 아침 수집 → 분석 → 실시간 트레이딩 → 복기 4 단계를 순서대로 도는 하루 루프를 쥔다. 각 단계는 독립 함수로 분리되어 단계 단위로 재시도·중단이 가능하다.
학습 메모리. trading_lessons · strategy_memories 테이블로 거래 복기 결과를 누적 저장하고, 다음날 Analyst·Strategist 프롬프트에 주입한다. 단일 LLM이 어제의 교훈을 들고 오늘 판단하도록 짧은 피드백 루프를 만든다.
리스크 상태 일별 기록. daily_risk_states가 일 손실 한도·포지션 상한·시장 레짐을 매일 초기화·기록한다. Trader 모듈이 주문 전에 이 테이블을 확인해 당일 추가 매매 여부를 판정한다.
웹 레이어 최소화. 16 엔드포인트 FastAPI + Vite 프론트로 모니터링 UI만 가볍게 구성. 주 목적은 사이클 로그·포지션·리포트 조회이며, 조작 UI는 최소로 유지한다.
성과
- Claude CLI subprocess 기반 단일 LLM 4 역할(Analyst / Strategist / Researcher / Trader) 순차 실행.
- DailyCycle 오케스트레이터로 06:00~15:30 하루 루프(Collecting → Analyzing → Trading → Post-Market) 완전 자동화.
- 10 테이블 SQLAlchemy 모델 + Alembic 마이그레이션, FastAPI 라우터 9개 · 엔드포인트 16개, React + Vite 프론트.
trading_lessons·strategy_memories피드백 루프로 일일 복기 결과를 다음날 프롬프트에 주입.- PersonalTrader(멀티에이전트·Kafka·LangGraph)와 분리된 경량 자동화 비서 라인으로 개인 운용에 최적화.