You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AlphaFutures/统一数据获取接口开发文档.md

354 lines
9.4 KiB

# 统一数据获取接口开发文档
## 1. 概述
本开发文档描述了AlphaFutures系统中统一数据获取接口的设计与实现。该接口采用适配器设计模式支持多种数据源TQSDK、RQData等为系统提供统一的数据获取出口实现业务逻辑与数据获取的解耦。
### 1.1 设计目标
- **统一接口**为所有数据源提供一致的API接口
- **可扩展性**:支持轻松添加新的数据源适配器
- **配置灵活**:通过配置选择不同的数据源
- **容错处理**:包含错误处理和降级机制
- **模拟数据**:支持无账号时的模拟数据功能
### 1.2 技术栈
- Python 3.8+
- 抽象基类ABC
- 工厂模式
- 依赖注入
- 环境变量配置
## 2. 架构设计
### 2.1 整体架构
```
业务逻辑层
| 依赖注入
统一数据获取层 (DataFetcher)
| 工厂模式
适配器抽象层 (BaseDataAdapter)
| 继承实现
具体适配器实现
├── TQSdkAdapter
├── RQDataAdapter
└── 其他适配器...
```
### 2.2 核心设计模式
1. **适配器模式**:将不同数据源的接口转换为统一接口
2. **工厂模式**:根据配置创建对应的适配器实例
3. **依赖注入**:业务逻辑通过统一接口获取数据,不直接依赖具体实现
## 3. 核心组件
### 3.1 抽象基类 (BaseDataAdapter)
定义了所有数据适配器必须实现的接口方法,确保一致性。
**文件路径**`qihuo_analyzer/data/api_adapters/base_adapter.py`
**核心方法**
- `connect()` - 连接数据源
- `disconnect()` - 断开连接
- `get_kline_data()` - 获取K线数据
- `get_tick_data()` - 获取tick数据
- `get_contract_info()` - 获取合约信息
- `get_market_data()` - 获取市场数据
- `get_all_symbols()` - 获取所有品种列表
### 3.2 具体适配器
#### 3.2.1 TQSDK适配器
**文件路径**`qihuo_analyzer/data/api_adapters/tqsdk_adapter.py`
实现了TQSDK的所有接口方法包含错误处理和模拟数据支持。
#### 3.2.2 RQData适配器
**文件路径**`qihuo_analyzer/data/api_adapters/rqdata_adapter.py`
实现了RQData的所有接口方法包含错误处理和模拟数据支持。
### 3.3 适配器工厂
**文件路径**`qihuo_analyzer/data/api_adapters/adapter_factory.py`
根据配置创建对应的适配器实例,支持通过环境变量选择数据源类型。
### 3.4 统一数据获取器
**文件路径**`qihuo_analyzer/data/data_fetcher.py`
使用统一接口获取数据替代直接API调用为业务逻辑提供一致的数据获取方式。
## 4. 实现细节
### 4.1 配置管理
#### 4.1.1 环境变量配置
| 环境变量 | 说明 | 默认值 |
|---------|------|--------|
| DATA_ADAPTER_TYPE | 数据适配器类型 (tqsdk/rqdata) | tqsdk |
| TQSDK_USERNAME | TQSDK账号 | 无 |
| TQSDK_PASSWORD | TQSDK密码 | 无 |
| RQDATA_USERNAME | RQData账号 | 无 |
| RQDATA_PASSWORD | RQData密码 | 无 |
#### 4.1.2 账号配置
- **TQSDK**:设置`TQSDK_USERNAME`和`TQSDK_PASSWORD`环境变量
- **RQData**:设置`RQDATA_USERNAME`和`RQDATA_PASSWORD`环境变量
- **未配置账号**:自动使用模拟数据
### 4.2 错误处理
所有适配器都包含完整的错误处理机制:
1. **连接错误**:捕获连接异常,返回错误信息并使用模拟数据
2. **数据获取错误**捕获API调用异常返回错误信息并使用模拟数据
3. **参数错误**:验证输入参数,返回错误信息
### 4.3 模拟数据
当API连接失败或未配置账号时自动使用模拟数据
- **K线数据**:生成随机波动的价格数据
- **Tick数据**:生成随机的成交数据
- **合约信息**:返回基本合约信息
- **市场数据**:返回模拟的市场行情
- **品种列表**:返回内置的品种列表
### 4.4 数据格式统一
所有适配器返回的数据格式保持一致:
- **K线数据**:包含时间、开盘价、最高价、最低价、收盘价、成交量
- **Tick数据**:包含时间、最新价、成交量、持仓量、买价、买量、卖价、卖量
- **合约信息**:包含合约代码、交易所、品种类型、合约大小等
- **市场数据**:包含最新价、涨跌幅、成交量、持仓量等
- **品种列表**:包含品种代码、交易所、品种名称等
## 5. 使用方法
### 5.1 基本使用
```python
from qihuo_analyzer.data.data_fetcher import DataFetcher
# 创建数据获取器实例(自动使用配置的适配器)
fetcher = DataFetcher()
# 获取K线数据
kline_data = fetcher.get_kline_data(
symbol="SHFE.rb2409",
interval=3600, # 1小时
start_time="2024-01-01 00:00:00",
end_time="2024-01-02 00:00:00"
)
# 获取Tick数据
tick_data = fetcher.get_tick_data(
symbol="SHFE.rb2409",
start_time="2024-01-01 09:00:00",
end_time="2024-01-01 11:30:00"
)
# 获取合约信息
contract_info = fetcher.get_contract_info("SHFE.rb2409")
# 获取市场数据
market_data = fetcher.get_market_data(["SHFE.rb2409", "DCE.i2409"])
# 获取所有品种列表
symbols = fetcher.get_all_symbols()
```
### 5.2 手动指定适配器
```python
from qihuo_analyzer.data.api_adapters.adapter_factory import DataAdapterFactory
# 手动创建特定适配器
adapter = DataAdapterFactory.create_adapter("rqdata")
adapter.connect()
# 使用适配器获取数据
data = adapter.get_kline_data("SHFE.rb2409", 3600, start_time, end_time)
# 断开连接
adapter.disconnect()
```
## 6. 配置说明
### 6.1 Windows环境变量配置
1. **打开系统属性**:右键"此电脑" → "属性" → "高级系统设置"
2. **环境变量**:点击"环境变量"按钮
3. **添加系统变量**:在"系统变量"区域点击"新建"
4. **设置变量**
- 变量名:`DATA_ADAPTER_TYPE`
- 变量值:`tqsdk` 或 `rqdata`
5. **设置账号变量**(可选):
- TQSDK添加 `TQSDK_USERNAME``TQSDK_PASSWORD`
- RQData添加 `RQDATA_USERNAME``RQDATA_PASSWORD`
6. **重启应用**:配置生效需要重启应用程序
### 6.2 临时配置
在Python代码中临时设置环境变量
```python
import os
# 设置适配器类型
os.environ["DATA_ADAPTER_TYPE"] = "rqdata"
# 设置RQData账号
os.environ["RQDATA_USERNAME"] = "your_username"
os.environ["RQDATA_PASSWORD"] = "your_password"
# 然后创建DataFetcher实例
from qihuo_analyzer.data.data_fetcher import DataFetcher
fetcher = DataFetcher()
```
## 7. 测试验证
### 7.1 测试脚本
**文件路径**`test_data_adapters.py`
测试脚本验证了所有适配器的功能:
- 连接测试
- 数据获取测试
- 错误处理测试
- 模拟数据测试
### 7.2 运行测试
```bash
# 在项目根目录运行测试
python test_data_adapters.py
```
### 7.3 测试结果
测试输出示例:
```
=== 测试 tqsdk 适配器 ===
创建TQSDK数据适配器
连接API...
TQSDK账号密码未配置将使用模拟数据
连接结果: 失败
API连接失败跳过测试
=== 测试 rqdata 适配器 ===
创建RQData数据适配器
连接API...
RQData账号密码未配置将使用模拟数据
连接结果: 失败
API连接失败跳过测试
=== 测试完成 ===
```
## 8. 未来扩展
### 8.1 添加新适配器
要添加新的数据源适配器,只需:
1. **创建适配器类**:继承`BaseDataAdapter`
2. **实现接口方法**:实现所有抽象方法
3. **注册适配器**:在工厂类中添加适配器类型
**示例**
```python
# 在adapter_factory.py中添加
ADAPTERS = {
"tqsdk": TQSdkAdapter,
"rqdata": RQDataAdapter,
"new_adapter": NewAdapter # 新适配器
}
```
### 8.2 增强功能
未来可考虑的增强功能:
- **缓存机制**添加数据缓存减少重复API调用
- **多数据源融合**:支持从多个数据源获取数据并融合
- **数据源健康检查**:定期检查数据源可用性
- **数据质量监控**:监控数据完整性和准确性
- **异步数据获取**支持异步API调用提高性能
## 9. 故障排除
### 9.1 常见问题
1. **API连接失败**
- 检查账号配置是否正确
- 检查网络连接
- 检查API服务是否正常
2. **数据获取失败**
- 检查合约代码是否正确
- 检查时间范围是否合理
- 检查API权限是否足够
3. **适配器初始化失败**
- 检查环境变量配置
- 检查依赖包是否安装
- 检查Python版本是否兼容
### 9.2 日志与调试
- **日志级别**:可通过配置调整日志级别
- **调试模式**:设置环境变量`DEBUG=True`启用调试模式
- **错误信息**:详细的错误信息会记录到日志中
## 10. 依赖管理
### 10.1 核心依赖
| 依赖包 | 版本 | 用途 |
|--------|------|------|
| tqsdk | ^1.9.15 | TQSDK数据源支持 |
| rqdatac | ^2.0.0 | RQData数据源支持 |
| pandas | ^1.3.0 | 数据处理 |
| numpy | ^1.20.0 | 数值计算 |
### 10.2 安装依赖
```bash
# 安装依赖包
pip install -r requirements.txt
```
## 11. 总结
统一数据获取接口的实现成功解决了多数据源集成的问题为AlphaFutures系统提供了
- **灵活性**:支持多种数据源,可根据需要切换
- **可靠性**:包含错误处理和降级机制
- **可扩展性**:支持轻松添加新的数据源
- **一致性**:为业务逻辑提供统一的数据接口
- **可维护性**:代码结构清晰,易于维护和测试
该设计不仅满足了当前的需求,也为未来的功能扩展和性能优化奠定了基础。