假设我打开15分钟周期图,在Events中通过SubscribeBarCounts增加了两个图层
id1 = SubscribeBarCounts(Symbol, \"1d\", 1000, Enum_Data_RolloverBackWard);//1日周期1000个bar
id2 = SubscribeBarCounts(Symbol, \"1h\", 1000, Enum_Data_RolloverBackWard);//1小时周期1000个bar
有几个问题 :
图层编号绝对是根据添加的先后排序的吗?
Range[0:0]
{
//这里绝对是主图层吗(15分钟周期)?也就是15分钟周期绝对是data0吗,会不会在某些情况下变成data1或者其他编号?
}
Range[id1:id1]
{
//这里测试可以这样写,这里的运算绝对是1d图层的运算吗?
}
Range[id2:id2]
{
//这里的运算绝对是1h图层的运算吗?
}
图层编号绝对是根据添加的先后排序的吗?
是的,初始加载的合约一定是data0,然后加载公式,执行订阅subscribe命令,那么根据执行命令的先后顺序返回图层编号,可以打开策略单元设置看一下合约对应图层编号。
这个问题要注意,驱动归驱动,图层对象归图层对象,不要混淆。
以onbar行情驱动为例,多图层情况下,每个图层都会驱动onbar内的所有代码执行。
如果需求是某个图层驱动才执行某些代码,用range是不行的,要用if配合indexes参数判断才行,这个具体在行情驱动的零基础课程里有说过。
OnBar(ArrayRef <Integer> indexs)
{
Print(\"dyid1: \" + Text(dyid1)) ; //dyid1值为1
Integer i = 0;
Range[i=0:DataCount-1]
{
//判断相应图层执行
If(indexs[i] == 0 And i == 0)
{
shu = shu+1;
Commentary(\"shu :\" + Text(shu));
}
Else If(indexs[i] == dyid1 And dyid1 != 0)
{
//这里的写法哪有问题?无法在订阅的dyid1图层显示(print可以打印,数据可以计算,但是Commentary和一些画线无法显示)。难道是在这里计算,然后在Else里显示吗?
jishu = jishu+1;
Commentary(\"jishu :\" + Text(jishu));
}
Else
{
//这里的内容可以在订阅的dyid1图层显示
Commentary(\">>> shu :\" + Text(shu));
Commentary(\">>> jishu :\" + Text(jishu));
}
}
}
已解决这个问题