OnBar(ArrayRef<Integer> indexs) { Commentary("bigk="+text(bigk)); }
OnBarClose(ArrayRef<Integer> indexs)
{
If((o-c)>(AvgTrueRange(5)*1.1) Or (o-c)/C>0.05)
{
bigk=-1 ;//大阴线
PlotString("bigk","B",l,Yellow);
}
Else If ((c-o)>(AvgTrueRange(5)*1.1) Or (c-o)/C>0.05)
{
bigk=1;//大阳线
PlotString("bigk","B",l,Yellow);
} Else
{
bigk=0;
}
Commentary("bigk="+text(bigk));
}
这段代码,观察时可以看到,在onbar域里的 Commentary的bigk是大k线后的第二根才显示值,在onbarclose的就是正常的。理论上看历史k线应该一致才对吧。
我不是实盘运行,是回测发现。逻辑上,onbar应该是和onbarclose都是执行当根k线最后的收盘价、开盘价等计算的吧。难道是我的理解有问题??而且我试过把onbarclose摆在程序onbar的前面,结果一致。onbarclose是已当根k线计算。onbar域是上一根k线。
先运行onbar,再运行onbarclose,按照这个顺序,你onbar里显示的bigk是上一根bar的onbarclose事件域运行的内容
经过再测试,当我把bigk计算的代码,也在onbar域里运行的时候,显示也是正常。无论bigk是全局变量还是序列变量。但是onbarclose的计算,确实是在下一根k线才传到onbar里,而且如果bigk只是普通变量的话,是不能从onbarclose域传到onbar域
改写的方法很多,只不过我想弄明白这个机理而已,谢谢解惑。