Skip to content

FinAgent-Lab/Phase2-MarketAgent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“Š FinAgent Phase2: Market Agent

AI 기반 S&P 500 μ„Ήν„° 뢄석 및 투자 μΆ”μ²œ μ‹œμŠ€ν…œ

Python 3.12 License: MIT LangChain LangGraph

🎯 ν”„λ‘œμ νŠΈ κ°œμš”

FinAgent Phase2: Market AgentλŠ” λ―Έκ΅­ μ—°λ°©μ€€λΉ„μ œλ„(Fed)의 κ±°μ‹œκ²½μ œ μ§€ν‘œλ₯Ό μ’…ν•©μ μœΌλ‘œ λΆ„μ„ν•˜μ—¬ S&P 500 섹터별 투자 μ „λž΅μ„ μ œμ‹œν•˜λŠ” AI μ—μ΄μ „νŠΈμž…λ‹ˆλ‹€. LangChainκ³Ό LangGraphλ₯Ό ν™œμš©ν•œ 체계적인 μ›Œν¬ν”Œλ‘œμš°λ₯Ό 톡해 데이터 μˆ˜μ§‘, 닀쀑 μ§€ν‘œ 뢄석, λ°±ν…ŒμŠ€νŠΈ, ν”Όλ“œλ°±μ˜ μ „ 과정을 μžλ™ν™”ν•©λ‹ˆλ‹€.

✨ μ£Όμš” κΈ°λŠ₯

  • 🏦 FRED API 연동: 5κ°€μ§€ μ£Όμš” κ±°μ‹œκ²½μ œ μ§€ν‘œ μ‹€μ‹œκ°„ μˆ˜μ§‘
    • κΈ°μ€€κΈˆλ¦¬ (Federal Funds Rate)
    • GDP (ꡭ내총생산)
    • μ‹€μ—…λ₯  (Unemployment Rate)
    • 비농업 고용자 수 (Non-Farm Payrolls)
    • CPI (μ†ŒλΉ„μžλ¬Όκ°€μ§€μˆ˜)
  • πŸ“ˆ S&P 500 μ„Ήν„° 뢄석: yfinanceλ₯Ό ν™œμš©ν•œ 11개 μ£Όμš” μ„Ήν„° 데이터 뢄석
  • πŸ€– 닀쀑 μ§€ν‘œ 기반 AI μΆ”μ²œ: 각 κ±°μ‹œκ²½μ œ μ§€ν‘œλ³„ μ„Ήν„° μΆ”μ²œ ν›„ μ’…ν•© 뢄석
  • πŸ”„ μžλ™ λ°±ν…ŒμŠ€νŠΈ: κ³Όκ±° 데이터 기반 μΆ”μ²œ μ„±κ³Ό 검증 (μ΅œλŒ€ 5회 반볡)
  • πŸ’‘ ν”Όλ“œλ°± 루프: λ°±ν…ŒμŠ€νŠΈ μ‹€νŒ¨ μ‹œ μžλ™μœΌλ‘œ μ „λž΅ κ°œμ„  및 μž¬μΆ”μ²œ
  • 🎯 LangGraph μ›Œν¬ν”Œλ‘œμš°: 체계적인 뢄석 νŒŒμ΄ν”„λΌμΈ ꡬ좕

πŸ—οΈ μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      LangGraph Workflow                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                   β”‚
β”‚  [START]                                                          β”‚
β”‚     ↓                                                             β”‚
β”‚  [Initialize Data] ← FRED API (5개 κ±°μ‹œκ²½μ œ μ§€ν‘œ + μ„Ήν„° 데이터)  β”‚
β”‚     ↓                                                             β”‚
β”‚  [Recommend Sectors] ← 각 μ§€ν‘œλ³„ μ„Ήν„° μΆ”μ²œ (5개 뢄석)             β”‚
β”‚     ↓                                                             β”‚
β”‚  [Summarize] ← 5개 μΆ”μ²œ κ²°κ³Ό μ’…ν•© 뢄석                            β”‚
β”‚     ↓                                                             β”‚
β”‚  [Backtest] ← ν˜„μž¬ μ‹œμ  λ°μ΄ν„°λ‘œ 검증                             β”‚
β”‚     ↓                                                             β”‚
β”‚  Success? ──Yes──→ [Final Summary] β†’ [END]                       β”‚
β”‚     ↓                                                             β”‚
β”‚    Failed?                                                        β”‚
β”‚     ↓                                                             β”‚
β”‚  [Feedback Analysis] (μ΅œλŒ€ 5회 반볡)                              β”‚
β”‚     ↓                                                             β”‚
β”‚  [Backtest] ← κ°œμ„ λœ μ „λž΅μœΌλ‘œ μž¬κ²€μ¦                              β”‚
β”‚                                                                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

