Skip to content

bourbonkk/TradeMonster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

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

Repository files navigation

Trend Following MCP Server

μΆ”μ„ΈμΆ”μ’… 투자 방법둠을 기반으둜 ν•œ MCP(Model Context Protocol) μ„œλ²„μž…λ‹ˆλ‹€. 주식 μ‹œμž₯ 뢄석, λ§€λ§€ μ‹œμ  νŒλ‹¨, 포트폴리였 관리λ₯Ό μœ„ν•œ 쒅합적인 투자 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.


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

Trend Following MCP ServerλŠ” λ‹€μŒκ³Ό 같은 핡심 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€:

  • πŸ“ˆ 주식 정보 μˆ˜μ§‘: μ‹€μ‹œκ°„ μ£Όκ°€, μž¬λ¬΄μ œν‘œ, λ‰΄μŠ€ 데이터
  • πŸ“Š 기술적 뢄석: 이동평균, RSI, MACD, λ³Όλ¦°μ € λ°΄λ“œ λ“±
  • 🎯 λ§€λ§€ μ‹œμ  μ‹ ν˜Έ: μΆ”μ„Έ μΆ”μ’… μ „λž΅ 기반 맀수/맀도 μ‹œμ  νŒλ‹¨
  • πŸ“‹ 포트폴리였 관리: μžμ‚° λ°°λΆ„, 리슀크 관리, μ„±κ³Ό 좔적
  • πŸ€– AI 기반 뢄석: λ¨Έμ‹ λŸ¬λ‹μ„ ν™œμš©ν•œ μ‹œμž₯ 예츑 및 μ΅œμ ν™”

πŸš€ μ£Όμš” κΈ°λŠ₯

1. 주식 정보 도ꡬ (Stock Information Tools)

  • get_stock_info: μ‹€μ‹œκ°„ μ£Όκ°€ 데이터 μˆ˜μ§‘ 및 κΈ°μ—… 정보 쑰회
  • screen_stocks: 기술적/기본적 쑰건에 λ”°λ₯Έ 주식 μŠ€ν¬λ¦¬λ‹
  • κΈ°μ—… μž¬λ¬΄μ œν‘œ 뢄석 (μ†μ΅κ³„μ‚°μ„œ, μž¬λ¬΄μƒνƒœν‘œ, ν˜„κΈˆνλ¦„ν‘œ)
  • λ‰΄μŠ€ 및 이벀트 λͺ¨λ‹ˆν„°λ§
  • 섹터별 μ‹œμž₯ 동ν–₯ 뢄석

2. 기술적 뢄석 도ꡬ (Technical Analysis Tools)

  • analyze_technical: 쒅합적인 기술적 뢄석 μˆ˜ν–‰
  • 이동평균선 뢄석 (20일, 50일, 200일 SMA/EMA)
  • λͺ¨λ©˜ν…€ μ§€ν‘œ (RSI, MACD, μŠ€ν† μΊμŠ€ν‹±)
  • 변동성 μ§€ν‘œ (λ³Όλ¦°μ € λ°΄λ“œ, ATR)
  • κ±°λž˜λŸ‰ 뢄석 (OBV, κ±°λž˜λŸ‰ 가쀑 평균)
  • μΆ”μ„Έ λ°©ν–₯ 및 강도 뢄석

3. λ§€λ§€ μ‹ ν˜Έ 도ꡬ (Trading Signal Tools)

  • generate_signal: μΆ”μ„Έ μΆ”μ’… λ§€λ§€ μ‹œμ  νŒλ‹¨
  • backtest_signals: μ „λž΅ λ°±ν…ŒμŠ€νŒ… 및 μ„±κ³Ό 뢄석
  • 리슀크 관리 및 μ†μ ˆλ§€ μ„€μ •
  • ν¬μ§€μ…˜ 사이징 μ΅œμ ν™”
  • μ‹ ν˜Έ 신뒰도 및 강도 계산

4. 포트폴리였 관리 도ꡬ (Portfolio Management Tools)

  • manage_portfolio: 포트폴리였 뢄석, μ΅œμ ν™”, λ¦¬λ°ΈλŸ°μ‹±
  • analyze_risk: 포트폴리였 리슀크 뢄석 (VaR, CVaR)
  • μžμ‚° λ°°λΆ„ μ΅œμ ν™”
  • 리슀크 λŒ€λΉ„ 수읡λ₯  뢄석
  • μ„±κ³Ό 좔적 및 λ¦¬ν¬νŒ…

πŸ—οΈ ν”„λ‘œμ νŠΈ ꡬ쑰

TradeMonster/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ mcp/                    # MCP μ„œλ²„ 핡심
β”‚   β”‚   β”œβ”€β”€ server.py          # MCP μ„œλ²„ 메인
β”‚   β”‚   β”œβ”€β”€ schemas.py         # 데이터 μŠ€ν‚€λ§ˆ (Pydantic λͺ¨λΈ)
β”‚   β”‚   └── tools/             # MCP 도ꡬ듀
β”‚   β”‚       β”œβ”€β”€ stock_info.py  # 주식 정보 도ꡬ
β”‚   β”‚       β”œβ”€β”€ technical.py   # 기술적 뢄석 도ꡬ
β”‚   β”‚       β”œβ”€β”€ signals.py     # λ§€λ§€ μ‹ ν˜Έ 도ꡬ
β”‚   β”‚       └── portfolio.py   # 포트폴리였 관리 도ꡬ
β”‚   β”œβ”€β”€ analysis/              # 뢄석 μ—”μ§„
β”‚   β”‚   β”œβ”€β”€ trend_analysis.py  # μΆ”μ„Έ 뢄석 μ—”μ§„
β”‚   β”‚   β”œβ”€β”€ momentum.py        # λͺ¨λ©˜ν…€ 뢄석 (κ΅¬ν˜„ μ˜ˆμ •)
β”‚   β”‚   └── volatility.py      # 변동성 뢄석 (κ΅¬ν˜„ μ˜ˆμ •)
β”‚   β”œβ”€β”€ utils/                 # μœ ν‹Έλ¦¬ν‹°
β”‚   β”‚   β”œβ”€β”€ config.py          # μ„€μ • 관리 (Pydantic 기반)
β”‚   β”‚   └── logger.py          # λ‘œκΉ… μ‹œμŠ€ν…œ
β”‚   └── main.py                # 메인 μ‹€ν–‰ 파일
β”œβ”€β”€ tests/                     # ν…ŒμŠ€νŠΈ νŒŒμΌλ“€
β”‚   └── test_mcp_server.py     # MCP μ„œλ²„ ν…ŒμŠ€νŠΈ
β”œβ”€β”€ pyproject.toml             # ν”„λ‘œμ νŠΈ μ„€μ • (μ—…λ°μ΄νŠΈλ¨)
β”œβ”€β”€ README.md                  # ν”„λ‘œμ νŠΈ λ¬Έμ„œ
β”œβ”€β”€ env.example                # ν™˜κ²½ λ³€μˆ˜ μ˜ˆμ‹œ
└── LICENSE                    # MIT λΌμ΄μ„ μŠ€

πŸ“Š μΆ”μ„ΈμΆ”μ’… μ „λž΅

핡심 원칙

  1. μΆ”μ„Έ 확인: μž₯κΈ° 이동평균선을 κΈ°μ€€μœΌλ‘œ μƒμŠΉ/ν•˜λ½ μΆ”μ„Έ νŒλ‹¨
  2. λͺ¨λ©˜ν…€ ν™œμš©: RSI, MACD λ“± λͺ¨λ©˜ν…€ μ§€ν‘œλ‘œ 강도 μΈ‘μ •
  3. 변동성 관리: λ³Όλ¦°μ € λ°΄λ“œ, ATR둜 변동성 기반 μ§„μž…/μ²­μ‚°
  4. 리슀크 μ œμ–΄: μ†μ ˆλ§€, 읡절맀, ν¬μ§€μ…˜ μ‚¬μ΄μ§•μœΌλ‘œ 리슀크 관리

λ§€λ§€ μ‹œμ  νŒλ‹¨

  • 맀수 쑰건: μƒμŠΉ μΆ”μ„Έ + λͺ¨λ©˜ν…€ μƒμŠΉ + 변동성 ν™•λŒ€
  • 맀도 쑰건: ν•˜λ½ μΆ”μ„Έ + λͺ¨λ©˜ν…€ ν•˜λ½ + μ§€μ§€μ„  μ΄νƒˆ
  • 홀딩 쑰건: μΆ”μ„Έ 지속 + 리슀크 관리 λ²”μœ„ λ‚΄

κ΅¬ν˜„λœ μ‹ ν˜Έ 둜직

# κ°•λ ₯ν•œ 맀수 μ‹ ν˜Έ
if (trend_direction == "up" and 
    current_price > sma_20 > sma_50 > sma_200 and
    rsi < 70 and  # 과맀수 μ•„λ‹˜
    macd > macd_signal and
    price_position < 0.8):  # λ³Όλ¦°μ € 상단 λ°΄λ“œ μ΄ν•˜
    signal_type = "strong_buy"

πŸ› οΈ μ„€μΉ˜ 및 μ‹€ν–‰

1. ν™˜κ²½ μ„€μ •

# μ €μž₯μ†Œ 클둠
git clone https://github.com/yourusername/TradeMonster.git
cd TradeMonster

# κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™”
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# μ˜μ‘΄μ„± μ„€μΉ˜
pip install -e .

2. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

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

# API ν‚€ μ„€μ • (선택사항 - yfinanceλŠ” 기본적으둜 API ν‚€κ°€ ν•„μš” μ—†μŒ)
YAHOO_FINANCE_API_KEY=your_api_key
ALPHA_VANTAGE_API_KEY=your_alpha_vantage_api_key

3. MCP μ„œλ²„ μ‹€ν–‰

# 메인 μ‹€ν–‰ 파일둜 μ‹€ν–‰
python src/main.py

# λ˜λŠ” 직접 MCP μ„œλ²„ μ‹€ν–‰
python -m src.mcp.server --dev

# λ˜λŠ” 개발 λͺ¨λ“œ
python -m src.mcp.server --dev --stdio

4. ν…ŒμŠ€νŠΈ μ‹€ν–‰

# 전체 ν…ŒμŠ€νŠΈ μ‹€ν–‰
pytest tests/

# νŠΉμ • ν…ŒμŠ€νŠΈ μ‹€ν–‰
pytest tests/test_mcp_server.py -v

πŸ“ˆ μ‚¬μš© μ˜ˆμ‹œ

1. 주식 정보 쑰회

# Apple 주식 정보 쑰회
stock_info = await session.call_tool("get_stock_info", {
    "symbol": "AAPL",
    "include_financials": True,
    "include_news": True
})

2. 기술적 뢄석

# 기술적 μ§€ν‘œ 뢄석
analysis = await session.call_tool("analyze_technical", {
    "symbol": "AAPL",
    "period": "1y",
    "indicators": ["sma", "rsi", "macd", "bollinger"]
})

3. λ§€λ§€ μ‹ ν˜Έ 생성

# μΆ”μ„ΈμΆ”μ’… λ§€λ§€ μ‹ ν˜Έ
signal = await session.call_tool("generate_signal", {
    "symbol": "AAPL",
    "strategy": "trend_following",
    "risk_level": "moderate"
})

4. 포트폴리였 뢄석

# 포트폴리였 뢄석
portfolio = await session.call_tool("manage_portfolio", {
    "action": "analyze",
    "portfolio": [
        {"symbol": "AAPL", "shares": 100, "cost_basis": 150.0},
        {"symbol": "GOOGL", "shares": 50, "cost_basis": 2800.0}
    ]
})

5. 리슀크 뢄석

# 포트폴리였 리슀크 뢄석
risk_analysis = await session.call_tool("analyze_risk", {
    "portfolio": portfolio_data,
    "confidence_level": 0.95
})

πŸ”§ 개발 κ°€μ΄λ“œ

μƒˆλ‘œμš΄ 도ꡬ μΆ”κ°€

# src/mcp/tools/new_tool.py
from mcp import Tool
from typing import Dict, Any

class NewTool(Tool):
    name = "new_tool"
    description = "μƒˆλ‘œμš΄ 도ꡬ μ„€λͺ…"
    
    async def execute(self, params: Dict[str, Any]) -> Dict[str, Any]:
        # 도ꡬ 둜직 κ΅¬ν˜„
        return {"result": "success"}

μ„€μ • 관리

# src/utils/config.pyμ—μ„œ μ„€μ • μΆ”κ°€
class Config(BaseSettings):
    new_setting: str = Field(default="default_value", description="μƒˆλ‘œμš΄ μ„€μ •")

λ‘œκΉ… μ‚¬μš©

from src.utils.logger import get_logger

logger = get_logger(__name__)
logger.info("정보 λ©”μ‹œμ§€")
logger.error("μ—λŸ¬ λ©”μ‹œμ§€")

πŸ“Š μ„±κ³Ό μ§€ν‘œ

  • 승λ₯ : 65% 이상 λͺ©ν‘œ
  • 샀프 λΉ„μœ¨: 1.5 이상 λͺ©ν‘œ
  • μ΅œλŒ€ 낙폭: 15% μ΄ν•˜ λͺ©ν‘œ
  • μ—°κ°„ 수읡λ₯ : 20% 이상 λͺ©ν‘œ

πŸ›‘οΈ 리슀크 관리

κ΅¬ν˜„λœ 리슀크 관리 κΈ°λŠ₯

  • ATR 기반 μ†μ ˆλ§€: 변동성에 λ”°λ₯Έ 동적 μ†μ ˆλ§€ μ„€μ •
  • ν¬μ§€μ…˜ 사이징: 신뒰도와 리슀크 μˆ˜μ€€μ— λ”°λ₯Έ ν¬μ§€μ…˜ 크기 쑰절
  • 포트폴리였 닀각화: μžμ‚° κ°„ 상관관계λ₯Ό κ³ λ €ν•œ λ°°λΆ„
  • VaR/CVaR 뢄석: 포트폴리였 리슀크 μΈ‘μ •

리슀크 μˆ˜μ€€λ³„ μ„€μ •

# 보수적 (Conservative)
stop_loss_multiplier = 2.0
position_size = 0.05  # 5%

# 쀑간 (Moderate) - κΈ°λ³Έκ°’
stop_loss_multiplier = 1.5
position_size = 0.1   # 10%

# 곡격적 (Aggressive)
stop_loss_multiplier = 1.0
position_size = 0.15  # 15%

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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

개발 κ°€μ΄λ“œλΌμΈ

  • Python 3.13+ μ‚¬μš©
  • Type hints ν•„μˆ˜
  • Pydantic λͺ¨λΈ μ‚¬μš©
  • Async/await νŒ¨ν„΄ μ‚¬μš©
  • ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

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

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


⚠️ λ©΄μ±… μ‘°ν•­

이 ν”„λ‘œμ νŠΈλŠ” ꡐ윑 및 연ꡬ λͺ©μ μœΌλ‘œ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ νˆ¬μžμ— μ‚¬μš©ν•˜κΈ° 전에 μΆ©λΆ„ν•œ 검증과 ν…ŒμŠ€νŠΈλ₯Ό 거쳐야 ν•©λ‹ˆλ‹€. 투자 손싀에 λŒ€ν•œ μ±…μž„μ€ μ‚¬μš©μžμ—κ²Œ μžˆμŠ΅λ‹ˆλ‹€.

μ€‘μš”: 이 λ„κ΅¬λŠ” 투자 쑰언이 μ•„λ‹™λ‹ˆλ‹€. λͺ¨λ“  투자 결정은 본인의 νŒλ‹¨μ— 따라 이루어져야 ν•©λ‹ˆλ‹€.


πŸ“ž 문의

ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λ¬Έμ˜μ‚¬ν•­μ΄λ‚˜ μ œμ•ˆμ‚¬ν•­μ΄ μžˆμœΌμ‹œλ©΄ 이슈λ₯Ό 생성해 μ£Όμ„Έμš”.

ν•¨κ»˜ 더 λ‚˜μ€ 투자 도ꡬλ₯Ό λ§Œλ“€μ–΄κ°€μš”! πŸš€

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages