二维数组追加行的问题,求大佬解答

发生的问题:请看一下图4,代码在最后完整代码如下:Params Numeric Length1(5); Numeric Length2(10); Vars Series<Numeric> ma1; Series<Numeric> ma2; Bool jincha(False); Bool sicha(False); Series<Numeric> yihang; Series<Numeric> erzuhang; Global Array<Array<Numeric>> yizu; Global Array<Array<Numeric>> erzu; Events //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Range[0:DataSourceSize() - 1] { //均线赋值 ma1=AverageFC(Close,Length1); ma2=AverageFC(Close,Length2); //判断是否显示画线 If(Length1 > 0) { PlotNumeric(MA1,ma1); } If(Length2 > 0) { PlotNumeric(MA2,ma2); } } //判断金叉与死叉 jincha=CrossOver(ma1,ma2); sicha=CrossUnder(ma1,ma2); //获取二维数组的行数 由于起始行为0 所以不用+1 yihang=GetArraySize(yizu); erzuhang=GetArraySize(erzu); If(CurrentBar()==1) { //第二根K线插入 ArrayInsert(yizu,yihang,0,1); ArrayInsert(yizu,yihang,1,CurrentBar()); } Else If(jincha) { //均线金叉才插入 ArrayInsert(erzu,erzuhang,0,2); ArrayInsert(erzu,erzuhang,1,CurrentBar()); } Else If(sicha) { //均线死叉才插入 ArrayInsert(yizu,yihang,0,-1); ArrayInsert(yizu,yihang,1,CurrentBar()); } Else Commentary(当前不满足条件不追加数组。); //打印 Commentary(当前K线数: + Text(CurrentBar())); Commentary(yizu行数: + Text(GetArraySize(yizu)) + ,内容: + TextArray(yizu)); Commentary(erzu行数: + Text(GetArraySize(erzu)) + ,内容: + TextArray(erzu)); }

因为industryadaptor里面订阅了tick图层。代码都是公开的,你可以打开看看建议测试自己公式的时候把其他公式都清除掉。现在公式之间是可以交互的,会影响执行结果

回复:谢谢,明白了,刚转来tb才几天那么公式之间是可以交互的,假设我加载了2个公式一个myMA和myBOLL在myMA中设置了一个全局变量Global integer ma20;在myBOLL中设置了一个局部变量integer ma20;这种情况下会交互吗?也就是myMA中的全局变量会不会影响myBOLL的同名变量?

回复:这个不会,但是驱动机制,信号等是会共享的。比如a公式开的仓,b公式可以平掉建议看一下视频区的0基础视频补充好基础常识

我发现实际的问题根源在IndustryAdaptor指标中的predictVol预测成交量,当它启用的时候最后5个Bar的数据才会出问题,如果关闭就是正常的。(预测成交量正好是以最近5天的同时段成交量对比)当启用预测成交量的时候输出2,不启用的时候为1DataCount()=2DataSourceSize()=2barexiststatus()=1我现在想知道原理机制,如何在写指标的时候避免这种情况,就是在启用预测成交量的时候还可以正常计算,谢谢//在新bar的第一次执行之前调用一次,参数为新bar的图层数组OnBarOpen(ArrayRef<Integer> indexs){ //把计算内容放在这里也不行 }

因为你是global啊历史bar一根只运行多次,只往里面添加一次可是后面的实时bar是每个tick运行一次,你这日线,一根bar就会运行几万次,就会往里面添加几万个数据两种方案第一 global改成series第二 还是global 但是一根bar写入数据的时机限定在开盘或者收盘,用onbaropen或者onbarclose,保证一根bar只运行一次

回复:我发现实际的问题根源在IndustryAdaptor指标中的predictVol预测成交量,当它启用的时候最后5个Bar的数据才会出问题,如果关闭就是正常的。(预测成交量正好是以最近5天的同时段成交量对比)当启用预测成交量的时候输出2,不启用的时候为1DataCount()=2DataSourceSize()=2barexiststatus()=1我现在想知道原理机制,如何在写指标的时候避免这种情况,就是在启用预测成交量的时候还可以正常计算,谢谢//在新bar的第一次执行之前调用一次,参数为新bar的图层数组OnBarOpen(ArrayRef<Integer> indexs){ //把计算内容放在这里也不行 }