多数据源条件下,都是1分钟数据源,如何让onbarclose与onbaropen里的代码只运行一次?
onbaropen里面有一个对全局变量递减的算法,本意是每过1分钟数值减1,结果多数据源条件下,当前bar初值为5,直接降为0了,怎么解决?
OnBarOpen(ArrayRef<Integer> indexes)
{
CurrentBarIndex = BarsSinceToday();
// 更新时间冷却计数器
range[i=0:1]
{
for i = 0 to GetArraySize(timerecord1) - 1
{
if(timerecord1[i] > 0)
{
timerecord1[i] = timerecord1[i] - 1;
Alerted[i] = 0;
}
mark[i] = 0;
}
}
}
即使是这样写,onbaropen也是运行了很多次。timerecord1本身是个时间冷却计数器,但是多数据源条件下,很快就归零了,怎么让onbaropen和onbarclose里的数据只运行一次呢
用setbaseperiod设置一下对齐
每个图层都设置
周期数建议使用最小公约周期数
周期就是1分钟周期,全部是1分钟
那就都用frequency
实盘状态下,如何让onbar里的代码,至少是部分代码,只运行一次呢?比如这种时间冷却计数器每分钟只减1,如何实现呢
请问这个有什么作用呢,没有看懂,多谢指点!
如果你是同一个合约
直接在oninit里用range包着对全图层执行setbaseperiod(frequency)
如果你是不同合约,那实盘是没办法统一执行的
因为不同合约的行情不是一起收到的,有先后到底的顺序,就会驱动多次onbaropen和onbarclose
我能不能写一个全局变量,控制onbaropen里的代码段只执行一次呢?
这个问题能不能似乎取决于你是否能设计出对应的状态控制算法