问题描述
/
解决方案
问题原因分析
在 ptrade 量化平台中,您遇到的 set_commission 设置未生效的问题,是因为没有指定交易类型(type)。
根据 ptrade API 文档,set_commission 函数的默认参数中,type 默认为 "STOCK"(普通股票)。当您使用 set_commission(commission_ratio=0.0002, min_commission=0.001) 时,系统实际上只修改了股票的佣金费率。
而您交易的代码 5105** 属于 ETF 基金。由于您没有专门为 ETF 设置费率,系统在回测撮合时会使用 ETF 的默认费率(默认 ETF/LOF 每笔交易的佣金费率是万分之八)。
解决方法
要为 ETF 设置特定的佣金费率,您需要在调用 set_commission 时,显式地传入 type="ETF" 参数。
正确的代码写法如下:
def initialize(context):
# 设置 ETF 的佣金费率为万分之二,最低佣金为 0.001 元
set_commission(commission_ratio=0.0002, min_commission=0.001, type="ETF")
# 如果您的策略同时交易股票,建议也把股票的费率设置好
set_commission(commission_ratio=0.0002, min_commission=5.0, type="STOCK")
g.security = '510500.SS'
set_universe(g.security)
set_commission 接口详解
set_commission(commission_ratio=0.0003, min_commission=5.0, type="STOCK")
- 使用场景:仅在回测模块可用。
- 参数说明:
commission_ratio(float):佣金费率。默认股票是万分之三(0.0003),ETF/LOF 默认是万分之八(0.0008)。min_commission(float):最低交易佣金。默认每笔交易最低扣 5 元。type(str):交易类型。不传参默认为 "STOCK"。目前支持"STOCK"(股票)、"ETF"、"LOF"。
补充:ptrade 回测手续费计算规则
在 ptrade 回测中,总手续费的计算公式如下:
手续费 = 佣金费 + 经手费
- 佣金费 =
commission_ratio* 交易总金额。(如果计算出的佣金费小于min_commission,则按min_commission收取)。 - 经手费 = 经手费率 (固定为万分之 0.487) * 交易总金额。
因此,即使您将佣金设置得很低,最终扣除的费用中依然会包含系统固定的经手费部分,这一点在核对回测资金流水时需要注意。