데이터 μ†ŒμŠ€

  • FRED API: 5κ°€μ§€ κ±°μ‹œκ²½μ œ μ§€ν‘œ (κΈ°μ€€κΈˆλ¦¬, GDP, μ‹€μ—…λ₯ , 비농업 고용, CPI)
  • Yahoo Finance API: S&P 500 섹터별 ETF 데이터 (11개 μ„Ήν„°)

πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

Phase2-MarketAgent/
β”œβ”€β”€ Agent/                           # AI μ—μ΄μ „νŠΈ 핡심 둜직
β”‚   β”œβ”€β”€ Chain/                       # LangChain 체인 κ΅¬ν˜„
β”‚   β”‚   └── Chains.py               # 톡합 체인 λͺ¨λ“ˆ (μΆ”μ²œ/μš”μ•½/λ°±ν…ŒμŠ€νŠΈ/ν”Όλ“œλ°±)
β”‚   β”œβ”€β”€ Graph/                       # LangGraph μ›Œν¬ν”Œλ‘œμš°
β”‚   β”‚   └── MacroGraph.py           # κ±°μ‹œκ²½μ œ 뢄석 κ·Έλž˜ν”„ (메인 μ‹€ν–‰ 파일)
β”‚   β”œβ”€β”€ MacroData/                   # κ±°μ‹œκ²½μ œ 데이터 μˆ˜μ§‘ λͺ¨λ“ˆ
β”‚   β”‚   β”œβ”€β”€ FundsRate.py            # κΈ°μ€€κΈˆλ¦¬ 데이터
β”‚   β”‚   β”œβ”€β”€ GDP.py                  # GDP 데이터
β”‚   β”‚   β”œβ”€β”€ UmEmployMent.py         # μ‹€μ—…λ₯  데이터
β”‚   β”‚   β”œβ”€β”€ NonFarmPayrolls.py      # 비농업 고용자 수 데이터
β”‚   β”‚   └── CPI.py                  # μ†ŒλΉ„μžλ¬Όκ°€μ§€μˆ˜ 데이터
β”‚   β”œβ”€β”€ Prompt/                      # LLM ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ
β”‚   β”‚   └── Prompts.py              # 톡합 ν”„λ‘¬ν”„νŠΈ λͺ¨λ“ˆ
β”‚   └── Util/                        # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚       β”œβ”€β”€ LLM.py                  # LLM 생성 및 μ„€μ •
β”‚       └── Yfinace3moData.py       # μ„Ήν„° 데이터 처리
β”œβ”€β”€ Apis/                            # μ™ΈλΆ€ API 연동
β”‚   β”œβ”€β”€ FredApi.py                  # FRED API 래퍼
β”‚   └── YFinace.py                  # Yahoo Finance API 래퍼
β”œβ”€β”€ requirements.txt                 # ν”„λ‘œμ νŠΈ μ˜μ‘΄μ„±
β”œβ”€β”€ LICENSE                          # MIT λΌμ΄μ„ μŠ€
└── README.md                        # ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸ”‘ 핡심 λͺ¨λ“ˆ μ„€λͺ…

MacroGraph.py (메인 μ›Œν¬ν”Œλ‘œμš°)

  • LangGraphλ₯Ό ν™œμš©ν•œ 전체 뢄석 νŒŒμ΄ν”„λΌμΈ μ •μ˜
  • 데이터 μ΄ˆκΈ°ν™” β†’ μ„Ήν„° μΆ”μ²œ β†’ μš”μ•½ β†’ λ°±ν…ŒμŠ€νŠΈ β†’ ν”Όλ“œλ°± 루프 κ΅¬ν˜„
  • uv run Agent/Graph/MacroGraph.py둜 직접 μ‹€ν–‰ κ°€λŠ₯

