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 |
完整的功能覆盖 |
📝 使用示例
基本使用
# 创建实例
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)
查询示例
# 查询最新交易
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')
统计分析示例
# 获取完整统计信息
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 类提供了完整的交易数据管理功能:
- 功能完整性:支持所有常见的交易数据操作
- 性能优化:多种插入方式和查询优化
- 代码质量:类型提示、错误处理、代码规范
- 易用性:丰富的查询接口和便捷方法
- 扩展性:易于维护和扩展
该类为加密货币交易数据的存储、查询和分析提供了强大的支持,是量化交易系统的重要组成部分。