在交易这场游戏中,每一次出手无论盈亏,你都得向券商/平台交手续费,它是侵蚀你利润、放大你亏损的隐形杀手。一个专业的策略回测,如果连手续费都不算,那无异于掩耳盗铃,Pine策略里的commission_type
和commission_value
这两个参数,就是帮你把这笔账算清楚的关键工具。
commission_type
:决定手续费的计算方式(按比例还是按固定金额)。commission_value
:决定手续费的具体数值。
两者必须配对使用,缺一不可。
commission_type
提供了三种选项,基本涵盖了市面上所有主流券商的收费模式:
- 按成交额百分比 (
strategy.commission.percent
) 这是commission_type
的默认模式,在国内股票和部分币圈交易所很常见。//@version=6 // 手续费设为成交额的0.1% strategy(title="我的策略", commission_type=strategy.commission.percent, commission_value=0.1)
- 按每手/每股固定金额 (
strategy.commission.cash_per_contract
) 这是期货和CFD交易中最主流的收费模式。//@version=6 // 每交易1手合约,收取0.8货币单位的手续费 strategy(title="我的策略", commission_type=strategy.commission.cash_per_contract, commission_value=0.80)
- 按每笔订单固定金额 (
strategy.commission.cash_per_order
) 一些美股券商或特定账户类型会采用这种模式,无论你买1股还是1000股,手续费都一样。//@version=6 // 每笔订单,固定收取1.25货币单位的手续费 strategy(title="我的策略", commission_type=strategy.commission.cash_per_order, commission_value=1.25)
下表清晰地展示了不同类型下的手续费是如何计算的:
- 必设项,无一例外:对于任何严肃的回测,手续费(
commission
)和滑点(slippage
)都是强制必设项。忽略它们是新手获取虚假回测结果的头号原因。 - 绝对忠于现实:别猜,别蒙。去翻你的券商官网,或者咨询你的客户经理,搞清楚你的真实交易成本,然后分毫不差地在这里设置好。
value
不能为0:只设置commission_type
,但忘了把commission_value
设成一个大于0的数,是新手常犯的错误。记住,commission_value
默认是0,你不改,就等于没设手续费。
总结
你也可以在策略设置窗口的属性标签页中手动修改“手续费”,手动设置会覆盖代码里的值。交易成本是真实存在的,手续费是其中最确定无疑的一项。
务必在你的每一个策略回测中,精准地模拟你真实交易的手续费。
一个无法在覆盖所有交易成本后还能稳定盈利的策略,没有任何实盘价值。别再用“无成本回测”来自欺欺人了。