강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

AiwkBon님의 프로필 이미지
AiwkBon

작성한 질문수

바이브 코딩으로 미국 주식 AI 자동 분석 시스템 만들기 with Claude Code

📈 2-2: SPY 추세 — 200일선의 마법 & Breadth & 금리/신용 센서

Breadth MMFI 404 에러

해결된 질문

작성

·

35

0

안녕하세요 Part 2 프롬프트 5번에서 MMFI 지표 바탕으로 Breadth 관련 지표를 두고 있는데, 404에러가 확인됩니다. (강사님 코드로도)

 

  • 연관 강의: 200일선의 마법 & Breadth & 금리/신용 센서

  • 연관 프롬프트:

_breadth_signal 메서드를 추가해줘.
yfinance로 ^MMFI(NYSE 50일 MA 위 종목 비율)를 3개월치 가져와서:
- 70% 이상: risk_on
- 50~70%: neutral
- 30~50%: risk_off
- 30% 미만: crisis
데이터 수집 실패 시 {'breadth_pct': None, 'breadth_regime': 'neutral'} 반환.
logger.debug로 에러 로깅하되 시스템은 멈추지 않도록 해줘.

 

다른 대체 지표를 두고 해야할 것 같은데, 어떤게 좋을까요?

 

 

퀴즈

시장 국면 탐지는 시장 분석에서 무엇에 비유될 수 있을까요?

개인 투자자의 감

주식 시장의 날씨 앱

과거 데이터 기록

경제 지표 통계

답변 1

0

호두감자님의 프로필 이미지
호두감자
지식공유자

수강 감사합니다!

아래 부분한번 고려해주시겠나요!

 

방법 1: RSP/SPY 비율 (가장 쉬움)

def breadthsignal(self):

"""RSP(Equal Weight) / SPY 비율로 breadth 대체"""

try:

data = yf.download(['RSP', 'SPY'], period='3mo')['Close']

ratio = (data['RSP'] / data['SPY']).dropna()

current = ratio.iloc[-1]

avg = ratio.rolling(50).mean().iloc[-1]

# RSP/SPY > 평균: 소형주 강세 = breadth 좋음

pct = (current / avg - 1) * 100

if pct > 2: regime = 'risk_on'

elif pct > 0: regime = 'neutral'

elif pct > -2: regime = 'risk_off'

else: regime = 'crisis'

return {'breadth_pct': round(float(pct), 1), 'breadth_regime': regime}

except:

return {'breadth_pct': None, 'breadth_regime': 'neutral'}

방법 2: 직접 계산 (정확도 높음)

def breadthsignal(self):

"""S&P500 종목 중 50일선 위 비율 직접 계산"""

try:

import pandas as pd

sp500 = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')[0]

tickers = sp500['Symbol'].tolist()[:100] # 상위 100개만 (속도)

data = yf.download(tickers, period='3mo')['Close']

above_50ma = 0

total = 0

for col in data.columns:

series = data[col].dropna()

if len(series) >= 50:

ma50 = series.rolling(50).mean().iloc[-1]

if series.iloc[-1] > ma50:

above_50ma += 1

total += 1

pct = (above_50ma / total * 100) if total > 0 else 50

# ^MMFI와 동일한 기준

if pct >= 70: regime = 'risk_on'

elif pct >= 50: regime = 'neutral'

elif pct >= 30: regime = 'risk_off'

else: regime = 'crisis'

return {'breadth_pct': round(pct, 1), 'breadth_regime': regime}

except:

return {'breadth_pct': None, 'breadth_regime': 'neutral'}

추천: 방법 1 (RSP/SPY 비율) — 코드 3줄이면 되고, ^MMFI와 같은 의미(시장 참여 폭)를 캡처합니다.

AiwkBon님의 프로필 이미지
AiwkBon

작성한 질문수

질문하기