Chains.py (체인 λͺ¨λ“ˆ)

  • recommend_sectors_chain: κ±°μ‹œκ²½μ œ μ§€ν‘œ 기반 μ„Ήν„° μΆ”μ²œ
  • summarize_data_chain: 5개 μ§€ν‘œ 뢄석 κ²°κ³Ό μ’…ν•©
  • backtest_chain: μΆ”μ²œ κ²°κ³Ό λ°±ν…ŒμŠ€νŠΈ
  • feedback_analysis_chain: μ‹€νŒ¨ 원인 뢄석 및 κ°œμ„ μ•ˆ μ œμ‹œ
  • final_summary_chain: μ΅œμ’… κ²°κ³Ό μš”μ•½

MacroData/ (데이터 μˆ˜μ§‘)

각 κ±°μ‹œκ²½μ œ μ§€ν‘œλ³„ FRED API 데이터 μˆ˜μ§‘ 및 μ „μ²˜λ¦¬

  • FundsRate: μ—°λ°©κΈ°μ€€κΈˆλ¦¬ λͺ©ν‘œ λ²”μœ„ (μƒν•œ/ν•˜ν•œ)
  • GDP: λ―Έκ΅­ GDP μ„±μž₯λ₯ 
  • UmEmployMent: μ‹€μ—…λ₯  데이터
  • NonFarmPayrolls: 비농업 고용자 수 λ³€ν™”
  • CPI: μ†ŒλΉ„μžλ¬Όκ°€μ§€μˆ˜ 및 μ „μ›”λŒ€λΉ„ μ¦κ°€μœ¨

πŸš€ μ‹œμž‘ν•˜κΈ°

πŸ“‹ 사전 μš”κ΅¬μ‚¬ν•­

⚑ λΉ λ₯Έ μ‹œμž‘ (uv μ‚¬μš©)

1️⃣ uv μ„€μΉ˜

Windows (PowerShell)

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS/Linux

curl -LsSf https://astral.sh/uv/install.sh | sh

2️⃣ ν”„λ‘œμ νŠΈ 클둠 및 μ„€μ •

# μ €μž₯μ†Œ 클둠
git clone https://github.com/Pseudo-Lab/FinAgent-Phase2-MarketAgent.git
cd Phase2-MarketAgent

# Python 3.12 ν™˜κ²½ 생성 및 μ˜μ‘΄μ„± μ„€μΉ˜
uv venv --python 3.12
uv pip install -r requirements.txt

3️⃣ ν™˜κ²½ λ³€μˆ˜ μ„€μ •

# .env 파일 생성
cp .env.example .env

.env νŒŒμΌμ— API ν‚€λ₯Ό μž…λ ₯ν•˜μ„Έμš”:

# FRED API Key (https://fred.stlouisfed.org/docs/api/api_key.html)
FRED_API_KEY=your_fred_api_key_here

# OpenRouter API Key
OPENROUTER_API_KEY=your_openrouter_api_key_here

🎬 μ‹€ν–‰ 방법

메인 뢄석 μ‹€ν–‰

uv run Agent/Graph/MacroGraph.py

Note: uvλŠ” Rust 기반 고속 Python νŒ¨ν‚€μ§€ 관리 λ„κ΅¬λ‘œ, μžλ™μœΌλ‘œ κ°€μƒν™˜κ²½κ³Ό μ˜μ‘΄μ„±μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

μ‹€ν–‰ κ³Όμ •

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ λ‹€μŒ 단계가 μžλ™μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€:

  1. 데이터 μˆ˜μ§‘

    • FRED APIμ—μ„œ 5κ°€μ§€ κ±°μ‹œκ²½μ œ μ§€ν‘œ μˆ˜μ§‘
    • yfinanceμ—μ„œ S&P 500 μ„Ήν„° 데이터 μˆ˜μ§‘
  2. μ„Ήν„° μΆ”μ²œ

    • 각 κ±°μ‹œκ²½μ œ μ§€ν‘œλ³„ μ„Ήν„° 뢄석 및 μΆ”μ²œ
  3. μ’…ν•© 뢄석

    • 5개 μ§€ν‘œ κ²°κ³Όλ₯Ό μ’…ν•©ν•˜μ—¬ μ΅œμ’… 3개 μ„Ήν„° μ„ μ •
  4. λ°±ν…ŒμŠ€νŠΈ

    • ν˜„μž¬ μ‹œμ κΉŒμ§€ λ°μ΄ν„°λ‘œ μΆ”μ²œ μ„±κ³Ό 검증
  5. ν”Όλ“œλ°± 루프 (ν•„μš”μ‹œ)

    • λ°±ν…ŒμŠ€νŠΈ μ‹€νŒ¨ μ‹œ μ΅œλŒ€ 5νšŒκΉŒμ§€ μ „λž΅ κ°œμ„  및 μž¬μΆ”μ²œ
  6. μ΅œμ’… μš”μ•½

    • 뢄석 κ²°κ³Ό 및 투자 μ „λž΅ 좜λ ₯

