crypto_backtesting framework based on polars, parquet and bulk_downloader
本项目旨在构建一个高性能的回测框架,结合 Python 的现代异步库 uvloop
、高效的列式存储格式 Parquet
、数据分析库 Polars
以及交互式可视化库 Plotly
,实现快速、灵活和可扩展的回测能力。
python -m data.fetch_3_um_data.py
- 功能:负责加载、存储、预处理交易数据。
- 技术栈:
- 数据存储:Parquet 格式。
- 数据处理:Polars。
- 特点:
- 利用 Parquet 的高压缩比和快速读取特性,提升数据加载性能。
- Polars 提供列式操作,支持多线程加速数据处理。
- 功能:执行核心回测逻辑,包括数据迭代、策略执行、账户更新。
- 技术栈:
- 异步支持:uvloop 提升事件循环效率。
- 特点:
- 使用异步事件驱动架构,提升性能。
- 支持多资产、多个时间频率的回测。
- 功能:用户可定义交易策略,包括入场、出场和风险管理逻辑。
- 特点:
- 提供标准化接口,便于策略开发。
- 支持自定义参数调优和多策略回测。
- 功能:生成交互式可视化报表,用于分析回测结果。
- 技术栈:
- Plotly 提供高质量、交互式图表。
- 特点:
- 支持交易数据、账户净值、指标等多维度可视化。
- 可生成独立 HTML 文件,便于分享。
- 数据加载:从 Parquet 文件加载历史交易数据,并进行预处理。
- 策略执行:按时间顺序迭代数据,对策略进行调用。
- 账户更新:实时计算账户状态,包括资金、持仓、收益等。
- 结果分析:聚合回测结果,生成指标和可视化报告。
- 文件格式:Parquet 文件按时间分区,支持增量加载。
- 数据结构:
- 时间戳 (timestamp)
- 资产代码 (symbol)
- 开盘价、最高价、最低价、收盘价 (OHLC)
- 成交量 (volume)
- uvloop 集成:
- 替换默认事件循环,提高异步任务的性能。
- 事件驱动:
- 数据流事件:每个时间点触发策略。
- 账户事件:策略触发订单后更新账户状态。
- 交互式图表:
- 净值曲线
- 收益分布
- 交易信号
- 实现方式:通过 Plotly 构建动态仪表盘,支持缩放、过滤。
graph TD
A[加载数据] --> B[预处理数据]
B --> C[初始化回测引擎]
C --> D[执行回测]
D --> E[生成回测结果]
E --> F[生成可视化报表]
- 加载数据:从 Parquet 文件中读取历史数据。
- 预处理数据:使用 Polars 清理、格式化数据。
- 初始化回测引擎:设置回测参数、策略、账户初始状态。
- 执行回测:按时间序列迭代,调用策略并更新账户。
- 生成回测结果:聚合回测数据,计算收益、风险指标等。
- 生成可视化报表:通过 Plotly 展示结果。
- IO 优化:
- 使用 Parquet 提升数据加载速度。
- 计算优化:
- Polars 支持多线程加速列操作。
- 使用异步事件循环减少阻塞。
- 内存优化:
- 按需加载数据,避免大规模内存占用。