二维数组追加行的问题,求大佬解答
发生的问题:请看一下图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));
}
谢谢,明白了,刚转来tb才几天
那么公式之间是可以交互的,假设我加载了2个公式
一个myMA和myBOLL
在myMA中设置了一个全局变量Global integer ma20;
在myBOLL中设置了一个局部变量integer ma20;
这种情况下会交互吗?也就是myMA中的全局变量会不会影响myBOLL的同名变量?
我发现实际的问题根源在IndustryAdaptor指标中的predictVol预测成交量,当它启用的时候最后5个Bar的数据才会出问题,如果关闭就是正常的。(预测成交量正好是以最近5天的同时段成交量对比)
当启用预测成交量的时候输出2,不启用的时候为1
DataCount()=2
DataSourceSize()=2
barexiststatus()=1
我现在想知道原理机制,如何在写指标的时候避免这种情况,就是在启用预测成交量的时候还可以正常计算,谢谢
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
//把计算内容放在这里也不行
}
我发现实际的问题根源在IndustryAdaptor指标中的predictVol预测成交量,当它启用的时候最后5个Bar的数据才会出问题,如果关闭就是正常的。(预测成交量正好是以最近5天的同时段成交量对比)
当启用预测成交量的时候输出2,不启用的时候为1
DataCount()=2
DataSourceSize()=2
barexiststatus()=1
我现在想知道原理机制,如何在写指标的时候避免这种情况,就是在启用预测成交量的时候还可以正常计算,谢谢
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
//把计算内容放在这里也不行
}