PTrade 交易不支持 set_commission / set_slippage / set_limit_mode
模拟盘或实盘一启动,日志开头常连着三条 WARNING:
text
WARNING - 交易不支持set_commission函数
WARNING - 交易不支持set_slippage函数
WARNING - 交易不支持set_limit_mode函数这是机制提示,不是策略写崩了。策略一般还能继续跑;佣金、滑点、成交量限制在交易环境里由柜台/券商规则决定,不听这几个回测函数。
结论
| 函数 | 回测 | 交易(模拟 / 实盘) |
|---|---|---|
set_commission | 可用 | 不支持(打 WARNING,调用被忽略) |
set_slippage / set_fixed_slippage | 可用 | 不支持 |
set_limit_mode | 可用 | 不支持 |
手册目录里也标了「回测」:见 设置函数 一节的表格(set_commission(回测) 等)。
为什么回测代码一贴交易就报警
很多人把回测模板整段贴进交易:
python
def initialize(context):
set_universe([...])
set_benchmark('000300.SS')
set_commission(commission_ratio=0.0003, min_commission=5) # 回测用
set_slippage(slippage=0.001) # 回测用
set_limit_mode('LIMIT') # 回测用回测里这三项用来模拟成本、滑点、成交量上限。
交易里:真实费率走账户;滑点和能否成交走盘口与柜台;set_limit_mode 的「无限量成交」只在回测有意义。所以引擎会打 WARNING 并跳过,而不是按你设的参数改实盘规则。
同类还有只在回测生效的,例如 set_volume_ratio、set_yesterday_position。交易里调用也会提示或不生效。
怎么处理
可以不管:只要后面逻辑、下单正常,这三条 WARNING 可当作噪音。
想日志干净:交易用策略里不要调它们;回测与交易拆两份,或包一层:
python
def initialize(context):
set_universe(['002882.SZ', '601218.SS'])
set_benchmark('000300.SS')
if not is_trade():
set_commission(commission_ratio=0.0003, min_commission=5)
set_slippage(slippage=0.001)
set_limit_mode('LIMIT')is_trade() 为真表示当前是交易场景。见 is_trade。
不要误判的
- 这三条不等于「策略没启动」。后面若有持仓打印、盯板日志,说明主流程在跑。
- 不会因此自动改成你设的佣金率去实盘扣费。
- 若真正下单失败,去看拒单原因,常见另有:9:30 下单失败、
.SS/.SH、快照限制 get_snapshot 约 3 秒。
