线性回归的几个函数在使用时,如果使用前设置了条件,和没有设置条件的结果不同。以LinearRegSlope()函数为例代码如下,如何理解?
Params
Numeric Length(7);
Vars
Global Numeric gNumSlop;
Series<Numeric> sNumSlop;
Events
OnBar(ArrayRef<Integer> indexs)
{
If(High>=Highest(High[1],Length)) // 添加一个条件
{
PlotBool(\"gNumSlop\",True);
gNumSlop = LinearRegSlope(Close,Length);
Commentary(\"gNumSlop= \"+Text(gNumSlop));
}
sNumSlop = LinearRegSlope(Close,Length); // 无条件
Commentary(\"sNumSlop= \"+Text(sNumSlop)); // sNumSlop不等于gNumSlop???
}
linearregslope引用了linearreg函数,而linearreg函数是一个序列类型
跟你用什么类型的数据结构保存linearregslope函数的运行结果是没有关系的,导致运行不一致的原因是函数内部的运行路径的问题。我再次建议你先搜索论坛里关于,序列类型,的帖子,看看答疑帖再继续问,请不要固执于自己的思路。
明白了,谢谢!
注意!!!
上述回复代码中,双引号前的反斜杠是论坛编辑发布后自动添加的
线性回归是序列类型,你编译信息里应该有一个warning吧
具体原因在社区里搜索序列类型,有相关的解释
编译时没有任何错误或警告。然后我用能想到的所有变量类型改写了代码如下。结果除了有条件方式,其他计算结果都一致。问题在哪儿呢?
Params
Numeric Length(7);
Vars
Global Numeric gNumSlop;
Global Numeric gNumSlop_1;
Numeric NumSlop;
Series<Numeric> sNumSlop;
Array<Numeric> arrNumSlop;
Integer i;
Events
OnBar(ArrayRef<Integer> indexs)
{
// 有条件的全局变量
If(High>=Highest(High[1],Length)) // 添加一个条件
{
PlotBool(\"gNumSlop\",True);
gNumSlop = LinearRegSlope(Close,Length);
Commentary(\"gNumSlop= \"+Text(gNumSlop));
}
// 无条件全局变量
gNumSlop_1 = LinearRegSlope(Close,Length);
Commentary(\"gNumSlop_1= \"+Text(gNumSlop_1));
// 普通变量
NumSlop = LinearRegSlope(Close,Length);
Commentary(\"NumSlop= \"+Text(NumSlop));
// 序列变量
sNumSlop = LinearRegSlope(Close,Length); // 无条件
Commentary(\"sNumSlop= \"+Text(sNumSlop)); // sNumSlop不等于gNumSlop???
// 临时变量
Numeric tmpSlop = LinearRegSlope(Close,Length);
Commentary(\"tmpSlop= \"+Text(tmpSlop));
// 数组变量
For i=0 To Length-1
arrNumSlop[i] = Close[i];
Commentary(\"arrNumSlop[]= \"+Text(LinearRegSlopeArray(arrNumSlop)));
}