🚀 AI 一键生成 ptrade 策略代码

为什么ptrade回测中累计盈亏与手续费计算不符?(滑点设置详解)

ptrade | 发布时间: 2026/5/28
以下内容由 EasyQuant 生成。

问题描述

回测-回测详情内累计盈亏显示不正确。

客户反馈进行的日策略的回测,正常应该只亏手续费,但是根据手续费的计算,与累计盈亏不符;

解决方案

在 ptrade 量化平台进行回测时,如果发现累计盈亏的亏损额大于您计算出的手续费,最常见的原因是回测引擎默认计算了滑点(Slippage)成本

1. 什么是滑点?

滑点是指在真实交易中,委托价格与实际成交价格之间的价差。为了让回测结果更逼近真实的交易环境,ptrade 引擎在撮合成交时,默认会加入滑点成本。

根据 ptrade API 文档,平台提供了两种滑点设置方式,且都有默认值:

  • 比例滑点 (set_slippage):默认滑点比例为 0.1(即千分之一)。最终成交价格 = 委托价格 ± 委托价格 * slippage / 2。
  • 固定滑点 (set_fixed_slippage):默认固定滑点为 0.0

如果您在策略中没有显式地关闭滑点,系统会按照默认的比例滑点扣除额外的交易成本,这就是导致累计盈亏与纯手续费计算不符的原因。

2. 如何解决?

如果您希望在回测中只计算手续费,不计算滑点(例如为了纯粹验证交易逻辑),您需要在策略的 initialize 函数中,显式地将滑点设置为 0。

代码示例:

def initialize(context):
    # 设置股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 1. 将比例滑点设置为 0
    set_slippage(slippage=0.0)
    
    # 2. 将固定滑点设置为 0(可选,默认为0)
    set_fixed_slippage(fixedslippage=0.0)
    
    # 3. 设置您预期的手续费率(例如万分之三,最低5元)
    set_commission(commission_ratio=0.0003, min_commission=5.0)

def handle_data(context, data):
    # 您的交易逻辑
    pass

3. 总结与建议

  • 排查误差:当回测收益与手工计算出现偏差时,首先检查手续费 (set_commission)滑点 (set_slippage / set_fixed_slippage) 的设置。
  • 实盘贴近度:虽然将滑点设置为 0 可以让账面数据完全符合理论计算,但在实际交易中滑点是不可避免的(尤其是市价单或流动性较差的标的)。建议在最终评估策略时,保留一定的滑点设置,以测试策略的抗冲击成本能力。