交易中的机器学习:理论、模型、实践和算法交易 - 页 198

 
Dr.Trader:

我在R中发现了另一个错误。R不能正确除以0。

这里是剧本。

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property script_show_inputs

input double div = 0.0;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(1.0/div);
  }
//+------------------------------------------------------------------+

正确的答案,在mql中是。
在'test.mq5'(20,13)中除以零
脚本停止。

非专有的,在R:
> 1/0
Inf
继续编写剧本

我的意思和Alexey一样--未定义条件下的程序行为可能不同,而且这不是错误。建筑的方式应该是这样的,这就是结果。


关于 "不是正确的答案",你错了。

R中的答案是绝对正确的,而且非常方便。重点是,R将 "变量值 "的概念带入逻辑,并为变量设置了三个具体的值:NA(有一个值,但不知道)、NaN(没有数值)和Inf--无限大。这就是这样的价值,中断该计划的工作是完全错误的。如果你考虑到计算机对实际精度的限制,Inf很可能有一个有限的值。而继续工作是很自然的,一个整齐的程序 应该检查这样的结果,如果它们被假定。

例如,MQL文档给出了一个关于正弦的例子,并指出正弦(2)=无穷大。这是不准确的。准确地说:arcsinus(2)=NaN,即没有数值,arcsinus(1)=Inf,但交易期间缺少的报价=NA,即应该是(或可能是在周末),而它们不是。

 
阿列克谢-伯纳科夫

Wolfram所说的0并不是最终的真理。我是说措辞中的 "错误 "一词是多余的......

这里不是关于Wolfram。非零正值的积分不能为零。

检查也发现了算法中的错误。

例如,对于非中心t分布,量值不会转换。


> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1。388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1]0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1。0> nt_quantile[1]-Inf -1.340781e+154 -  1.340781e+154 -1.340781e+154 [7]-1.340781e+154 7.000000e-01 8.000000e-01 9.000000e-01 1.000000e+154


这里0-0.6的量值计算不正确。

在MQL5中,有一个类似计算的例子。

2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 包统计的单元测试
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 非中心T分布测试开始
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 非中心T分布测试:测试1:单一数值的计算
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 1 0, PDF=4.92773299108629100851e-15, CDF=6.23274905782904190070e-16, Q=1.51119154775858715131e-18。
2016.11.10 17:53:32.646 TestStatNCT (EURUSD,H1) 1 1, PDF=1.130226163094897516453e-14, CDF=1.3899389577957373769266e-15, Q=9.999999999989369615e-02,
2016.11.10 17:53:32.647 TestStatNCT (EURUSD,H1) 1 2, PDF=2.64161256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.00000000000000004840572e-01,
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 3, PDF=6.28106243570810575054e-14, CDF=7.3638179090305861902898e-15, Q=2.99999999999998601119e-01
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 4, PDF=1.5163698393962646374250e-13, CDF=1.743039359090744906969191e-14, Q=4.00000000000005184742e-01
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 5, PDF=3.7086417557314635e-13, CDF=4.19192812277470617962e-14, Q=5.00000000000000-01。
2016.11.10 17:53:32.649 TestStatNCT (EURUSD,H1) 1 6, PDF=9.166152295737551015-13, CDF=1.02187737277044947465e-13, Q=5.999999999998867573e-01,
2016.11.10 17:53:32.651 TestStatNCT (EURUSD,H1) 1 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.9999999999999999289457e-01,
2016.11.10 17:53:32.652 TestStatNCT (EURUSD,H1) 1 8, PDF=5.7160930393970751591223e-12, CDF=6.25821417361289428232e-13, Q=7.99999999999999299967253e-01。
2016.11.10 17:53:32.653 TestStatNCT (EURUSD,H1) 1 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.9999999999999998578915e-01。
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) 1 10, PDF=3.593914459122563450e-11, CDF=3.91468724033560601170e-12, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) 非中心T分布测试:测试2:阵列上的计算结果
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 0, PDF=4.92773299108629100851e-15, CDF=6.23274905782904190070e-16, Q=1.51119154775858715131e-18。
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 1, PDF=1.130226163094897516453e-14, CDF=1.38993895779573769266e-15, Q=9.99999999999989369615e-02。
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 2, PDF=2.64161256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.00000000000000004840572e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 3, PDF=6.28106243570810575054e-14, CDF=7.3638179090305861902898e-15, Q=2.99999999999998601119e-01
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 4, PDF=1.5163698393962646374250e-13, CDF=1.743039359090744906969191e-14, Q=4.00000000000005184742e-01
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 5, PDF=3.7086417557314635e-13, CDF=4.19192812277470617962e-14, Q=5.00000000000000-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.999999999998867573e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.9999999999999999289457e-01。
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 8, PDF=5.7160930393970751591223e-12, CDF=6.25821417361289428232e-13, Q=7.99999999999999299967253e-01。
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.9999999999999998578915e-01。
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 10, PDF=3.593914459122563450e-11, CDF=3.91468724033560601170e-12, Q=9.99999999999998889777e-01。
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 非中心T分布测试:测试3:类R重载函数
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 0, PDF=-3.29438973521509552711e+01, CDF=-3.50115439911437320575e+01, Q=9.32008491370933962264e-15。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 1, PDF=-3.21137735448868468468779e+01, CDF=-3.42095165639872504926e+01, Q=9.99999999999992561506e-02
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 2, PDF=-3.12648017507063613607e+01, CDF=-3.33858176105613679852e+01, Q=2.00000000000004563017e-01
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 3, PDF=-3.03986521580849320401e+01, CDF=-3.25421978598387227066e+01, Q=2.9999999999999998490097e-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 4, PDF=-2.95172869939179705057e+01, CDF=-3.16805609544090991392e+01, Q=4.00000000000005240253e-01
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 5, PDF=-2.86229405029589081266e+01, CDF=-3.08030305013295588878e+01, Q=5.00000000000000-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 6, PDF=-2.77180886076848480570e+01, CDF=-2.99119647118446110312e+01, Q=5.9999999999999998756550e-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 7, PDF=-2.680540931294946693489897e+01, CDF=-2.90099393581479034765e+01, Q=6.9999999999999999400480e-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 8, PDF=-2.588773557892770327e+01, CDF=-2.80997113402901490531e+01, Q=7.9999999999999489297e-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 9, PDF=-2.49680028891657173062e+01, CDF=-2.71841705920503962091e+01, Q=8.99999999999998689937e-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 10, PDF=-2.40491940358795979979193e+01, CDF=-2.62662856772029869035e+01, Q=9.99999999999998889777e-01。
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 非中心T分布测试:测试4:随机值的产生者
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试通过
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试:PDF最大误差:1.48634016318122160328e-25
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试:CDF最大误差:2.75966439373922392108e-18
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试:量化最大误差:5.16253706450697791297e-15
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试:PDF正确数字:24
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试:CDF正确数:17
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非中心T分布测试:量化正确数字:14
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 1 of 1 passed

