特别声明
本公众号所有内容仅为个人量化技术研究、思路分享与案例分析,不构成任何投资建议或股票推荐。金融市场具有较高风险,所有操作决策需建立在独立判断之上。文中提及的任何策略、指标或方法均存在局限性,过往表现不代表未来收益,且可能随市场环境变化而失效。文章仅为技术分享学习使用,不可直接用于实盘。为什么要写这个回测框架?
作为量化交易者,你是否也曾遇到这些困扰:
- ❌ 回测框架太复杂:backtrader、zipline学习曲线陡峭,配置繁琐
- ❌ 数据获取麻烦:需要手动下载数据、清洗对齐、处理缺失
- ❌ 交易模拟不真实:没有考虑滑点、佣金、涨跌停等实际约束
- ❌ 性能分析不全面:只有收益率,缺乏夏普比率、最大回撤等专业指标
- ❌ 无法对接QMT:想用迅投QMT的历史数据,却发现框架不支持
为了解决这些问题,我开发了 EasyXT回测框架 —— 一个专为Python量化交易者设计的轻量级、易扩展的回测引擎。
🎯 核心特性
1️⃣ 多数据源智能切换
自动管理三个数据源,按优先级使用:
DuckDB本地数据库 ⚡最快
QMT历史数据 📊可靠
Tushare在线API 🌐补充
2️⃣ 完整的交易模拟
# 真实的交易环境模拟engine = BacktestEngine( initial_cash=1000000, # 初始资金100万 commission=0.001, # 佣金0.1% slippage=0.001, # 滑点0.1%)
3️⃣ 专业的性能分析
自动计算全面的风险收益指标:
收益指标
风险指标
风险调整收益
- 夏普比率:(年化收益 - 无风险利率) / 波动率
4️⃣ 极简的策略开发
继承策略基类,只需实现3个方法:
from easyxt_backtest.strategy_base import StrategyBaseclassMyStrategy(StrategyBase):defselect_stocks(self, date: str) -> List[str]:"""选股逻辑"""# 1. 获取股票池 stocks = self.data_manager.get_index_components('000300.SH', date)# 2. 获取基本面数据 df = self.data_manager.get_fundamentals( codes=stocks, date=date, fields=['pe_ratio', 'market_cap'] )# 3. 应用筛选条件 df = df[df['pe_ratio'] < 20] # PE < 20# 4. 返回选中的股票return df.nsmallest(10, 'pe_ratio').index.tolist()defget_target_weights(self, date: str, selected_stocks: List[str]) -> Dict[str, float]:"""权重分配""" weight = 1.0 / len(selected_stocks)return {stock: weight for stock in selected_stocks}defget_rebalance_dates(self, start_date: str, end_date: str) -> List[str]:"""调仓日期"""returnself._get_first_trading_days_monthly(start_date, end_date)
5️⃣ 智能容错机制
回测中最头疼的就是数据缺失问题,框架已内置解决方案:
- 🔍 自动查找最近价格:调仓日数据缺失时,自动查找最近交易日的价格
- 🔄 多数据源自动切换:一个数据源失败,自动尝试下一个
📊 实战案例:小市值策略回测
以经典的"小市值策略"为例,展示框架的使用方法。
策略逻辑
从中小板综指中筛选市值最小的5只股票,每月第一个交易日调仓。
完整代码
from easyxt_backtest import DataManager, BacktestEnginefrom easyxt_backtest.strategies import SmallCapStrategy# 1. 创建数据管理器dm = DataManager( duckdb_path='D:/StockData/stock_data.ddb', tushare_token='your_token_here'# 可选)# 2. 创建策略strategy = SmallCapStrategy( index_code='399101.SZ', # 中小板综指 select_num=5, # 选5只股票 rebalance_freq='monthly'# 每月调仓)strategy.data_manager = dm# 3. 创建回测引擎engine = BacktestEngine( initial_cash=1000000, # 100万初始资金 commission=0.001, # 万三佣金 data_manager=dm)# 4. 运行回测result = engine.run_backtest( strategy=strategy, start_date='20230101', end_date='20231231')# 5. 查看结果result.print_summary()# 6. 保存交易记录result.trades.to_csv('trades.csv')result.portfolio_history.to_csv('portfolio.csv')
回测结果示例
====================================================================== 回测结果摘要======================================================================【收益指标】 总收益率: 45.23% 年化收益率: 15.78% 初始资金: 1,000,000.00 元 最终资金: 1,452,300.00 元【风险指标】 最大回撤: -18.45% 波动率: 22.34% 夏普比率: 0.71【交易统计】 总交易次数: 120 交易天数: 243======================================================================
🚀 如何使用?
方式一:直接使用(推荐)
git clone https://github.com/quant-king299/EasyXT.gitcd EasyXT/easyxt_backtest# 快速体验python test_framework.py# 查看示例cd examplespython small_cap_backtest.py
方式二:作为库导入
# 安装到项目路径后直接导入from easyxt_backtest import DataManager, BacktestEnginefrom easyxt_backtest.strategies import SmallCapStrategy# 你的策略代码...
方式三:集成到101因子平台
我们还将回测框架集成到了101因子分析平台中,提供Streamlit可视化界面:
cd 101因子/101因子分析平台streamlit run main_app.py
打开浏览器访问 http://localhost:8501,即可在Web界面中配置参数、运行回测、查看结果!
💡 框架亮点
🎨 代码简洁,学习成本低
整个核心代码不到1000行,结构清晰:
engine.pydata_manager.pyperformance.pystrategy_base.py
适合学习和二次开发。
🔧 高度可扩展
📦 开箱即用
内置完整的示例策略:
- ✅ 小市值策略(SmallCapStrategy)
- ✅ 策略基类(StrategyBase、FactorStrategyBase)
- ✅ 测试用例(test_framework.py)
⚡ 性能优异
使用DuckDB本地数据库:
🛠️ 技术实现
架构设计
┌─────────────────────────────────────────┐│ BacktestEngine ││ (回测引擎 - 主控逻辑) │└──────────────────┬──────────────────────┘ │ ┌─────────┴─────────┐ │ │┌────────▼────────┐ ┌────────▼────────┐│ DataManager │ │ Strategy ││ (数据管理) │ │ (策略) │└────────┬────────┘ └────────┬────────┘ │ │ │ ┌───────────┴──────────┐ │ │ Performance │ │ │ (性能分析) │ │ └──────────────────────┘┌────────▼───────────────────────────────┐│ Data Sources ││ ┌─────────┐ ┌─────┐ ┌─────────┐ ││ │ DuckDB │ │ QMT │ │ Tushare │ ││ └─────────┘ └─────┘ └─────────┘ │└────────────────────────────────────────┘
数据流转
初始化 → 获取交易日历 → 循环每个交易日 │ ├─ 1. 策略选股 ├─ 2. 计算目标权重 ├─ 3. 执行调仓(卖出/买入) ├─ 4. 更新持仓 └─ 5. 记录交易 └─→ 性能分析 → 生成报告
📈 待开发功能
我们计划在后续版本中添加:
📚 相关资源
项目地址:https://github.com/quant-king299/EasyXT
文档目录:
- 快速开始:
easyxt_backtest/README.md - 使用示例:
easyxt_backtest/examples/
技术支持:
🎁 结语
量化交易是一个不断迭代、持续优化的过程。一个优秀的回测框架,能够帮助你:
EasyXT回测框架的设计理念是:简单、易用、专业。希望它能成为你量化交易路上的得力助手!
🔥 立即体验
git clone https://github.com/quant-king299/EasyXT.gitcd EasyXT/easyxt_backtestpython test_framework.py
⭐ 如果觉得有用,请给个Star支持!
项目地址:github.com/quant-king299/EasyXT
📱 关注我
欢迎扫码持续关注公众号,会持续分享
🔍 公众号名称: 王者quant策略工坊📚 分享内容: 量化交易、Python编程、投资策略🎯 更新频率: 持续更新,干货满满
通过公众号您可以获得:
本教程仅供学习参考,实际交易请谨慎操作