关于多图层运算

假设我打开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图层的运算吗?

}

关于多图层策略
多图层策略关于onbaropen?
请教!关于多品种,跨周期,多图层
多图层
多图层问题
TBQ3和TBQ在图层运算上是存在区别吗
发现多图层的Bug
多图层选股
多图层打印日志次数
关于多图层DataCount的问题

图层编号绝对是根据添加的先后排序的吗?

是的,初始加载的合约一定是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));

}

}

}

已解决这个问题