crypto_quant/DB_TRADE_DATA_SUMMARY.md

172 lines
6.3 KiB
Markdown
Raw Normal View History

# DBTradeData 类设计总结
## 📋 概述
根据 `crypto_trade_data.sql` 表结构和 `db_market_data.py` 的设计模式,创建了 `DBTradeData` 类,用于管理加密货币交易数据的存储和查询。
## 🏗️ 表结构映射
### 字段映射
| SQL字段 | Python字段 | 类型 | 说明 |
|---------|------------|------|------|
| `symbol` | `symbol` | VARCHAR(50) | 交易对 |
| `ts` | `ts` | BIGINT | 交易时间戳 |
| `date_time` | `date_time` | VARCHAR(50) | 交易日期时间 |
| `tradeId` | `tradeId` | VARCHAR(50) | 交易ID |
| `side` | `side` | VARCHAR(10) | 交易方向(buy/sell) |
| `sz` | `sz` | DECIMAL(30,8) | 交易数量 |
| `px` | `px` | DECIMAL(20,5) | 交易价格 |
| `create_time` | `create_time` | VARCHAR(50) | 创建时间 |
### 索引支持
- `uniq_tradeId`: 交易ID唯一索引
- `idx_symbol`: 交易对索引
- `idx_side`: 交易方向索引
- `idx_ts`: 时间戳索引
- `idx_date_time`: 日期时间索引
- `idx_symbol_ts`: 交易对+时间戳复合索引
- `idx_side_ts`: 交易方向+时间戳复合索引
## 🔧 核心功能
### 1. 数据插入方法
| 方法名 | 速度 | 内存 | 适用场景 |
|--------|------|------|----------|
| `insert_data_to_mysql` | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 中小数据量(<10万条 |
| `insert_data_to_mysql_fast` | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 中等数据量 |
| `insert_data_to_mysql_chunk` | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 大数据量(>10万条 |
| `insert_data_to_mysql_simple` | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 简单插入(忽略重复) |
### 2. 基础查询方法
| 方法名 | 功能 | 参数 |
|--------|------|------|
| `query_latest_data` | 查询最新交易数据 | `symbol` |
| `query_data_by_tradeId` | 根据交易ID查询 | `tradeId` |
| `query_trade_data_by_symbol` | 根据交易对查询 | `symbol`, `start`, `end` |
| `query_trade_data_by_side` | 根据交易方向查询 | `side`, `symbol`, `start`, `end` |
### 3. 便捷查询方法
| 方法名 | 功能 | 说明 |
|--------|------|------|
| `query_buy_trades` | 查询买入交易 | 封装了 `query_trade_data_by_side("buy")` |
| `query_sell_trades` | 查询卖出交易 | 封装了 `query_trade_data_by_side("sell")` |
| `get_recent_trades` | 获取最近交易 | 支持限制返回数量 |
### 4. 统计分析方法
| 方法名 | 功能 | 返回数据 |
|--------|------|----------|
| `get_trade_statistics` | 交易统计信息 | 总交易数、买卖数量、成交量、价值等 |
| `get_volume_price_analysis` | 成交量价格分析 | 按买卖方向分组的统计分析 |
### 5. 范围查询方法
| 方法名 | 功能 | 参数 |
|--------|------|------|
| `get_trades_by_price_range` | 价格范围查询 | `min_price`, `max_price`, `symbol`, `start`, `end` |
| `get_trades_by_volume_range` | 成交量范围查询 | `min_volume`, `max_volume`, `symbol`, `start`, `end` |
## 🚀 设计亮点
### 1. 代码质量
-**类型提示完整**:所有方法都有完整的类型提示
-**私有方法提取**:重复逻辑提取为私有方法
-**错误处理统一**:统一的错误处理机制
-**代码风格规范**符合PEP 8标准
### 2. 功能完整性
-**多种插入方式**:支持不同场景的数据插入
-**丰富查询接口**:支持多种查询需求
-**统计分析功能**:提供完整的统计分析
-**范围查询支持**:支持价格和成交量范围查询
### 3. 性能优化
-**索引利用**:充分利用数据库索引
-**条件构建优化**:统一的查询条件构建
-**时间处理优化**:统一的时间参数处理
## 📊 方法统计
| 类别 | 数量 | 方法列表 |
|------|------|----------|
| 私有方法 | 2 | `_process_time_parameter`, `_build_query_conditions` |
| 插入方法 | 4 | `insert_data_to_mysql`, `insert_data_to_mysql_fast`, `insert_data_to_mysql_chunk`, `insert_data_to_mysql_simple` |
| 基础查询 | 4 | `query_latest_data`, `query_data_by_tradeId`, `query_trade_data_by_symbol`, `query_trade_data_by_side` |
| 便捷查询 | 3 | `query_buy_trades`, `query_sell_trades`, `get_recent_trades` |
| 统计分析 | 2 | `get_trade_statistics`, `get_volume_price_analysis` |
| 范围查询 | 2 | `get_trades_by_price_range`, `get_trades_by_volume_range` |
| **总计** | **17** | **完整的功能覆盖** |
## 📝 使用示例
### 基本使用
```python
# 创建实例
db_trade_data = DBTradeData("mysql+pymysql://user:pass@localhost/db")
# 插入数据
df = pd.DataFrame({
'symbol': ['BTC-USDT'],
'ts': [1654161646974],
'date_time': ['2022-06-01 12:34:56'],
'tradeId': ['242720720'],
'side': ['sell'],
'sz': [0.00001],
'px': [29963.2],
'create_time': ['2024-01-01 10:00:00']
})
db_trade_data.insert_data_to_mysql(df)
```
### 查询示例
```python
# 查询最新交易
latest = db_trade_data.query_latest_data('BTC-USDT')
# 查询买入交易
buy_trades = db_trade_data.query_buy_trades('BTC-USDT', start='2024-01-01')
# 获取交易统计
stats = db_trade_data.get_trade_statistics('BTC-USDT')
# 价格范围查询
trades = db_trade_data.get_trades_by_price_range(50000, 60000, 'BTC-USDT')
# 成交量分析
analysis = db_trade_data.get_volume_price_analysis('BTC-USDT')
```
### 统计分析示例
```python
# 获取完整统计信息
stats = db_trade_data.get_trade_statistics('BTC-USDT', start='2024-01-01', end='2024-01-31')
# 返回:总交易数、买卖数量、成交量、价值、价格范围等
# 获取买卖方向分析
analysis = db_trade_data.get_volume_price_analysis('BTC-USDT')
# 返回:按买卖方向分组的成交量、价值、平均价格等
```
## 🔄 兼容性说明
-**向后兼容**:保持与现有代码的兼容性
-**扩展性强**:易于添加新的查询方法
-**配置灵活**:支持多种数据库配置
-**错误处理**:完善的错误处理机制
## 📈 总结
`DBTradeData` 类提供了完整的交易数据管理功能:
1. **功能完整性**:支持所有常见的交易数据操作
2. **性能优化**:多种插入方式和查询优化
3. **代码质量**:类型提示、错误处理、代码规范
4. **易用性**:丰富的查询接口和便捷方法
5. **扩展性**:易于维护和扩展
该类为加密货币交易数据的存储、查询和分析提供了强大的支持,是量化交易系统的重要组成部分。