关于多图层运算

假设我打开15分钟周期图,在Events中通过SubscribeBarCounts增加了两个图层id1 = SubscribeBarCounts(Symbol, \"1d\", 1000, Enum_Data_RolloverBackWard);//1日周期1000个barid2 = 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)); } } }

回复:已解决这个问题