问题描述
解决方案
在 PTrade 回测环境中,您可以使用 set_commission 函数来设置交易佣金和最低手续费。
该函数通常在 initialize 初始化函数中调用。
代码实现
以下是设置股票交易佣金为万分之三,且最低手续费为 5 元的代码示例:
def initialize(context):
# 设置回测标的(示例)
g.security = '600570.SS'
set_universe(g.security)
# 设置手续费
# commission_ratio: 佣金比例,这里设为万分之三 (0.0003)
# min_commission: 最低手续费,这里设为 5 元
# type: 交易类型,默认为 'STOCK' (股票)
set_commission(commission_ratio=0.0003, min_commission=5.0, type='STOCK')
def handle_data(context, data):
# 示例交易逻辑
pass
参数说明
commission_ratio(float): 交易佣金费率。例如0.0003代表万分之三。min_commission(float): 最低交易佣金。即单笔交易计算出的佣金如果低于该值,则按该值收取。您要求的“最低 5 元”即通过此参数设置。type(str): 交易品种类型。支持'STOCK'(股票),'ETF'(ETF基金),'LOF'(LOF基金)。如果不传,默认为'STOCK'。
注意事项
- 仅限回测:
set_commission函数仅在回测模块中有效。实盘交易的手续费由券商柜台实际费率决定,策略代码无法修改。 - 费用构成:在 PTrade 回测中,总手续费 = 佣金费 + 经手费。
- 佣金费:
max(成交金额 * commission_ratio, min_commission)。 - 经手费:固定为成交金额的万分之 0.487(框架自动计算,无需额外设置)。
- 佣金费:
- 多品种设置:如果您同时交易股票和 ETF,建议分别设置。例如:
# 设置股票最低 5 元 set_commission(commission_ratio=0.0003, min_commission=5.0, type='STOCK') # 设置 ETF 最低 5 元 (ETF通常费率较低,如万分之 0.5) set_commission(commission_ratio=0.00005, min_commission=5.0, type='ETF')
Q&A
Q: 如果我不调用 set_commission,默认的手续费是多少?
A: 如果不显式调用该函数,PTrade 回测默认的股票佣金费率为万分之三(0.0003),最低佣金默认为 5 元。ETF 和 LOF 的默认费率为万分之八。
Q: set_commission 可以放在 handle_data 里吗?
A: 不建议。通常手续费是策略运行的基础环境配置,应当在 initialize 中一次性设置完成。虽然技术上可能不报错,但在盘中频繁重置费率不符合逻辑且消耗资源。
Q: 这个设置会影响印花税吗?
A: 不会。set_commission 仅控制券商佣金。印花税(目前卖出方收取)由系统根据交易所规则自动计算扣除。