🚀 AI 一键生成 qmt 策略代码

如何在 QMT 中回测我的量化交易策略并分析其表现?

qmt | 发布时间: 2025/11/24
以下内容由 EasyQuant 生成。

问题描述

我写好了一个交易策略,如何对它进行历史数据回测?

解决方案

在 QMT 平台中对已编写好的 Python 策略进行历史数据回测,主要分为数据准备参数设置执行回测三个步骤。

以下是详细的操作流程:

1. 补充历史数据(至关重要)

QMT 的回测依赖本地数据,因此在回测前必须下载所需的数据。

  • 操作入口:点击客户端顶部的**【数据管理】**。
  • 操作步骤
    1. 选择您策略涉及的市场(如沪深A股)和品种。
    2. 选择需要回测的周期(如日线、1分钟线等)。
    3. 设置下载的时间段(应覆盖您的回测区间)。
    4. 点击下载,等待数据补充完成。

2. 设置回测参数

您可以通过策略编辑器界面代码两种方式设置回测参数。

方式 A:通过策略编辑器界面设置

在策略编辑器右侧面板中,找到**【回测参数】**标签页进行设置:

  • 时间区间:设置回测的开始时间和结束时间。
  • 基准:设置参考基准(如沪深300指数)。
  • 资金:设置初始资金(如 1,000,000)。
  • 费率与滑点:设置手续费(按比例或固定值)、印花税及滑点(模拟冲击成本)。
  • 基本信息:在【基本信息】标签页中,确认默认周期默认品种(这将决定回测的主图驱动行情)。

方式 B:通过代码设置(推荐)

在策略的 init(ContextInfo) 函数中直接写入参数,代码中的设置优先级高于界面设置

def init(ContextInfo):
    # 1. 设定回测起止时间
    ContextInfo.start = '2020-01-01 00:00:00'
    ContextInfo.end = '2021-12-31 15:00:00'
    
    # 2. 设定基准 (例如沪深300)
    ContextInfo.benchmark = '000300.SH'
    
    # 3. 设定初始资金
    ContextInfo.capital = 1000000
    
    # 4. 设定手续费 (例如万分之三)
    # 参数顺序: [买入印花税, 卖出印花税, 开仓手续费, 平仓手续费, 平今手续费, 最低佣金]
    # 如果只传一个浮点数,则代表开平仓手续费相同,其余为0
    ContextInfo.set_commission(0, [0.001, 0.001, 0.0003, 0.0003, 0, 5])
    
    # 5. 设定滑点 (例如 1跳)
    # 参数1: 滑点类型 (0:跳数, 1:固定值, 2:比例)
    ContextInfo.set_slippage(0, 1) 
    
    # 6. 设定股票池
    ContextInfo.set_universe(['600000.SH', '000001.SZ'])

3. 执行回测与查看结果

  1. 启动回测:在策略编辑器顶部工具栏,点击**【回测】**按钮(注意不要点击“运行”,运行是用于实时行情或模拟盘)。
  2. 查看绩效
    • 回测完成后,界面会跳转到回测结果页。
    • 绩效指标:查看年化收益率、夏普比率、最大回撤、Alpha/Beta 等指标。
    • 可视化图表:主图会显示策略净值曲线与基准曲线的对比,以及买卖点标记。
  3. 详细分析
    • 交易明细:查看每一笔成交的时间、价格和数量。
    • 持仓分析:查看每日持仓市值和仓位变化。
    • 日志输出:如果在代码中使用了 print()ContextInfo.paint(),可以在日志面板或副图中查看调试信息。

常见问题提示

  • 无交易记录:如果回测结果为空,请检查是否已下载对应时间段和周期的历史数据,或者检查 ContextInfo.set_universe 是否设置了有效的股票池。
  • 撮合机制:回测模式下,默认在信号产生的下一根 K 线的第一个 tick(或开盘价)撮合成交。如果需要在当根 K 线成交,需在 passorder 函数中设置 quickTrade=1(但这可能引入未来函数,需谨慎使用)。