作者的对话。亚历山大-斯米尔诺夫。 - 页 37

 
这个公式RMS^2=M[X^2]-(M[X])^2 实际上是针对方差的,也就是针对完美特性的。最有可能的是,在其推导过程中,"交叉 "的总和被明确地或隐含地归零了。对于大样本来说,这已经足够正确了。但对于小样本来说,真正的RMS可能是不同的。但我还没来得及检查。
 
Mathemat:

尤拉,我想比标准函数更快地计算RMS。如果成功了呢?对于单个调用来说,它应该比任何用语言编写的代码都要快,但对于大规模(整个图表计算)来说,有可能节省成本。


如果我们谈论的是线性回归 的分数,它是通过公式一步步分析计算出来的

sko^2=d[y]-d[x]*a^2

其中D[Y]=M[Y^2]-M[Y]^2D[X]=M[X^2]-M[X]^2A 是线性回归系数Y=A*X+B

所以这里不需要复发。

PS 而交叉和是明确地、纯粹地分析归零的。样本大小与此无关。

 
Prival:

仍然有错误 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1:MathSqrt 函数的负参数

从错误的内容来看,MathSqrt(lambda*lambda*lambda+16.0*lambda*lambda)一定在这附近。但lambda=MathAbs(Value1[i]/Value2[i]);不能是负数。
这就是为什么我唯一能想到的,以防万一,就是执行lambda=0.0。
和/或MathSqrt(MathAbs(lambda*lambda*lambda*lambda))来永远摆脱这个错误。
//---- 主循环
双倍的α,lambda=0.0 。
//********************************************************************************************
for (i = limit; i >= 0; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
for (i = limit; i >= 0; i--)
{
Value1[i]=SC*(Price[i]-Price[i+1])+4*SC*Value1[i+1];
Value2[i]=SC*(High[i]-Low[i])+4*SC*Value2[i+1];
}
for (i = limit; i >= 0; i--)
{
如果(Value2[i]< Point)Value2[i]= Point;否则lambda=MathAbs(Value1[i]/Value2[i])。

alpha=(-lambda*lambda+ MathSqrt(lambda*lambda*lambda) )/8.0。

Value3[i]=alpha*Price[i]+(1.0-alpha)*Value3[i+1];
}
//********************************************************************************************

P.S. 一般来说是胡说八道。这个错误一定是在你的测试器中冒出来的。
P.P.S. 最有可能的是,变量double lambda;被默认初始化为非常小的负数垃圾。那么双倍的lambda=0.0;表达式应该有帮助。
斯拉瓦教导我们--永远不要以默认的方式工作,我们也不学习!
 
VBAG:
私下 的。

仍然有错误 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1:MathSqrt 函数的负参数


P.S. 这很疯狂。这个错误可能是在你的测试器中突然出现的吗?
P.P.S. 最有可能的是,变量double lambda;被默认初始化为非常小的负数垃圾。那么双倍的lambda=0.0;表达式应该有帮助。
斯拉瓦教导我们--永远不要以默认的方式工作,我们也不学习!

当地的机器人总是试图发明一些自行车。

不要白费力气了。在自定义指数中,有一个Bands.mq4--有一个RMS计算的算法。
 
<br / translate="no">

sko^2=d[y]-d[x]*a^2

其中D[Y]=M[Y^2]-M[Y]^2D[X]=M[X^2]-M[X]^2A 为线性回归系数Y=A*X+B

所以这里不需要复发。

这些配方中有很多不必要的东西。
还有,你说的递归是没有必要的,总和应该如何计算?或者你有一个想法,如何做到不以平均数取代期望值?

P.S.顺便说一句,交叉的款项不会自己离开。至少我没有。试着不要用变异来工作,而是用 "真实 "的表达来工作
 
任何函数的有效值

sq = 0.0;
for (int n=0; n<period; n++)
{
   dc = Close[n] - fx[n];
   sq += dc * dc;
}
sq = MathSqrt(sq/period);
因此,对于线性回归,它是

sq = 0.0;
for (n=0; n<p; n++)
{
   lr = b + a * n;  
   dc = Close[n] - lr;
   sq += dc * dc;
}
sq = MathSqrt( sq / p );
 
ANG3110:
因此,对于一个线性回归来说,它将是

sq = 0.0;
for (n=0; n<p; n++)
{
   lr = b + a * n;  
   dc = Close[n] - lr;
   sq += dc * dc;
}
sq = MathSqrt( sq / p );

这是由定义决定的。如果LR不是太短,你可以更准确地计算RMS,不需要任何额外的周期。在源码MovingLR.mq4中有计算RMS的代码,但它被注释掉了,RMS被称为rmsY。
 
lna01:

sko^2=d[y]-d[x]*a^2

其中D[Y]=M[Y^2]-M[Y]^2D[X]=M[X^2]-M[X]^2A 为线性回归系数Y=A*X+B

所以这里不需要复发。

这些公式中有很多冗余的内容。
还有,什么叫不需要递归,总和该如何计算?或者你有办法避免用平均值替换预期报酬吗?

P.S.顺便说一句,交叉的款项不会自己离开。至少我没有。试着不要用变异来工作,而要用 "真实 "的表达来工作。


非常想知道这些公式中哪些是多余的?:-)

当然,MO是由平均数代替的,而且必须计算总和。然而,复发甚至是一个周期是不需要的。以下公式就足够了

S(X)[i+1]=S(X)[i]-X[i-N+1]+X[i+1] 其中S(X)[i]=Sum(X[k]; k=i-N+1, i-N+2, ..., i-1,i )

好吧,也许你说的复发是指这种表达?那么,当然,你是对的。

至于 "真正的表达",你认为所有这些公式来自哪里?好吧,如果你把从MNC得出的A和B的有限公式代入这个 "真实表达",那么你得到的只是上述RMS的表达。我可以给你相应的分析计算结果。

 
Yurixx:
lna01:


我可以给你相关的分析计算结果。


如果从这里详细说明不会太麻烦的话。 随着新数据的出现,系数A和B可能会改变,我想,尽管我可能是错的:-)。对于LR来说,这似乎已经解决了,但对于抛物线回归来说,如何解决?
 
lna01:
这是由定义决定的。如果LR不是太短,你可以更准确地计算RMS,不需要任何额外的周期。在源码MovingLR.mq4中,有一段计算RMS的代码,但它被注释掉了,RMS被称为rmsY。
是的,你可以做一次,减去最后一个元素,然后添加一个新的第一个元素。那么它就可以无周期地工作。我在MT3中用mql2做过这样的事情。即使现在我在必要时也会这样做,而且不仅仅是为了线性回归