μ˜ˆμƒ μ‹€ν–‰ μ‹œκ°„

  • 초기 데이터 μˆ˜μ§‘: μ•½ 2-3λΆ„
  • 전체 뢄석 μ™„λ£Œ: μ•½ 5-10λΆ„ (LLM 응닡 속도에 따라 변동)

πŸ“Š 뢄석 μ›Œν¬ν”Œλ‘œμš°

1단계: 데이터 μ΄ˆκΈ°ν™” (Initialize Data)

  • FRED APIμ—μ„œ 5κ°€μ§€ κ±°μ‹œκ²½μ œ μ§€ν‘œ μˆ˜μ§‘ (2008λ…„~ν˜„μž¬)
  • yfinanceμ—μ„œ S&P 500 μ„Ήν„° 데이터 μˆ˜μ§‘
  • 3κ°œμ›” μ „ μ‹œμ  데이터 뢄리 (λΆ„μ„μš©)

2단계: μ„Ήν„° μΆ”μ²œ (Recommend Sectors)

각 κ±°μ‹œκ²½μ œ μ§€ν‘œλ³„λ‘œ 독립적인 μ„Ήν„° μΆ”μ²œ μˆ˜ν–‰:

  1. κΈ°μ€€κΈˆλ¦¬ 뢄석 β†’ μΆ”μ²œ μ„Ήν„°
  2. GDP 뢄석 β†’ μΆ”μ²œ μ„Ήν„°
  3. μ‹€μ—…λ₯  뢄석 β†’ μΆ”μ²œ μ„Ήν„°
  4. 비농업 고용 뢄석 β†’ μΆ”μ²œ μ„Ήν„°
  5. CPI 뢄석 β†’ μΆ”μ²œ μ„Ήν„°

3단계: μ’…ν•© 뢄석 (Summarize)

  • 5개 μ§€ν‘œμ˜ μΆ”μ²œ κ²°κ³Όλ₯Ό μ’…ν•©
  • κ°€μž₯ μœ λ§ν•œ 3개 μ„Ήν„° μ΅œμ’… μ„ μ •
  • μ„ μ • 이유 및 μ „λž΅ μ œμ‹œ

4단계: λ°±ν…ŒμŠ€νŠΈ (Backtest)

  • ν˜„μž¬ μ‹œμ κΉŒμ§€μ˜ μ‹€μ œ λ°μ΄ν„°λ‘œ 검증
  • μΆ”μ²œ μ„Ήν„°μ˜ μ‹€μ œ μ„±κ³Ό 평가
  • Success / Failed νŒμ •

5단계: ν”Όλ“œλ°± 루프 (Feedback Analysis)

λ°±ν…ŒμŠ€νŠΈ Failed μ‹œ:

  • μ‹€νŒ¨ 원인 뢄석
  • ν˜„μž¬ μ‹œμž₯ 상황 μž¬ν‰κ°€
  • κ°œμ„ λœ μΆ”μ²œ μ„Ήν„° μ œμ‹œ
  • λ°±ν…ŒμŠ€νŠΈ μž¬μ‹€ν–‰ (μ΅œλŒ€ 5회 반볡)

λ°±ν…ŒμŠ€νŠΈ Success μ‹œ:

  • μ΅œμ’… μš”μ•½ 생성 ν›„ μ’…λ£Œ

🀝 κΈ°μ—¬ν•˜κΈ°

ν”„λ‘œμ νŠΈμ— κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€! λ‹€μŒ 절차λ₯Ό λ”°λΌμ£Όμ„Έμš”:

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”.

πŸ‘₯ νŒ€

Pseudo Lab - FinAgent Team

ν”„λ‘œμ νŠΈ νŒ€μž₯: 손봉균


Made with ❀️ by Pseudo Lab FinAgent Team
```

About

Phase2

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages