本地化投资分析自动化系统 - 整合富途数据、技术分析、图表生成和报告输出
语言: 简体中文 | English | 繁體中文 (台灣) | 繁體中文 (香港) | 日本語
- 数据采集: 富途 OpenAPI 持仓/交易/K线 + akshare A股数据
- 深度分析: 技术面 + 基本面 + 行业 + 消息综合评分
- 技术分析: MA/MACD/RSI/布林带/OBV/VCP 指标计算
- 形态识别: VCP (波动收缩形态) 自动检测与评分
- 组合分析: 仓位权重、风险评估、HHI 集中度指数
- 图表生成: K线图 + 均线 + 成交量 (mplfinance)
- 报告输出: Markdown/JSON/HTML 多格式报告
- Skills 系统: 分析师/风控/交易指导/市场观察多角色
- Claude 命令: 便捷的 Slash 命令快速操作
- CLI 工具: 完整的命令行交互界面
- Python 3.12+ (推荐使用 asdf 管理)
- PostgreSQL 17+
- 富途牛牛客户端 (用于 API 连接)
# 克隆项目 git clone https://github.com/superstrings/investment-analyzer.git cd investment-analyzer # 设置 Python 版本 (使用 asdf) asdf install python 3.12.7 asdf local python 3.12.7 # 创建虚拟环境 python -m venv .venv source .venv/bin/activate # 安装依赖 pip install -r requirements.txt # 配置环境变量 cp .env.example .env # 编辑 .env 填入数据库连接信息和富途密码
# 创建数据库 python scripts/init_db.py create-db # 初始化表结构 python scripts/init_db.py init # 填充测试数据 (可选) python scripts/init_db.py seed
复制 config/users.yaml.example 至 config/users.yaml 并编辑:
users: - username: your_name futu: host: 127.0.0.1 port: 11111 trade_env: REAL # 或 SIMULATE security_firm: FUTUINC markets: [HK, US] settings: default_kline_days: 120
详细指南请参阅 docs/guide/README.md
# 同步所有数据 python main.py sync all -u your_name # 深度分析 (单只股票) python main.py deep-analyze -u your_name -c HK.00700 # 深度分析 (批量 - 按市场) python main.py deep-analyze -u your_name --market HK --batch python main.py deep-analyze -u your_name --market US --batch python main.py deep-analyze -u your_name --market A --batch # 查看持仓 python main.py account info -u your_name
在 Claude Code 中可使用以下命令:
| 命令 | 说明 |
|---|---|
/daily-analysis |
每日分析 (盘前/盘后) |
/deep-analyze HK |
深度分析指定市场 |
/market-summary |
三市场汇总报告 |
/sync-all |
同步所有数据 |
# 查看帮助 python main.py --help # 数据同步 python main.py sync all -u your_name # 同步所有数据 python main.py sync positions -u your_name # 仅同步持仓 python main.py sync klines -u your_name --codes "HK.00700,US.NVDA" # 图表生成 python main.py chart single --code HK.00700 --days 120 python main.py chart positions -u your_name # 报告生成 python main.py report portfolio -u your_name python main.py report technical -u your_name --codes "HK.00700" # 账户信息 python main.py account list -u your_name python main.py account info -u your_name
# 技术分析 from analysis import RSI, MACD, detect_vcp from fetchers import KlineFetcher fetcher = KlineFetcher() df = fetcher.fetch("HK.00700", days=120).df rsi = RSI(14).calculate(df) vcp_result = detect_vcp(df) if vcp_result.is_vcp: print(f"VCP 得分: {vcp_result.score}") # 组合分析 from analysis import PortfolioAnalyzer, PositionData positions = [ PositionData(market="HK", code="00700", qty=100, cost_price=350, market_price=380), ] result = PortfolioAnalyzer().analyze(positions) print(f"总盈亏: {result.summary.total_pl_value}") # 报告生成 from reports import ReportGenerator, ReportType generator = ReportGenerator() report = generator.generate_portfolio_report(result.to_dict()) report.save("reports/output/portfolio.md")
investment-analyzer/
├── analysis/ # 分析模块
│ ├── indicators/ # 技术指标 (MA, RSI, MACD, BB, OBV, VCP)
│ ├── portfolio.py # 组合分析
│ └── technical.py # 技术分析器
├── charts/ # 图表生成
│ ├── generator.py # K线图生成器
│ └── styles.py # 图表样式
├── config/ # 配置管理
│ ├── settings.py # 全局设置
│ └── users.py # 用户配置
├── db/ # 数据库
│ ├── models.py # SQLAlchemy 模型
│ ├── database.py # 连接管理
│ └── migrations/ # SQL 迁移脚本
├── fetchers/ # 数据采集
│ ├── futu_fetcher.py # 富途 API
│ └── kline_fetcher.py# K线数据 (akshare)
├── reports/ # 报告生成
│ ├── generator.py # 报告生成器
│ └── templates/ # Jinja2 模板
├── services/ # 业务服务
│ ├── sync_service.py # 数据同步
│ └── chart_service.py# 图表服务
├── skills/ # Claude Code Skills
│ ├── analyst/ # 分析师 (OBV + VCP)
│ ├── risk_controller/# 风控师
│ ├── trading_coach/ # 交易导师
│ ├── market_observer/# 市场观察员
│ ├── deep_analyzer/ # 深度分析
│ └── shared/ # 共享组件
├── scripts/ # 脚本工具
│ ├── init_db.py # 数据库初始化
│ └── import_csv.py # CSV 导入
├── tests/ # 测试用例
├── docs/ # 文档
├── main.py # CLI 入口
└── CLAUDE.md # Claude Code 指令
| 组件 | 技术 |
|---|---|
| 语言 | Python 3.12+ |
| 数据库 | PostgreSQL 17 |
| ORM | SQLAlchemy 2.0 |
| 数据采集 | futu-api, akshare |
| 图表 | mplfinance, matplotlib |
| 报告 | Jinja2 |
| CLI | Click |
| 测试 | pytest |
| 指标 | 类 | 说明 |
|---|---|---|
| SMA/EMA/WMA | MA, SMA, EMA, WMA |
移动平均线 |
| RSI | RSI, StochasticRSI |
相对强弱指数 |
| MACD | MACD, MACDCrossover |
指数平滑异同移动平均 |
| 布林带 | BollingerBands, BollingerBandsSqueeze |
波动率指标 |
| OBV | OBV, OBVDivergence |
能量潮 |
| VCP | VCP, VCPScanner |
波动收缩形态 |
VCP (Volatility Contraction Pattern) 是 Mark Minervini 提出的技术形态:
- 价格收缩至少 2-3 次
- 每次收缩深度递减
- 成交量逐渐萎缩
- 接近枢轴价位
from analysis import detect_vcp, VCPConfig config = VCPConfig( min_contractions=2, max_first_depth_pct=35.0, depth_decrease_ratio=0.7, ) result = detect_vcp(df, config) # result.score: 0-100 评分
| 类型 | 说明 |
|---|---|
| Portfolio | 投资组合分析报告 |
| Technical | 技术分析报告 |
| Daily | 每日投资简报 |
| Weekly | 周度投资回顾 |
支持输出格式: Markdown, JSON, HTML
# 运行所有测试 python -m pytest tests/ -v # 运行覆盖率测试 python -m pytest tests/ -v --cov=. # 运行特定模块测试 python -m pytest tests/test_portfolio.py -v
当前测试覆盖: 1097 tests passed
# 格式化代码 python -m black . python -m isort . # 代码检查 python -m flake8 .
本项目使用 "自动化工厂" 开发模式,集成 Claude Code 进行 AI 辅助开发:
CLAUDE.md: Claude Code 核心指令PLANNING.md: 项目规划总览TASKS.md: 任务追踪 (JSON 格式).claude/: 子代理和命令定义
详见 开发文档
欢迎贡献代码!请查阅 CONTRIBUTING.md 了解贡献指南。
参与项目请遵守我们的 行为准则。
MIT License - 详见 LICENSE
- futu-api - 富途 OpenAPI
- akshare - 股票数据接口
- mplfinance - 金融图表
- Claude Code - AI 辅助开发