TestStatNCT.mq5脚本的结果(来自TestStat.mq5的测试,增加了TestNoncentralTDistribution函数中计算值的输出)。

可以看出,量值被解决了,测试也通过了。

至于错误,则如下。

//--- precision
double calc_precision_pdf=10 E-15;
double calc_precision_cdf=10 E-15;
double calc_precision_quantile=10 E-14;

在Denise Benton, K.Krishnamoorthy,"计算连续分布的离散混合物:非中心奇异值、非中心t和样本多重相关系数的平方分布",表明AS 243算法有误差。


因此,R中存在错误,其可能的原因是在AS 243算法中,该算法被用于计算CDF。

附加的文件:
TestStatNCT.mq5  16 kb
 
量子化

1)这不是关于Wolfram。非零正值的积分不能为零。

2)在测试过程中,算法也存在错误。

3)例如,对于非中心t分布来说,量值是不可逆的。


1-如果你也写了关于伽马分布的错误,那么我把我的主张告诉你。说在R中是有错误的,这是不正确的。我在这个帖子中看到一些试图贴标签的行为。显然,你没有咨询过使用软件包的学者,没有看到那里有任何错误。在Python中,该函数也是在0中输出1的密度。

再一次。密度值没有定义为零。Wolfram认为它是0,而你只是同意这一点,没有做任何独立的推论。

你说钨与此无关,但你不能回答我关于将零取为零的幂的问题。相反,你向我展示了钨...

你自己看,在右边的近似值中,数值会变成统一的,这意味着近似值中的积分也不是零。而且它不在零点,密度也不在零点,因为整合一个不确定的量是没有意义的。

2 - 这可以进一步检查,并确定算法中的错误,例如。

3)例如,可以检查。

 
量子化


例如,对于非中心t分布来说,量值并没有颠倒。


0-0.6的量值在这里没有被正确计算。

> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1。388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1]0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1。0> nt_quantile[1]-Inf -1.340781e+154 - 1.340781e+154 -1.340781e+154 [7]-1.340781e+154 7.000000-01 8.000000-01 9.000000-01
对不起,你的代码中哪里初始化了nt_quantile变量?也就是说,它是从哪里来的?
 

