当前位置:首页>python>【开源发布】EasyXT回测框架:为Python量化交易者打造的轻量级回测引擎

【开源发布】EasyXT回测框架:为Python量化交易者打造的轻量级回测引擎

  • 2026-10-11 05:58:27
【开源发布】EasyXT回测框架:为Python量化交易者打造的轻量级回测引擎

特别声明

本公众号所有内容仅为个人量化技术研究、思路分享与案例分析,不构成任何投资建议或股票推荐。金融市场具有较高风险,所有操作决策需建立在独立判断之上。文中提及的任何策略、指标或方法均存在局限性,过往表现不代表未来收益,且可能随市场环境变化而失效。文章仅为技术分享学习使用,不可直接用于实盘。

为什么要写这个回测框架?

作为量化交易者,你是否也曾遇到这些困扰:

  • ❌ 回测框架太复杂:backtrader、zipline学习曲线陡峭,配置繁琐
  • ❌ 数据获取麻烦:需要手动下载数据、清洗对齐、处理缺失
  • ❌ 交易模拟不真实:没有考虑滑点、佣金、涨跌停等实际约束
  • ❌ 性能分析不全面:只有收益率,缺乏夏普比率、最大回撤等专业指标
  • ❌ 无法对接QMT:想用迅投QMT的历史数据,却发现框架不支持

为了解决这些问题,我开发了 EasyXT回测框架 —— 一个专为Python量化交易者设计的轻量级、易扩展的回测引擎。

🎯 核心特性

1️⃣ 多数据源智能切换

自动管理三个数据源,按优先级使用:

DuckDB本地数据库 ⚡最快

  • 支持本地存储的历史行情数据
  • 查询速度极快,2023年全年回测仅需1-2分钟
  • 支持市值、财务等多维度数据

QMT历史数据 📊可靠

  • 直接读取迅投QMT下载的历史数据
  • 数据质量高,包含复权信息
  • 无需额外配置,开箱即用

Tushare在线API 🌐补充

  • 当本地数据缺失时自动调用
  • 支持指数成分股、财务数据等
  • 智能日期回退机制(最多查找10天)

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.py
     - 回测引擎(400行)
  • data_manager.py
     - 数据管理(500行)
  • performance.py
     - 性能分析(300行)
  • strategy_base.py
     - 策略基类(400行)

适合学习和二次开发。

🔧 高度可扩展

  • 选股策略
    :基于因子筛选股票
  • 因子策略
    :多因子加权排序
  • 择时策略
    :市场环境判断
  • 组合策略
    :多策略动态配置

📦 开箱即用

内置完整的示例策略:

  • ✅ 小市值策略(SmallCapStrategy)
  • ✅ 策略基类(StrategyBase、FactorStrategyBase)
  • ✅ 测试用例(test_framework.py)

⚡ 性能优异

使用DuckDB本地数据库:

  • 2023年全年回测:1-2分钟
  • 10年历史回测:10-15分钟
  • 支持增量更新,避免重复计算

🛠️ 技术实现

架构设计

┌─────────────────────────────────────────┐│            BacktestEngine               ││         (回测引擎 - 主控逻辑)          │└──────────────────┬──────────────────────┘                   │         ┌─────────┴─────────┐         │                   │┌────────▼────────┐ ┌────────▼────────┐│   DataManager   │ │    Strategy     ││  (数据管理)   │ │    (策略)     │└────────┬────────┘ └────────┬────────┘         │                   │         │       ┌───────────┴──────────┐         │       │     Performance      │         │       │    (性能分析)      │         │       └──────────────────────┘┌────────▼───────────────────────────────┐│              Data Sources              ││  ┌─────────┐   ┌─────┐   ┌─────────┐  ││  │ DuckDB  │   │ QMT │   │ Tushare │  ││  └─────────┘   └─────┘   └─────────┘  │└────────────────────────────────────────┘

数据流转

初始化 → 获取交易日历 → 循环每个交易日                        │                        ├─ 1. 策略选股                        ├─ 2. 计算目标权重                        ├─ 3. 执行调仓(卖出/买入)                        ├─ 4. 更新持仓                        └─ 5. 记录交易            └─→ 性能分析 → 生成报告

📈 待开发功能

我们计划在后续版本中添加:

  • 可视化图表
    :净值曲线、回撤图、持仓分析
  • HTML报告
    :一键生成专业的回测报告PDF
  • 参数优化
    :网格搜索、遗传算法优化参数
  • 多策略组合
    :同时运行多个策略,动态分配资金
  • 实盘对接
    :直接对接QMT实盘交易接口

📚 相关资源

项目地址:https://github.com/quant-king299/EasyXT

文档目录:

  • 快速开始:easyxt_backtest/README.md
  • 使用示例:easyxt_backtest/examples/
  • API文档:各模块的docstring

技术支持:

  • 提交Issue:GitHub Issues

🎁 结语

量化交易是一个不断迭代、持续优化的过程。一个优秀的回测框架,能够帮助你:

  • ✅ 快速验证想法:从概念到代码,从回测到实盘
  • ✅ 降低试错成本:在模拟环境中发现策略问题
  • ✅ 积累策略库:逐步建立自己的策略体系
  • ✅ 提升交易能力:通过回测反思、总结、改进

EasyXT回测框架的设计理念是:简单、易用、专业。希望它能成为你量化交易路上的得力助手!

🔥 立即体验

git clone https://github.com/quant-king299/EasyXT.gitcd EasyXT/easyxt_backtestpython test_framework.py

⭐ 如果觉得有用,请给个Star支持!

项目地址:github.com/quant-king299/EasyXT

📱 关注我

欢迎扫码持续关注公众号,会持续分享

🔍 公众号名称: 王者quant策略工坊📚 分享内容: 量化交易、Python编程、投资策略🎯 更新频率: 持续更新,干货满满

通过公众号您可以获得:

  • 📈 最新的量化交易策略分享
  • 💻 Python量化编程技巧
  • 📊 市场分析和投资心得
  • 🚀 EasyXT功能更新和使用技巧
  • 💡 量化交易实战案例

本教程仅供学习参考,实际交易请谨慎操作

最新文章

随机文章