在交易这场游戏中,每一次出手无论盈亏,你都得向券商/平台交手续费,它是侵蚀你利润、放大你亏损的隐形杀手。一个专业的策略回测,如果连手续费都不算,那无异于掩耳盗铃,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_type) | 手续费金额 (commission_value) | 解释 |
| strategy.commission.percent | 0.3 | 按订单成交额的0.3%收取。如果我们以32.43的价格交易100股,手续费为100 x 32.43 x 0.3% = 9.729。 |
| strategy.commission.cash_per_contract | 2 | 每交易一手/一股/一份,收取2货币单位。如果我们买入5手期货合约,订单手续费为5 x 2 = 10。 |
| strategy.commission.cash_per_order | 7.50 | 每笔订单固定收取7.50货币单位,无论订单大小。卖出9手期货或买入250股,手续费都是7.50。 |
- 必设项,无一例外:对于任何严肃的回测,手续费(
commission)和滑点(slippage)都是强制必设项。忽略它们是新手获取虚假回测结果的头号原因。 - 绝对忠于现实:别猜,别蒙。去翻你的券商官网,或者咨询你的客户经理,搞清楚你的真实交易成本,然后分毫不差地在这里设置好。
value不能为0:只设置commission_type,但忘了把commission_value设成一个大于0的数,是新手常犯的错误。记住,commission_value默认是0,你不改,就等于没设手续费。
总结
你也可以在策略设置窗口的属性标签页中手动修改手续费,手动设置会覆盖代码里的值。交易成本是真实存在的,手续费是其中最确定无疑的一项。
务必在你的每一个策略回测中,精准地模拟你真实交易的手续费。
一个无法在覆盖所有交易成本后还能稳定盈利的策略,没有任何实盘价值。别再用无成本回测来自欺欺人了。


