将系统原始ATR公式改成plot画图形式demo1
新建一个只有订阅代码的demo2
同时加载demo1和demo2画图就会出现订阅周期的副图被画在主图上了

//demo1
Params
Numeric Length(14); //周期
Vars
plot plotATR;
Events
OnInit()
{
// SubscribeBar(Symbol,"15m",BeginDateTime); //在 本公式内订阅,画图不出错
Range[0:DataSourceSize-1]
{
plotATR.figure(0);
}
}
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{
plotATR.line("ATR",AvgTrueRange(Length));
}
}//demo2
Events
OnInit()
{
SubscribeBar(Symbol,"15m",BeginDateTime);
// SetBasePeriod("15m");
}首先,多个模型加载到同一个单元里,执行顺序肯定有先后的。
其次,单个模型内有多个事件域驱动的,执行顺序也有先后。
所以这个问题就是,现在有多个模型,每个模型里有多个事件域。
那么到底是先把单个模型里的所有事件域都执行完再执行下个模型,还是每个模型同样部分的事件域拿出来排队单独执行呢?
事实上肯定是后者更合理一些。
所以这个现象背后的原因就是
第一个模型执行oninit的时候,只有单图层,只对data0设置了副图
接下来执行的是demo2的oninit,这里订阅了data1
接下来逐个bar执行onbar驱动,计算指标,作图。既然只对data0设置了副图,那自然就data1画主图了。
之前听课听过关于加载多个策略的执行顺序问题
可能一直没遇到意外,就没太在意这个情况
“每个模型同样部分的事件域拿出来排队单独执行”——以后得把这个考虑进去
学习了
我就说我怎么大白天做梦
怎么会突然就不行了
加载顺序!!!!!!!!!!!!!!!
sub的代码放在画图的前面就可以,放后面就不行!!!
这算bug吧.............


或者把所有plot的设置都放到Onready
也就是说一定要plot的代码在sub后面运行
这算bug吗 如果不算的话 就得把以前写的类似的代码都改一下
感觉在梦游 白天的时候还是好的...