Communitygithub.com

jwd2a/skills

Justin의 주식 포트폴리오를 분석하고 S&P 500(SPY)과 벤치마킹합니다.

skills란 무엇인가요?

이 스킬은 Justin의 개인 주식 포트폴리오를 분석하고 S&P 500(SPY) 지수와 벤치마킹하는 종합적인 포트폴리오 분석 도구입니다. 포트폴리오 관리, 변동성 분석, 상관관계 행렬, Sortino 비율, 분산 점수, 성장 비교 등 다양한 금융 분석 기능을 제공합니다. Fidelity CSV 파일에서 포트폴리오 데이터를 불러오거나 AlphaVantage 및 Finnhub를 통해 실시간 및 과거 데이터를 가져올 수 있습니다. 주요 기능으로는 포트폴리오 분석, 트레일링 스탑 모니터링(베타 조정 변동성 기반), 다양한 주기(일간/주간/월간/분기/연간) 보고서 생성, 모멘텀 스크리너(Yahoo Finance 데이터 기반), 회전 트래커(매수/매도 기록 및 성과 추적) 등이 포함되어 있습니다. 이 스킬은 Python 스크립트 형태로 제공되며, CLI 명령줄 인자를 통해 유연하게 설정할 수 있습니다. JSON 파일로 포트폴리오 데이터를 저장 및 불러오며, Slack 형식의 출력을 지원하여 팀과 쉽게 공유할 수 있습니다. 무료 API 사용량 제한(예: AlphaVantage 분당 5회)을 고려하여 요청 간 3초 지연을 적용하는 등 실용적인 설계가 특징입니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jwd2a/skills/tree/HEAD/portfolio

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

포트폴리오 분석 스킬

Justin의 주식 포트폴리오를 분석하고 S&P 500(SPY)과 벤치마킹합니다.

파일

  • portfolio.py — 포지션 관리용 포트폴리오 클래스
  • analyze.py — 분석 엔진 (변동성, 상관관계, Sortino, 분산도, 성장)
  • prices.py — 가격 조회 모듈

사용법

Fidelity CSV에서 포트폴리오 업데이트

from portfolio import Portfolio
p = Portfolio()
p.load_from_fidelity_csv("/path/to/export.csv")
p.save()

분석 실행

python analyze.py                    # 90일 기본값
python analyze.py --days 180         # 사용자 지정 기간
python analyze.py --json portfolio.json --days 60

출력

Slack 형식 텍스트:

  • 개별 포지션 및 포트폴리오 변동성 (연간화)
  • 상관관계 행렬
  • 분산 점수
  • Sortino 비율 (무위험 수익률 0%)
  • SPY 벤치마크 대비 성장

트레일링 스탑 모니터

trailing_stops.py — 각 포지션에 대한 베타 조정 변동성 기반 트레일링 스탑.

작동 방식

  • 30일 롤링 연간 변동성 및 SPY에 대한 베타 계산
  • 포지션별 트레일링 고가 추적
  • 조정 하락률 계산 = 고점 대비 순 하락률 − (베타 × SPY 고점 대비 하락률)
  • 조정 하락률이 일일 변동성의 1.5배를 2거래일 연속 초과하면 경고
  • 상태는 stops_state.json에 저장됨

사용법

python trailing_stops.py --status          # 모든 포지션의 현재 레벨 표시
python trailing_stops.py --check           # 일일 모니터링 (위반 시 경고 발생)

출력

  • --status: 현재 가격, 트레일링 고가, 변동성, 베타, 스탑 레벨까지 거리
  • --check: 위반 시 경고, 그렇지 않으면 "이상 없음". 경고 후 상태 초기화.

보고서

report.py — 다양한 주기의 포트폴리오 보고서 (Slack 형식 출력).

사용법

python report.py --cadence daily       # 짧은 일일 요약 (Finnhub 실시간 시세)
python report.py --cadence weekly      # 주간 성과 + 트레일링 스탑
python report.py --cadence monthly     # 전체 분석, 30일 조회 기간
python report.py --cadence quarterly   # 90일 + 모멘텀 추세 + 가중치 변동
python report.py --cadence yearly      # 252일 + 연간 순위 + 분산 추세

주기별 세부 사항

  • 일간: 약 10-15줄. 실시간 시세, 포지션 변동, 최고/최저, SPY 비교
  • 주간: 약 20줄. 주간 변동, 트레일링 스탑 거리, 변동성
  • 월간: 전체 제품군 — 변동성, 상관관계 행렬, Sortino, 분산, SPY 대비 성장, 손익, 트레일링 스탑
  • 분기: 월간 + 모멘텀 추세 (가속/감속), 동일 가중치 대비 가중치 변동
  • 연간: 월간 + 연간 순위, 분기별 분산 점수 추세

데이터 소스

  • 일간: Finnhub 실시간 시세 (속도 제한 문제 없음)
  • 주간+: AlphaVantage 과거 데이터 (속도 제한을 위해 호출 간 3초 지연)

모멘텀 스크리너

momentum_screener.py — Yahoo Finance 데이터를 사용하여 시장에서 최고 모멘텀 주식을 스캔합니다.

사용법

python3 momentum_screener.py                          # 기본값: 10일 모멘텀 기준 상위 20개
python3 momentum_screener.py --lookback 5             # 5일 모멘텀
python3 momentum_screener.py --lookback 20            # 20일 (1개월)
python3 momentum_screener.py --top 10                 # 상위 10개 결과
python3 momentum_screener.py --universe bullpen       # 불펜 종목만 스캔
python3 momentum_screener.py --universe sp500         # 전체 S&P 500
python3 momentum_screener.py --min-volume 500000      # 최소 일평균 거래량 필터
python3 momentum_screener.py --compare                # 결과에서 현재 보유 종목 표시
python3 momentum_screener.py --json                   # JSON 출력

출력

종목별: 원시 수익률, 연간 변동성, 위험 조정 모멘텀, 상승일 일관성, 평균 거래량.

회전 추적기

rotation_tracker.py — 포트폴리오 진입/이탈을 기록하고 회전 성과를 추적합니다.

사용법

python3 rotation_tracker.py --log GOOGL exit 311.49 "트레일링 스탑 위반"
python3 rotation_tracker.py --log POWL enter 85.20 "모멘텀 스크리너 선택"
python3 rotation_tracker.py --stats          # 거래 통계 (적중률, 평균 수익/손실 등)
python3 rotation_tracker.py --json           # JSON 출력

전략 문서

전체 모멘텀 회전 전략 문서는 docs/finance/STRATEGY.md를 참조하세요.

참고 사항

  • 과거 가격은 AlphaVantage 사용 (무료 티어 분당 5회, 호출 간 3초 지연)
  • 포트폴리오 데이터는 ~/hex/skills/portfolio/portfolio.json에 JSON으로 저장됨
  • SPAXX (머니 마켓)은 분석에서 제외됨

관련 스킬