这几天很偶然的情况下,发现一个运行很好的策略在原油期货2个数据层(sc2309 和sc2310) 的情况下会导致策略卡死,仔细分析了一下原因后发现TBQ的数据对齐机制和OnBar() 类触发运行机制上可能存在缺陷导致。
会偶然卡死的代码:
OnBarOpen(ArrayRef<Integer> indexs)
{
Integer datai;
range[datai=0:DataCount() - 1]
{
fun1(); //复杂的计算函数
}
}
不会卡死的代码:
OnBarOpen(ArrayRef<Integer> indexs)
{
Integer datai;
range[datai=0:DataCount() - 1]
{
if (!ArrayFind(indexs,datai)) Continue; // 不是Data1i数据层触发的就不计算后计算函数
fun1(); //复杂的计算函数
}
}
原理: 每次计算只处理触发数据层的计算!!
代码决定问题
一切皆有可能
导致问题应该也在fun里面