Params
Numeric FastLength(12);
Numeric SlowLength(26);
Numeric MACDLength(9);
Vars
Numeric MACDDiff;
Numeric AvgMACD;
Numeric MACDValue;
Series<Bool> upcross(False);
Events
OnBar(ArrayRef<Integer> indexs)
{
MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
AvgMACD = XAverage(MACDDiff,MACDLength);
if (CrossOver(MACDDiff,AvgMACD))
{
upcross=True;
}Else
{
upcross=upcross[1];
}
if (CrossUnder(MACDDiff,AvgMACD))
{
upcross=false;
}Else
{
upcross=upcross[1];
}
Commentary(\"upcross = \" + IIFString(upcross,\"True\",\"False\"));
}
//为何向上突破成功,但信号始终为false?
你自己的逻辑错误
下半部分,你的逻辑是,如果死叉,upcross就是false。如果不死叉,upcross就是上一根bar的值。
注意,金叉也属于没有死叉,那么金叉的bar上就会进入else分支执行upcross=upcross[1];
那么上一根bar的upcross是false,自然就被crossunder这分支重新洗回false状态了
本来crossover分支已经判断成功了,upcross已经是true了
结果又被你下半部分crossunder分支给洗回false状态了