3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade量化交易平台的回测环境中,手续费(佣金)和滑点是模拟真实交易成本的重要组成部分。系统提供了专门的API来设置这些参数,其计算逻辑如下:
在PTrade回测中,总手续费由佣金费和经手费两部分组成。
$$总手续费 = 佣金费 + 经手费$$
如果不手动设置,PTrade回测的默认值为:
使用 set_commission 函数进行设置。
滑点用于模拟下单价格与实际成交价格之间的偏差。PTrade支持百分比滑点和固定滑点两种模式。
使用 set_slippage 设置。滑点值是一个比例。
使用 set_fixed_slippage 设置。滑点值是一个固定的金额(元)。
以下代码展示了如何在策略初始化阶段设置手续费和滑点:
def initialize(context):
# 设置股票池
g.security = '600570.SS'
set_universe(g.security)
# 1. 设置手续费
# 股票交易:佣金费率万分之三(0.0003),最低佣金5元
set_commission(commission_ratio=0.0003, min_commission=5.0, type='STOCK')
# 2. 设置滑点 (二选一)
# 方式A:设置百分比滑点
# 例如设置为0.2%,即0.002。
# 买入成交价 = 价格 + 价格 * 0.001
set_slippage(slippage=0.002)
# 方式B:设置固定滑点
# 例如设置为1分钱(0.01元)。
# 买入成交价 = 价格 + 0.005元
# set_fixed_slippage(fixedslippage=0.01)
def handle_data(context, data):
# 示例交易
order(g.security, 100)
Q1: 为什么滑点计算时要除以2?
A1: 在PTrade的设计中,滑点参数通常代表买一价和卖一价之间的价差(Spread)。实际成交时,假设是在盘口中间价成交,那么偏离中间价的幅度就是价差的一半。因此,最终成交价格是在基准价格的基础上加减滑点值的一半。
Q2: 经手费可以取消或修改吗?
A2: 根据API文档描述,set_commission 主要用于设置佣金费率和最低佣金。经手费是按照万分之0.487的固定费率计算的,API文档中未提供直接修改经手费率的参数,通常这部分被视为交易所收取的固定规费。
Q3: 回测中如果不设置滑点会有什么影响?
A3: 如果不设置滑点,PTrade可能会使用默认值(文档提及默认为0.1,即10%的比例,或者固定滑点默认为0.0)。如果默认为0.0,则回测成交价等于行情价,这会导致回测结果过于理想化,无法反映真实交易中因流动性不足或行情波动产生的成本。建议根据策略频率设置合理的滑点(如0.02元固定滑点或0.001比例滑点)。
Q4: set_commission 中的 type 参数支持哪些类型?
A4: 目前支持 'STOCK' (股票), 'ETF' (ETF基金), 'LOF' (LOF基金)。如果不传参,默认为 'STOCK'。不同品种可以分别设置不同的费率。