背景:日线以下级别周期策略,QQ_ATR为小周期逆推日线级别ATR的函数,策略执行前10天的时候,DATR都是N/A。
问题:在前10天,也会产生开仓,此时 “DATR <> InvalidNumeric” 应该为 false 进不去循环才对呀,求赐教~~~
OnBar(ArrayRef<Integer> indexs)
{
DATR = QQ_ATR(10); // 10天周期的日线ATR
if (Time >= daystart && Time <= dayfinish && DATR <> InvalidNumeric)
{
// 顺势开多
if (longCurrentContracts == 0 // 没多单
&& !reverse_long // long关闭
&& High > bbreak_1) // 当前bar最高价>bbreak_1
{
if (shortCurrentContracts == 0) // 没空单
{
Buy(lots, Max(Open, bbreak_1)); // 开多
barentrycnt = 0; // 开仓后置0
}else if(shortCurrentContracts > 0 && barentrycnt > 0) // 有空单,非当前bar开仓
{
BuyToCover(0, Max(Open, bbreak_1)); // 平空
Buy(lots, Max(Open, bbreak_1)); // 开多
barentrycnt = 0; // 开仓后置0
}
}
}
}
缺少环境不太好分析。
建议直接通过print和commentary等工具输出关键节点的条件信息判断条件到底有没有满足
输出过了,确实不满足;但是将这个条件(DATR <> InvalidNumeric)放到第二层的if条件中,就能够控制住不开单。
找到原因了,if (条件1 || 条件2 && 条件3),没把 条件1||条件2 用括号圈起来