多数据源条件下,都是1分钟数据源,如何让onbarclose与onbaropen里的代码只运行一次?

多数据源条件下,都是1分钟数据源,如何让onbarclose与onbaropen里的代码只运行一次?

onbaropen里面有一个对全局变量递减的算法,本意是每过1分钟数值减1,结果多数据源条件下,当前bar初值为5,直接降为0了,怎么解决?

多个数据源条件下,为什么onbarclose运行了7次?
多数据源时,有段代码想开盘前全局只执行一次计算
多数据源onbaropen问题
onbar,onbarOpen,onbarClose的运行机制
onbarclose和onbaropen功能bug反馈
如何让多图层只加载0图层的K线图表?
请问 如何让程序 一天 只建仓一次
如何批量修改数据源
多数据源获取某数据源对应的账户持仓
设置收盘时间点为14:59:00,请问onbarclose是从时间点以后每个TICK运行一次还是只在14:59:00运行一次?

   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里的代码段只执行一次呢?

这个问题能不能似乎取决于你是否能设计出对应的状态控制算法