前两天我发了关于 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年就行
可以排除是全局变量没有更新 因为 打印的时间是一样的
麻烦老师花点时间看下 ,我已经将问题定位的很明确了,复制代码即可复现
我不知道怎么解释
你才能明白
😢
回测级别选择日线级别