问题描述
/
解决方案
在 ptrade 量化平台的回测环境中,滑点(Slippage)是模拟真实交易中委托价格与实际成交价格之间价差的重要机制。关于同时设置 set_fixed_slippage(固定滑点)和 set_slippage(百分比滑点)时的处理逻辑,以下是详细的解析与建议:
1. 核心解答:系统如何判断?
根据 ptrade 官方 API 文档,并未明确说明两者同时设置时的叠加或优先级规则。在绝大多数标准量化框架的底层实现中,滑点模型通常是单一的。因此,如果在 initialize 函数中同时调用了这两个接口,通常是后调用的函数会覆盖先调用的函数,即最后一次设置的滑点模型生效。
为了保证回测结果的准确性和逻辑的严谨性,强烈建议在策略中只选择其中一种滑点模式进行设置,避免同时使用。
2. 两种滑点模式的区别与计算公式
模式一:固定滑点 (set_fixed_slippage)
- 接口说明:设置一个固定的绝对数值作为价差。
- 计算公式:
最终成交价格 = 委托价格 ± fixedslippage / 2 - 默认值:0.0
- 适用场景:适用于价格波动较小、或者你希望每笔交易承担固定金额滑点成本的策略。
- 示例:设置固定滑点为 0.02 元。如果买入委托价为 10.00 元,实际成交价将变为 10.01 元(10.00 + 0.02/2)。
模式二:百分比滑点 (set_slippage)
- 接口说明:设置当时价格的一个百分比作为价差。
- 计算公式:
最终成交价格 = 委托价格 ± 委托价格 * slippage / 2 - 默认值:0.1(即 10% 的比例,注意:实际使用中通常设置较小的值,如 0.002 表示 0.2%)
- 适用场景:适用于价格差异较大的股票池,滑点成本随股价高低动态调整,更贴近真实市场的冲击成本。
- 示例:设置滑点比例为 0.002(0.2%)。如果买入委托价为 10.00 元,实际成交价将变为 10.01 元(10.00 + 10.00 * 0.002 / 2)。
3. 最佳实践代码示例
在编写策略时,请在 initialize 函数中明确选择一种滑点模型:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 【推荐做法】根据策略需求,二选一即可
# 选项 A:使用固定滑点(例如:买卖各承担 0.01 元的滑点)
# set_fixed_slippage(fixedslippage=0.02)
# 选项 B:使用百分比滑点(例如:买卖各承担千分之一的滑点)
set_slippage(slippage=0.002)
def handle_data(context, data):
pass
4. 总结
- 不要同时混用:避免底层覆盖逻辑带来的回测误差。
- 明确业务需求:高价股多用百分比滑点,低价股或特定品种可考虑固定滑点。
- 注意除以 2 的逻辑:ptrade 的滑点参数是双边总滑点,单边成交时系统会自动除以 2。