发生的问题:请看一下图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,不启用的时候为1
DataCount()=2
DataSourceSize()=2
barexiststatus()=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,不启用的时候为1
DataCount()=2
DataSourceSize()=2
barexiststatus()=1
我现在想知道原理机制,如何在写指标的时候避免这种情况,就是在启用预测成交量的时候还可以正常计算,谢谢
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
//把计算内容放在这里也不行
}