🚀 AI 一键生成 ptrade 策略代码

PTrade 回测解密:set_slippage 和 set_fixed_slippage 滑点设置有何不同?

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

问题描述

回测时设置滑点,固定值和按比例有什么区别,我应该用哪个?

解决方案

在PTrade量化交易平台的回测环境中,设置滑点(Slippage)是为了模拟真实交易中因市场波动、网络延迟或深度不足导致的成交价与下单价之间的偏差。

以下是固定值滑点按比例滑点的区别、适用场景以及代码示例。

1. 区别对比

特性 固定值滑点 (set_fixed_slippage) 按比例滑点 (set_slippage)
定义 在成交价基础上增加或减少一个固定的金额(如0.01元)。 在成交价基础上增加或减少一个固定的百分比(如0.1%)。
计算公式 成交价 = 原价 ± (固定值 / 2) 成交价 = 原价 ± (原价 × 比例 / 2)
对低价股影响 极大。例如股价2元,滑点设为0.1元,成本增加5%。 恒定。股价2元,滑点0.1%,成本仅增加0.002元。
对高价股影响 极小。例如股价1000元,滑点0.1元,几乎无感。 恒定。股价1000元,滑点0.1%,成本增加1元。
适用性 适合价格波动不大,或模拟固定档位(如买一卖一价差)的策略。 适合跨度时间长、涉及多只不同价位股票的通用策略。

2. 我应该用哪个?

推荐使用:按比例滑点 (set_slippage)

理由如下:

  1. 适应性强:A股市场股票价格差异巨大(从2元到2000元不等)。使用固定值会导致低价股的回测绩效被严重低估,而高价股的滑点成本被忽略。按比例滑点能公平地衡量所有标的。
  2. 符合长期回测:如果你的回测跨度好几年,股票价格可能会发生翻倍或腰斩,固定滑点无法适应这种价格变化,而比例滑点始终保持相对合理的冲击成本。
  3. 行业标准:大多数机构和量化回测通常采用成交额的万分之二到千分之二(0.02% - 0.2%)作为滑点标准。

何时使用固定值?

  • 当你专门研究Tick级别的高频策略,且明确知道你的交易总是损失固定的“一跳”(例如永远对手价下单,损失一个最小变动单位0.01元)时,使用固定值更为精确。

3. PTrade代码实现

这两个函数都必须在 initialize(context) 函数中调用。

方式一:设置按比例滑点(推荐)

通常设置为 0.002 (即0.2%) 或 0.001 (0.1%),具体视资金量大小而定。

def initialize(context):
    # 设置回测标的
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 【推荐】设置按比例滑点
    # 设为 0.002,代表双边滑点合计为 0.2%
    # 实际买入价格 = 价格 * (1 + 0.001)
    # 实际卖出价格 = 价格 * (1 - 0.001)
    set_slippage(slippage=0.002)

def handle_data(context, data):
    # 示例交易
    order(g.security, 100)

方式二:设置固定值滑点

通常设置为 0.01 或 0.02(即1-2分钱)。

def initialize(context):
    # 设置回测标的
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 【特定场景】设置固定值滑点
    # 设为 0.02,代表每股成本增加 0.02元
    # 实际买入价格 = 价格 + 0.01
    # 实际卖出价格 = 价格 - 0.01
    set_fixed_slippage(fixedslippage=0.02)

def handle_data(context, data):
    # 示例交易
    order(g.security, 100)

4. 总结

  • 通用策略、多股轮动、长周期回测:请使用 set_slippage(按比例)。
  • 超短线、Tick级微观结构研究:可考虑使用 set_fixed_slippage(固定值)。

Q&A 常见问题

Q: 滑点设置多少比较合理?
A: 对于普通A股策略,资金量不大的情况下,通常设置为 0.001 (0.1%)0.002 (0.2%) 比较符合真实情况。如果资金量非常大(如上亿),需要设置更高的滑点或结合冲击成本模型。

Q: 回测里的滑点包含手续费吗?
A: 不包含。滑点是价格偏差,手续费是交易成本。在PTrade中,手续费需要单独使用 set_commission 进行设置。

Q: 为什么我的回测收益比模拟盘高很多?
A: 可能是因为回测未设置滑点(默认为0或很小),或者滑点设置过低。真实交易中,市价单往往成交在较差的价格,建议在回测中适当调大滑点以提高策略的鲁棒性。