6.7 KiB
6.7 KiB
💎 六壬察心 - IB基本面数据抓取指南
概述
六壬察心是炼妖壶系统的降魔杵专属功能,通过Interactive Brokers (IB) API获取深度基本面数据,实现对市场情绪面的精准洞察。
功能特性
🎯 核心功能
- 实时基本面数据:PE/PB比率、ROE、负债权益比等关键指标
- 财务报表分析:营收增长、EPS增长等财务健康度指标
- 分析师观点:评级、目标价、预测数据
- 市场情绪指标:内部持股、空头比例、社交情绪
- 多股票对比:批量分析,可视化对比
- 数据导出:支持CSV、Excel、JSON格式
🏛️ 神器等级对应
- 🆓 炼妖壶: 基础功能,仅展示演示数据
- 💎 降魔杵: 完整功能,实时IB数据访问
- 👑 打神鞭: 增强功能,高频分析和预测模型
环境配置
1. IB Gateway/TWS 设置
安装IB Gateway
- 下载并安装 IB Gateway
- 启动IB Gateway并登录您的账户
- 配置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 并配置:
# IB 连接配置
IB_HOST=127.0.0.1
IB_PORT=4002 # 4002=模拟, 4001=实盘
IB_CLIENT_ID=10 # 唯一客户端ID
3. Python依赖安装
# 安装IB相关依赖
pip install ib-insync pandas plotly
# 或使用项目依赖
pip install -r requirements.txt
使用方法
1. 命令行测试
# 测试IB连接和基本面数据抓取
python scripts/test_ib_fundamentals.py
2. Streamlit界面
# 启动Web界面
streamlit run streamlit_app.py
在界面中:
- 选择"💎 六壬察心"标签页
- 确保会员等级为"降魔杵"或以上
- 使用各种功能模块
3. 编程接口
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 对象
@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限制政策
调试模式
启用详细日志:
import logging
logging.basicConfig(level=logging.DEBUG)
测试连接
# 快速连接测试
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减少网络开销
- 合理控制并发请求数量
扩展开发
自定义数据处理
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 {}
数据存储
async def save_to_database(data: FundamentalData):
"""保存到数据库"""
# 实现数据库存储逻辑
pass
注意事项
1. 数据订阅
- 某些基本面数据需要额外的市场数据订阅
- 免费账户可能有数据延迟或限制
2. 使用限制
- 遵守IB API使用条款
- 注意API调用频率限制
- 不要用于高频交易
3. 数据准确性
- 基本面数据可能有延迟
- 建议与其他数据源交叉验证
- 注意财报发布时间对数据的影响
技术支持
如有问题,请:
- 查看日志文件获取详细错误信息
- 运行测试脚本验证配置
- 检查IB官方文档和API说明
- 在项目GitHub提交Issue
太公心易BI系统 - 降魔杵专属功能
版本:v1.0
更新时间:2025-01-15