288 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			288 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # 💎 六壬察心 - IB基本面数据抓取指南
 | ||
| 
 | ||
| ## 概述
 | ||
| 
 | ||
| 六壬察心是炼妖壶系统的降魔杵专属功能,通过Interactive Brokers (IB) API获取深度基本面数据,实现对市场情绪面的精准洞察。
 | ||
| 
 | ||
| ## 功能特性
 | ||
| 
 | ||
| ### 🎯 核心功能
 | ||
| - **实时基本面数据**:PE/PB比率、ROE、负债权益比等关键指标
 | ||
| - **财务报表分析**:营收增长、EPS增长等财务健康度指标
 | ||
| - **分析师观点**:评级、目标价、预测数据
 | ||
| - **市场情绪指标**:内部持股、空头比例、社交情绪
 | ||
| - **多股票对比**:批量分析,可视化对比
 | ||
| - **数据导出**:支持CSV、Excel、JSON格式
 | ||
| 
 | ||
| ### 🏛️ 神器等级对应
 | ||
| - **🆓 炼妖壶**: 基础功能,仅展示演示数据
 | ||
| - **💎 降魔杵**: 完整功能,实时IB数据访问
 | ||
| - **👑 打神鞭**: 增强功能,高频分析和预测模型
 | ||
| 
 | ||
| ## 环境配置
 | ||
| 
 | ||
| ### 1. IB Gateway/TWS 设置
 | ||
| 
 | ||
| #### 安装IB Gateway
 | ||
