onbar{
  ....
range{
   ....
    Print("开仓之前=" + Text(Date) + ",方向="+Text(MarketPosition())+", 合约=" + codePro.symbol + ", 当前持仓品种数=" + Text(symbolCount) +"最大持仓数=" + Text(MaxOpenSymbols));
    -------
    Print("开空之前时间=" + Text(Date) + ",方向="+Text(MarketPosition())+", 合约=" + codePro.symbol + ", 当前持仓品种数=" + Text(symbolCount) +"最大持仓数=" + Text(MaxOpenSymbols));
                tradeReturn=SellShort(Lots,Close);
                if(tradeReturn)
                {
                    if(MarketPosition() <> 0)
                    {
                        symbolCount = symbolCount + 1;
                    }
                    Print("[开空] 时间=" + Text(Date) + ",方向="+Text(MarketPosition())+", 合约=" + codePro.symbol + ", 当前持仓品种数=" + Text(symbolCount) +"最大持仓数=" + Text(MaxOpenSymbols));
                } Else
                {
                    Print("[开空] 失败 时间=" + Text(Date) + ",方向="+Text(MarketPosition())+", 合约=" + codePro.symbol + ", 当前持仓品种数=" + Text(symbolCount) +"最大持仓数=" + Text(MaxOpenSymbols));
                }


代码 163行对应的LOG 327行的打印,可以看到 开空成功了 MarketPosition() 为-1,但是下一个onbar的时候 MarketPosition() 就变成0了,LOG 328之后的打印对应的代码100行。 中间没有平仓过程如果有的话会打印出来的
发可复现的代码demo
可以不是你的原文,你可以精简,但是必须是要能复现这个现象的
老师很厉害,在一个品种的时候 总是能正常运行,但是 多品种的情况下 就会有问题,我会写一个demo然后 说明复现路径
老师 demo已经 提供 一定会出现的问题 https://bbs.tbquant.net/thread/20250616152306846672
帮忙看一下 感谢
所以让你用全局数组自己统计
嘿嘿
这是底层机制
不合理
但
理解他接受他合理应用
什么意思, 是什么机制导致的不一样