多品种时存在重复执行K线的情况,疑似BUG

前两天我发了关于 MarketPosition() 获取到的状态不对 的帖子

https://bbs.tbquant.net/thread/20250613174746908464

https://bbs.tbquant.net/thread/20250616152306846672


经过测试我将问题定位了出来 ,一个小DEMO就可以确定复现, 多品种的情况下会有重复执行同一根K线的情况


Vars
    Natural CodeProperty codePro;
    Global Array<Numeric> lastTradeBars; // 记录每个品种的最后交易Bar索引
    Global Numeric j; // 自增计数
Events
    OnReady()
    {
        
        SetArraySize(lastTradeBars, DataSourceSize(), -1); // 初始化数组,大小为品种数量,初始值为-1
        Range[0:DataSourceSize()-1]
        {
            GetProperty(codePro);
        }
        print("OnReady结束");
    }
    
    OnBar(ArrayRef<Integer> indexs)
    {
        Numeric i;
        Range[i=0:DataSourceSize()-1]
        {
            j=j+1;
            Print("时间=" + Text(Date)+"当前Bar=" + Text(CurrentBar()) + ", 合约=" + codePro.symbol + "数组="+TextArray(lastTradeBars)+"  i="+Text(i)+" 自增j="+Text(j));   
            // 如果当前Bar索引等于该品种上次交易Bar索引,跳过
            If(CurrentBar() == lastTradeBars[i] &&lastTradeBars[i]>0)
            {
                Print("时间=" + Text(Date)+"当前Bar=" + Text(CurrentBar()) + ", 合约=" + codePro.symbol + "数组="+TextArray(lastTradeBars)+"  i="+Text(i)+" 自增j="+Text(j)+" 重复执行");  

            }
            // 记录当前Bar索引
            lastTradeBars[i] = CurrentBar();
        }
    }

11997行和12003行 就可以看出来了, 随便选6个品种  回测起始时间2000年就行

可以排除是全局变量没有更新 因为 打印的时间是一样的

麻烦老师花点时间看下 ,我已经将问题定位的很明确了,复制代码即可复现



除权换仓在实盘是否存在重复执行的问题?
两个tbq3的疑似bug和一个小建议
区域统计是否存在Bug?
TBQUANT策略的执行是必须要下根K线才能执行吗,不能当前K线执行?
K线订阅的bug
请教:ONBARCLOSE函数,在当天收盘的最后一根K线时不会执行,而要等到明日或晚盘开盘的那根K线才执行的问题
发现多图层的Bug
PlayWavSound函数触发单一条件开仓时,单根K线多次重复语音播报问题
【BUG反馈】多品种交易开盘时间问题,请刘风及凯明老师进来看下
遍历期权图层时,偶然发生不执行的交易代码的情况,请TB老师分析

我不知道怎么解释

你才能明白

😢

回测级别选择日线级别