关于Range的问题

公式代码: Params //此处添加参数 Vars //此处添加变量 Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { SubscribeBar(Symbol, "5m", data0.BeginDateTime); SubscribeBar(Symbol, "15m", data0.BeginDateTime); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Commentary("indexs array size=" + Text(GetArraySize(indexs))); Numeric i; Range[i = 0 : DataSourceSize - 1] { Commentary("size=" + Text(GetArraySize(indexs)) + ",i:" + Text(i)); } } 公式加载在1分钟K线上,公式自己再订阅两个图层,共3个图层。 把鼠标放在图层0中Commentary的信息是正确的。 把鼠标放在图层1、2中Commentary中size的值大部分是1,有时显示2和3。这是为什么? 问题2:Range[i = 0 : DataSourceSize - 1]中i是否相当于For i = 0 To DataSourceSize - 1]的i? 问题3:怎样去理解这个Range[i = 0 : DataSourceSize - 1]?不是应该对更新的bar去循环吗: For i = 0 To GetArraySize(indexs) - 1 { Data[indexs[i]]. }

第一 如果是历史 一般都是固定的图层数量 如果是实时 不是固定 indexs里放的是队列里待命的驱动tick数据 举例如果indexs里是0 2 两个元素 说明队列里收到了图层1和图层3的新tick数据 需要驱动公式运行 第二 如果用for 那么后面的所有函数和变量都需要加上data[i].前缀 效果基本是一样的 range的动作是让一段代码批量获取多个图层的数据,批量执行多个图层上的函数等操作 你可以理解为让你的代码在range范围的图层上批量运行