1) 我们如何解释在某一点上df=0,而pdf却非零?

> n <- 5> k <- seq(0,1,by=1/n)> gamma_pdf<-dgamma(k, 1,1, log = FALSE) > gamma_cdf<-pgamma(k, 1,1, log = FALSE)> k[1] 0.0 0.2 0.4 0。6 0.8 1.0> gamma_pdf[1]1.0000000 0.8187308 0.6703200 0.5488116 0.4493290 0.3678794> gamma_cdf[1]0.0000000 0.1812692 0.3296800 0.4511884 0.5506710 0.6321206

2)我们如何解释量值与原始量值不一致?

> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1。388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1。0> nt_quantile[1]-Inf -1.340781e+154 -1.340781e+154 -1.340781e+154 [7] -1.340781e+154 7.000000-01 8.000000-01 9.000000-01
 
阿列克谢-伯纳科夫
对不起,你的代码中哪里初始化了nt_quantile变量?也就是说,它是从哪里来的?

对不起,脚本中有一个错字,已改正。

脚本是这样的。

> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1。388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1。0> nt_quantile[1] -Inf -1.340781e+154 -1.340781e+154 -1.340781e+154 -1.340781e+154 [7] -1.340781e+154 7.000000-01 8.000000-01 9.000000-01
 
量子化

1)我们如何解释在cdf=0的时候,而pdf是不为零的?

2)我们如何解释量值与原始量值不一样?

我会考虑一下,然后回答你。你总是用问题来回答问题吗?你自己的统计思想在哪里?
 
阿列克谢-伯纳科夫

关键是,@Quantum 纯粹是在MQL5中实现和全面验证R的类似数学库。

这不是一个理论家的推理。在编写单元测试时,他正在深入挖掘,为库的正确性提供保证。


人们不应该先验地认为R中的一切是正确的。相反,我想说的是,即使那里有C++的函数实现,一切都很原始。而在速度方面,你可以看到,我们的编译器上的源代码中的MQL5库平均赢了3倍。

我们不厌其烦地仔细检查了一切,发现了明显的错误。这些错误已被证实。

算法AS 243 由Lenth提出[Lenth, R.V.,"Cumulative distribution function of non-central t distribution", Applied Statistics, Vol.38 (1989), 185-189].这种方法的优点是对具有不完全β函数的无限序列项进行快速递归计算。但在文章[D.Benton, K.Krishnamoorthy,"计算连续分布的离散混合物:非中心奇异值、非中心t和样本多重相关系数的平方分布",《计算统计与数据分析》,43,(2003),249-267],结果表明,这种算法在对数列的项进行求和时,由于精度评估的错误而导致错误,特别是对于非中心delta参数的大值。论文作者提出了一种基于递归的非中心T型分布概率计算的修正算法。

我们在MQL5统计库中使用了文章[D.]中计算概率的正确算法。Benton, K.Krishnamoorthy,"计算连续分布的离散混合物:非中心奇异值、非中心t和样本多重相关系数的分布",计算统计与数据分析,43,(2003),249-267]。,可以得到精确的结果。

为了确保计算的准确性,并允许第三方开发者检查库的质量,我们在交付中包含了几个单元测试脚本。你可以在/Scripts/UnitTests/Stat中找到它们。

请看一下出版日期。你将看到工作的进展情况与科学家的提示。

另外,如果不把@Quantum 当作科学家,那就错了。

 

然后按字面顺序评论一下,对于一个均匀的连续分布,极端点的密度是正的,而积分是零。https://en.wikipedia.org/wiki/Uniform_distribution_(连续)

 
雷纳特-法特库林

问题是,@Quantum 纯粹是为了实现和充分验证R在MQL5中的类似数学库。

这不是一个理论家的推理。在编写单元测试时,他正在深入挖掘,为库的正确性提供保证。


人们不应该先验地认为R中的一切是正确的。相反,我想说的是,即使那里有C++的函数实现,一切都很原始。而在速度方面,你可以看到,我们的编译器上的源代码中的MQL5库平均赢了3倍。

我们不厌其烦地仔细检查了一切,发现了明显的错误。这些错误已被证实。

请看一下出版物的日期。你会看到在科学家的建议下,工作是如何进行的。

此外,如果不把@Quantum 看作是一位科学家,那就错了。

我没有说过关于这个错误的任何事情。有那么有那么有那么有。

关于伽马分布--这就是我所理解的他在你的实现中所做的。而且我重申,他关于它的说法纯粹是字面意思。