Pine Script策略报错“进场订单数量必须为正”,初始资金1000出现负值求助
报错根因
你遇到的Quantity for entry order must be positive报错,核心原因是传给strategy.entry接口的qty参数出现了负值,结合代码逻辑具体触发原因如下:
- 开仓数量
size由strategy.equity * RiskPercent计算得到,RiskPercent是固定正值,只有当策略权益strategy.equity变为负数时,才会算出负的size值 - 代码中设置的初始资金仅为100,和你描述的1000不符,叠加2个点的滑点、0.07%的佣金、支持2倍加仓的设置,很容易在连续亏损后把权益亏成负数
- 当前贴出的代码缺失大量变量定义(多周期KD指标、回测时间参数、止盈参数等),未定义的变量也可能导致计算逻辑异常
修复方案
按以下顺序修改代码即可解决问题:
- 给开仓数量增加非负校验,将原代码中
size = MaxPositionRisk替换为:
size = math.max(MaxPositionRisk, syminfo.mintick * close)
既保证开仓数量为正,也避免开仓金额低于标的最小成交要求
- 修正初始资金配置,将
strategy声明中的initial_capital参数改为你实际要设置的1000 - 调整风险参数,根据你交易的标的实际情况调小
slippage的数值,默认2的滑点对于低价标的会大幅放大亏损 - 补全代码中缺失的变量定义,包括多周期KD指标计算逻辑、回测时间输入参数、止盈比例和点位参数,避免未定义变量引发计算错误
- 在开仓逻辑中增加权益校验,修改开仓触发条件:
strategy.entry("long",long=true,qty=size, comment="Insert Enter Long Comment",when=entry_long and strategy.equity > 0)
避免权益为负时提交无效订单
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

