3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade量化交易平台的回测环境中,设置滑点(Slippage)是为了模拟真实交易中因市场波动、网络延迟或深度不足导致的成交价与下单价之间的偏差。
以下是固定值滑点和按比例滑点的区别、适用场景以及代码示例。
| 特性 | 固定值滑点 (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元。 |
| 适用性 | 适合价格波动不大,或模拟固定档位(如买一卖一价差)的策略。 | 适合跨度时间长、涉及多只不同价位股票的通用策略。 |
推荐使用:按比例滑点 (set_slippage)
理由如下:
何时使用固定值?
这两个函数都必须在 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)
set_slippage(按比例)。set_fixed_slippage(固定值)。Q: 滑点设置多少比较合理?
A: 对于普通A股策略,资金量不大的情况下,通常设置为 0.001 (0.1%) 或 0.002 (0.2%) 比较符合真实情况。如果资金量非常大(如上亿),需要设置更高的滑点或结合冲击成本模型。
Q: 回测里的滑点包含手续费吗?
A: 不包含。滑点是价格偏差,手续费是交易成本。在PTrade中,手续费需要单独使用 set_commission 进行设置。
Q: 为什么我的回测收益比模拟盘高很多?
A: 可能是因为回测未设置滑点(默认为0或很小),或者滑点设置过低。真实交易中,市价单往往成交在较差的价格,建议在回测中适当调大滑点以提高策略的鲁棒性。