问题描述
在交易模块调用set_commission设置佣金时报错
解决方案
PTrade 中 set_commission 函数的使用场景
根据 PTrade API 文档规定,set_commission 函数仅在回测模块可用。
为什么在交易模块调用会报错?
如果您在交易(实盘/模拟盘)模块中调用了 set_commission,系统会抛出错误。这是因为:
- 实盘环境的独立性:在真实的交易环境中,您的交易佣金费率是由您开户的券商在柜台系统中配置好的。策略代码无权也无法修改真实的账户佣金费率。
- API 限制:为了防止混淆,PTrade 引擎严格限制了该接口只能在回测环境(用于模拟测试不同费率对策略收益的影响)的
initialize函数中调用。
正确的使用方法(仅限回测)
在回测环境中,您可以通过该函数自定义佣金费率和最低佣金,以使回测结果更贴近您的实际交易成本。
接口说明:
set_commission(commission_ratio=0.0003, min_commission=5.0, type="STOCK")
参数说明:
commission_ratio:佣金费率,默认股票每笔交易的佣金费率是万分之三(0.0003),ETF基金、LOF基金每笔交易的佣金费率是万分之八。min_commission:最低交易佣金,默认每笔交易最低扣5元佣金。type:交易类型,默认为 "STOCK" (目前支持 "STOCK", "ETF", "LOF")。
代码示例(回测环境):
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 将佣金费率设置为万分之三,将最低手续费设置为3元(仅回测生效)
set_commission(commission_ratio=0.0003, min_commission=3.0)
def handle_data(context, data):
pass
补充说明:回测手续费是如何计算的?
在 PTrade 回测中,手续费的计算公式为:手续费 = 佣金费 + 经手费
- 佣金费 = 佣金费率 * 交易总金额(若计算结果小于设置的最低佣金
min_commission,则按最低佣金收取)。 - 经手费 = 经手费率(固定为万分之0.487) * 交易总金额。
总结:如果您正在编写准备用于实盘交易的策略,请直接删除或注释掉 set_commission 相关的代码,实盘交易会自动按照您账户的实际费率进行扣费。