问题描述
解决方案
在 JoinQuant(聚宽)回测中,要设置每笔交易固定 0.02 元的滑点,需要在 initialize 函数中使用 set_slippage 函数,并配合 FixedSlippage 对象来实现。
设置方法
FixedSlippage(0.02) 表示设定一个固定的价差为 0.02 元。在实际交易撮合时:
- 买入:成交价 = 原本成交价 + 0.01 元
- 卖出:成交价 = 原本成交价 - 0.01 元
代码示例
以下是一个完整的最小策略示例,展示了如何在初始化阶段设置该滑点:
# -*- coding: utf-8 -*-
def initialize(context):
# 设置我们要操作的股票,这里以平安银行为例
g.security = '000001.XSHE'
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# -----------------------------------------------------------
# 设置固定滑点:价差为 0.02 元
# 效果:交易时买入价增加 0.01 元,卖出价减少 0.01 元
set_slippage(FixedSlippage(0.02))
# -----------------------------------------------------------
# 每天运行一次
run_daily(market_open, time='every_bar')
def market_open(context):
# 简单的买入示例
if g.security not in context.portfolio.positions:
order(g.security, 1000)
log.info("买入股票,滑点将导致成交价上浮 0.01 元")
详细说明
- 函数位置:
set_slippage必须在initialize(context)函数中调用。 - 参数解释:
FixedSlippage(0.02):创建一个固定值滑点对象。参数0.02代表双边总价差。- 如果不指定
type参数,该滑点设置将默认应用于所有交易品种(股票、基金等)。
- 针对特定品种设置:
如果只想对股票设置该滑点,可以指定type='stock':set_slippage(FixedSlippage(0.02), type='stock')
Q&A
Q: FixedSlippage(0.02) 是指每股成本增加 0.02 元吗?
A: 不是。FixedSlippage(0.02) 定义的是买卖之间的价差。系统在撮合时取价差的一半应用到单边交易中。因此,买入时价格增加 0.01 元,卖出时价格减少 0.01 元,单次交易的额外成本是 0.01 元/股。
Q: 如果不设置 set_slippage,系统默认滑点是多少?
A: 如果没有调用 set_slippage 函数,聚宽系统默认使用的滑点是 PriceRelatedSlippage(0.00246),即按照成交价格的 0.246% 计算滑点。
Q: 除了固定滑点,还支持百分比滑点吗?
A: 支持。可以使用 PriceRelatedSlippage(value) 来设置百分比滑点。例如 set_slippage(PriceRelatedSlippage(0.002)) 表示滑点为当时价格的 0.2%(买入加 0.1%,卖出减 0.1%)。