问题描述
想模拟实际交易中的手续费
解决方案
在PTrade量化平台中,为了在回测阶段尽可能逼近真实的交易环境,准确评估策略的净收益,我们需要设置合理的交易成本。PTrade 提供了 set_commission 函数,专门用于在回测模块中设置佣金费率。
1. set_commission 函数简介
set_commission 函数用于设置回测时的佣金费率和最低手续费。请注意,该函数仅在回测模块可用,实盘交易中的手续费由券商柜台实际收取,策略代码无法更改。
函数原型:
set_commission(commission_ratio=0.0003, min_commission=5.0, type="STOCK")
2. 参数详解
commission_ratio(float):佣金费率。默认情况下,股票每笔交易的佣金费率是万分之三(0.0003),ETF基金、LOF基金每笔交易的佣金费率是万分之八(0.0008)。min_commission(float):最低交易佣金。默认每笔交易最低扣除5元佣金。type(string):交易类型。不传参默认为"STOCK"。目前支持"STOCK"(股票)、"ETF"、"LOF"。
3. PTrade 回测手续费计算规则
在PTrade的回测引擎中,单笔交易的总手续费计算公式如下:
总手续费 = 佣金费 + 经手费
- 佣金费 =
commission_ratio* 交易总金额。如果计算出的佣金费小于min_commission(最低佣金),则按min_commission收取。 - 经手费 = 经手费率(固定为万分之0.487,即 0.0000487) * 交易总金额。
4. 代码示例
通常,我们需要在策略的初始化函数 initialize 中调用 set_commission 来完成设置。
def initialize(context):
# 设置我们要操作的股票
g.security = '600570.SS'
set_universe(g.security)
# 假设你的实际券商佣金费率是万分之二点五,最低收费5元
# 将佣金费率设置为 0.00025,最低手续费设置为 5.0 元
set_commission(commission_ratio=0.00025, min_commission=5.0, type="STOCK")
# 如果你还交易ETF,可以单独为ETF设置费率(例如免五,费率万一)
# set_commission(commission_ratio=0.0001, min_commission=0.0, type="ETF")
def handle_data(context, data):
# 策略逻辑...
pass
5. 注意事项
- 仅限回测:再次强调,此函数只影响回测结果,不影响实盘/模拟盘的实际扣费。
- 印花税:PTrade的回测引擎会自动处理印花税(通常是卖出时单边收取),开发者无需通过
set_commission额外设置印花税。 - 期货手续费:如果你在做期货策略回测,请使用专门的
set_future_commission函数来设置期货手续费。