| 1. 下载并安装 [IB Gateway](https://www.interactivebrokers.com/en/index.php?f=16457)
 | ||
| 2. 启动IB Gateway并登录您的账户
 | ||
| 3. 配置API设置:
 | ||
|    - 启用API连接
 | ||
|    - 设置端口号(推荐4002用于模拟账户)
 | ||
|    - 允许本地连接
 | ||
| 
 | ||
| #### API配置
 | ||
| ```
 | ||
| Socket Port: 4002 (模拟账户) / 4001 (实盘账户)
 | ||
| Enable ActiveX and Socket Clients: ✓
 | ||
| Read-Only API: ✓ (推荐用于数据获取)
 | ||
| Download open orders on connection: ✓
 | ||
| ```
 | ||
| 
 | ||
| ### 2. 环境变量配置
 | ||
| 
 | ||
| 复制 `.env.example` 为 `.env` 并配置:
 | ||
| 
 | ||
| ```bash
 | ||
| # IB 连接配置
 | ||
| IB_HOST=127.0.0.1
 | ||
| IB_PORT=4002          # 4002=模拟, 4001=实盘
 | ||
| IB_CLIENT_ID=10       # 唯一客户端ID
 | ||
| ```
 | ||
| 
 | ||
| ### 3. Python依赖安装
 | ||
| 
 | ||
| ```bash
 | ||
| # 安装IB相关依赖
 | ||
| pip install ib-insync pandas plotly
 | ||
| 
 | ||
| # 或使用项目依赖
 | ||
| pip install -r requirements.txt
 | ||
| ```
 | ||
| 
 | ||
| ## 使用方法
 | ||
| 
 | ||
| ### 1. 命令行测试
 | ||
| 
 | ||
| ```bash
 | ||
| # 测试IB连接和基本面数据抓取
 | ||
| python scripts/test_ib_fundamentals.py
 | ||
| ```
 | ||
| 
 | ||
| ### 2. Streamlit界面
 | ||
| 
 | ||
| ```bash
 | ||
| # 启动Web界面
 | ||
| streamlit run streamlit_app.py
 | ||
| ```
 | ||
| 
 | ||
| 在界面中:
 | ||
| 1. 选择"💎 六壬察心"标签页
 | ||
| 2. 确保会员等级为"降魔杵"或以上
 | ||
| 3. 使用各种功能模块
 | ||
| 
 | ||
| ### 3. 编程接口
 | ||
| 
 | ||
| ```python
 | ||
| import asyncio
 | ||
| from src.data.ib_fundamentals_fetcher import IBFundamentalsFetcher
 | ||
| 
 | ||
| async def get_stock_data():
 | ||
|     fetcher = IBFundamentalsFetcher()
 | ||
|     
 | ||
|     try:
 | ||
|         # 获取单只股票数据
 | ||
|         aapl_data = await fetcher.get_stock_fundamentals('AAPL')
 | ||
|         print(f"AAPL PE比率: {aapl_data.pe_ratio}")
 | ||
|         
 | ||
|         # 获取多只股票数据
 | ||
|         symbols = ['AAPL', 'MSFT', 'GOOGL']
 | ||
|         data_dict = await fetcher.get_multiple_stocks_fundamentals(symbols)
 | ||
|         
 | ||
|         # 转换为DataFrame
 | ||
|         df = fetcher.to_dataframe(data_dict)
 | ||
|         print(df[['symbol', 'pe_ratio', 'market_cap']])
 | ||
|         
 | ||
|     finally:
 | ||
|         await fetcher.disconnect()
 | ||
| 
 | ||
| # 运行
 | ||
| asyncio.run(get_stock_data())
 | ||
| ```
 | ||
| 
 | ||
| ## 数据结构
 | ||
| 
 | ||
| ### FundamentalData 对象
 | ||
| 
 | ||
| ```python
 | ||
| @dataclass
 | ||
| class FundamentalData:
 | ||
|     symbol: str                    # 股票代码
 | ||
|     company_name: str              # 公司名称
 | ||
|     sector: str                    # 行业
 | ||
|     market_cap: float              # 市值
 | ||
|     pe_ratio: Optional[float]      # PE比率
 | ||
|     pb_ratio: Optional[float]      # PB比率
 | ||
|     roe: Optional[float]           # 净资产收益率
 | ||
|     debt_to_equity: Optional[float] # 负债权益比
 | ||
|     revenue_growth: Optional[float] # 营收增长率
 | ||
|     eps_growth: Optional[float]    # EPS增长率
 | ||
|     dividend_yield: Optional[float] # 股息率
 | ||
|     analyst_rating: Optional[str]  # 分析师评级
 | ||
|     price_target: Optional[float]  # 目标价
 | ||
|     insider_ownership: Optional[float] # 内部持股比例
 | ||
|     short_interest: Optional[float]    # 空头比例
 | ||
|     social_sentiment: Optional[float]  # 社交情绪
 | ||
|     last_updated: datetime         # 最后更新时间
 | ||
| ```
 | ||
| 
 | ||
| ## 支持的市场
 | ||
| 
 | ||
| ### 美股 (US)
 | ||
| - 交易所:SMART, NYSE, NASDAQ
 | ||
| - 货币:USD
 | ||
| - 数据类型:完整基本面数据
 | ||
| 
 | ||
| ### 港股 (HK)
 | ||
| - 交易所:SEHK
 | ||
| - 货币:HKD
 | ||
| - 数据类型:基础基本面数据
 | ||
| 
 | ||
| ### 其他市场
 | ||
| - 根据IB数据订阅情况而定
 | ||
| - 部分市场可能需要额外的数据订阅
 | ||
| 
 | ||
| ## 故障排除
 | ||
| 
 | ||
| ### 常见问题
 | ||
| 
 | ||
| #### 1. 连接失败
 | ||
| ```
 | ||
| ❌ IB连接失败: Connection refused
 | ||
| ```
 | ||
| 
 | ||
| **解决方案:**
 | ||
| - 确保IB Gateway/TWS正在运行
 | ||
| - 检查端口号是否正确
 | ||
| - 确认API设置已启用
 | ||
| - 检查防火墙设置
 | ||
| 
 | ||
| #### 2. 数据获取失败
 | ||
| ```
 | ||
| ❌ 无法获取基本面数据
 | ||
| ```
 | ||
| 
 | ||
| **解决方案:**
 | ||
| - 检查股票代码是否正确
 | ||
| - 确认市场数据订阅状态
 | ||
| - 验证交易时间(某些数据仅在交易时间可用)
 | ||
| - 检查IB账户权限
 | ||
| 
 | ||
| #### 3. API限制
 | ||
| ```
 | ||
| ⚠️ API请求频率过高
 | ||
| ```
 | ||
| 
 | ||
| **解决方案:**
 | ||
| - 增加请求间隔时间
 | ||
| - 使用批量请求减少API调用
 | ||
| - 检查IB API限制政策
 | ||
| 
 | ||
| ### 调试模式
 | ||
| 
 | ||
| 启用详细日志:
 | ||
| 
 | ||
| ```python
 | ||
| import logging
 | ||
| logging.basicConfig(level=logging.DEBUG)
 | ||
| ```
 | ||
| 
 | ||
| ### 测试连接
 | ||
| 
 | ||
| ```bash
 | ||
| # 快速连接测试
 | ||
| python -c "
 | ||
| import asyncio
 | ||
| from src.data.ib_fundamentals_fetcher import IBFundamentalsFetcher
 | ||
| 
 | ||
| async def test():
 | ||
|     fetcher = IBFundamentalsFetcher()
 | ||
|     success = await fetcher.connect()
 | ||
|     print('✅ 连接成功' if success else '❌ 连接失败')
 | ||
|     await fetcher.disconnect()
 | ||
| 
 | ||
| asyncio.run(test())
 | ||
| "
 | ||
| ```
 | ||
| 
 | ||
| ## 性能优化
 | ||
| 
 | ||
| ### 1. 连接池管理
 | ||
| - 复用IB连接,避免频繁连接/断开
 | ||
| - 使用连接池管理多个并发请求
 | ||
| 
 | ||
| ### 2. 数据缓存
 | ||
| - 缓存基本面数据,避免重复请求
 | ||
| - 设置合理的缓存过期时间
 | ||
| 
 | ||
| ### 3. 批量处理
 | ||
| - 使用批量API减少网络开销
 | ||
| - 合理控制并发请求数量
 | ||
| 
 | ||
| ## 扩展开发
 | ||
| 
 | ||
| ### 自定义数据处理
 | ||
| 
 | ||
| ```python
 | ||
| class CustomFundamentalsFetcher(IBFundamentalsFetcher):
 | ||
|     async def get_custom_metrics(self, symbol: str):
 | ||
|         """自定义指标计算"""
 | ||
|         data = await self.get_stock_fundamentals(symbol)
 | ||
|         
 | ||
|         # 自定义计算
 | ||
|         if data.pe_ratio and data.eps_growth:
 | ||
|             peg_ratio = data.pe_ratio / data.eps_growth
 | ||
|             return {'peg_ratio': peg_ratio}
 | ||
|         
 | ||
|         return {}
 | ||
| ```
 | ||
| 
 | ||
| ### 数据存储
 | ||
| 
 | ||
| ```python
 | ||
| async def save_to_database(data: FundamentalData):
 | ||
|     """保存到数据库"""
 | ||
|     # 实现数据库存储逻辑
 | ||
|     pass
 | ||
| ```
 | ||
| 
 | ||
| ## 注意事项
 | ||
| 
 | ||
| ### 1. 数据订阅
 | ||
| - 某些基本面数据需要额外的市场数据订阅
 | ||
| - 免费账户可能有数据延迟或限制
 | ||
| 
 | ||
| ### 2. 使用限制
 | ||
| - 遵守IB API使用条款
 | ||
| - 注意API调用频率限制
 | ||
| - 不要用于高频交易
 | ||
| 
 | ||
| ### 3. 数据准确性
 | ||
| - 基本面数据可能有延迟
 | ||
| - 建议与其他数据源交叉验证
 | ||
| - 注意财报发布时间对数据的影响
 | ||
| 
 | ||
| ## 技术支持
 | ||
| 
 | ||
| 如有问题,请:
 | ||
| 1. 查看日志文件获取详细错误信息
 | ||
| 2. 运行测试脚本验证配置
 | ||
| 3. 检查IB官方文档和API说明
 | ||
| 4. 在项目GitHub提交Issue
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| *太公心易BI系统 - 降魔杵专属功能*  
 | ||
| *版本:v1.0*  
 | ||
| *更新时间:2025-01-15*
 |