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

 
阿列克谢-伯纳科夫

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

让我们回到最初关于文章中R错误的声明。

我们的观点是--存在错误,而且是由于执行中的粗心造成的。

 
雷纳特-法特库林

问题是,@Quantum 是对R数学库在MQL5中的类似物的纯粹实现和全面检查。

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


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

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

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

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

亲爱的Renat!

我对你最近的帖子有以下问题,这是我的原则问题。

1.从你文章的发表日期来看,是2003年。自然,R和其他任何软件系统一样,都有错误,而且在发布时总是会公布一个修复清单。同时,R一直强调,由于用户数量极其庞大而导致的低水平的bug是R的优点。而在这里,自2003年以来,算法中的一个错误已经在出版层面上被发现,而且还没有被修复。这一点我不清楚。

你是否就这个问题向R公司进行过询问?

2.我想看看比较R和MQL5性能的代码。

我预先感谢你。

 
桑桑尼茨-弗门科

亲爱的Renat!

我对你最近的帖子有以下问题,这对我来说是根本性的。

1.从这篇文章的发表日期来看,是2003年。自然,R和其他任何软件系统一样,都有错误,而且在发布时总是会公布一个修复清单。同时,R一直强调由于用户数量极其庞大而导致的低水平bug是R的一个优势。而在这里,自2003年以来,算法中的一个错误已经在出版层面上被发现,而且还没有被修复。这一点我不清楚。

这是基本的、绝对清晰的。

每个人都会犯错误--这就是开发人员的工作。我们犯了大量的错误,但并不气馁。

R的这个错误只是因为粗心和对一个基本功能的信任,把其他功能搞得一团糟。它将被纠正。

你是否就这个问题向R公司进行过询问?

我们已经进行了测试,在编写库时详细研究了一切,不断比较MQL5 - Wolfram Alpha - R之间的结果,展示我们的结果,并准备公开回答。当然,我们已经在我们的数学包上附加了三个带有单元测试的大脚本和一个基准(这在源代码中)。

我相信@Quantum 会在R中写一份错误报告。更新后的文章在几个小时前刚刚发布。


我想看看比较R和MQL5性能的代码。

MQL5的基准代码可以在\Scripts\UnitTests\Stat\TestStatBenchmark.mq5中找到,R代码可以在MQL5中的统计分布--从R中吸取精华并使之更快 这篇文章的末尾找到,见 "附录。计算统计函数的时间线的结果"。

请确保通过连接到MetaQuotes-Demo服务器升级到MetaTrader 5 build 1467。正是在这个测试版中,我们包含了新的库和所有测试脚本。

 
雷纳特-法特库林

这是基本的,完全可以理解的。

每个人都会犯错--这就是开发者的天性。我们犯了大量的错误,但并不气馁。

R的这个错误只是来自于粗心和对一个基本功能的信任,而把其他功能搞砸了。它将被纠正。

我们已经进行了测试,在编写库时详细研究了一切,不断比较MQL5 - Wolfram Alpha - R之间的结果,展示我们的结果,并准备公开回答。当然,我们已经在我们的数学包上附加了三个带有单元测试的大脚本和一个基准(这在源代码中)。

我相信@Quantum 会在R中写一份错误报告。更新后的文章在几个小时前刚刚发布。


MQL5中的基准代码可以在\Scripts\UnitTests\Stat\TestStatBenchmark.mq5中找到,R中的代码可以在《MQL5中的统计分布--从R中吸取精华并使之更快》一文的末尾找到。统计函数的时间计算结果"。

请确保通过连接到MetaQuotes-Demo服务器升级到MetaTrader 5 build 1467。正是在这个测试版中,我们包括了新的库和所有测试脚本。

我还不能对性能比较形成自己的看法。而这是一个原则问题。

问题是,R是一个理想的开发环境--用一个词来形容就是解释器。但是,在开发过程中存在的代码与工作代码有很大的不同--从行数上看是很多倍。而另一方面,工作代码是非常简短和非常有容量的。因此,我们应该比较软件包中的任何功能,这些功能在做交易决策时是有意义的,例如,随机森林,它使用计算容量大的算法,矩阵操作,加载所有核心....。

PS。

你使用的是一个过时的R版本。你应该从MRAN- Microsofn R Open网站上获取R3.3.1(2016-06-21)版本。这样做时,必须安装MKL。微软在提到的R版本中声称,它能够将一些包和函数的执行速度提高到50(!)倍。

Microsoft R Open: The Enhanced R Distribution · MRAN
  • Microsoft Corporation
  • mran.revolutionanalytics.com
Microsoft R Open, formerly known as Revolution R Open (RRO), is the enhanced distribution of R from Microsoft Corporation. It is a complete open source platform for statistical analysis and data science. The current version, Microsoft R Open 3.3.1, is based on (and 100% compatible with) R-3.3.1, the most widely used statistics software in the...
 
桑桑尼茨-弗门科

我还不能对性能比较形成意见。而这是一个原则问题。

问题是,R是一个理想的开发环境--用一个词来形容就是解释器。但是,在开发过程中存在的代码与工作代码有很大的不同--从行数上看是很多倍。而另一方面,工作代码是非常简短和非常有容量的。这就是为什么我们应该比较软件包中的任何功能,这些功能在做出交易决定时是有意义的,例如,随机森林,它使用计算容量大的算法,矩阵操作,加载所有核心....。

我们有条不紊地将R的特征翻译成MQL5。而在这样一种方式下,函数调用的本质原来是非常相似的。

以下是该文章中的一个通信实例。


分布情况
MQL5函数
R功能
1正常
MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2β
MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3二项式
MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
Cauchy
MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5卡方
MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6指数
MathProbabilityDensityExponential
MathCumulativeDistributionExponential
MathQuantileExponential
MathRandomExponential
dexp
pexp
qexp
rexp
7费希尔的F
MathProbabilityDensityF
MathCumulativeDistributionF
MathQuantileF
MathRandomF
df
pf
qf
rf
8伽玛
MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
9几何学
MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
10超几何学
MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
11
物流
MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12对数正态
MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
13负二项式
MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
14非集中性β
MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
15非中心性卡方
MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
16
分权F
MathProbabilityDensityNoncentralF()
MathCumulativeDistributionNoncentralF()
MathQuantileNoncentralF()
MathRandomNoncentralF()
df
pf
qf
rf
17权力下放的T类学生
MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
18泊松的
MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
19T 学生
MathProbabilityDensityT
MathCumulativeDistributionT
MathQuantileT
MathRandomT
dt
pt
qt
rt
20
统一的
MathProbabilityDensityUniform
MathCumulativeDistributionUniform
MathQuantileUniform
MathRandomUniform
dunif
punif
qunif
runif
21威布尔型
MathProbabilityDensityWeibull
MathCumulativeDistributionWeibull
MathQuantileWeibull
MathRandomWeibull
dweibull
pweibull
qweibull
rweibull

我们试图使来自R的代码在大小和时间上与在MQL5中编写的代码接近一致。

明天我们将发布图形库的测试版,并在R和MQL5中展示同等大小的代码块和图像。



你使用的是一个过时的R版本。你应该从MRAN- Microsofn R Open网站上获取R3.3.1(2016-06-21)版本。这样做时,必须安装MKL。微软在提到的R版本中声称,它设法将一些包和函数的执行速度提高到50(!)倍。

我怀疑股票版本的R能突然加速--那里的代码并没有什么变化。显然,有些功能是可以加快的,特别是矩阵功能。而你的说法证实了我的看法,即R的代码在性能方面写得相当马虎。

如果你读了这篇文章,你会发现,即使在没有任何多线程和MKL的情况下,我们在基本函数上的速度也能达到46倍。

计算是在英特尔酷睿i7-4790,3.6Ghz CPU,16GB内存,Windows 10 x64上进行的。计算时间结果以微秒为单位


分布情况
MQL5时间
PDF计算时间(µs)
R计算时间
PDF计算时间(µs)
PDF
R/MQL5
MQL5的计算时间
CDF计算时间(µs)
R计算时间
CDF计算时间(µs)
CDF
R/MQL5
MQL5的计算时间
量子化时间(µs)
R计算时间
量子计算时间(µs)
量子化
R/MQL5
MQL5生成时间
随机数生成时间(µs)
R生成时间
随机数生成时间(μs)
随机
R/MQL5
1
二项式
4.39
11.663
2.657
13.65
25.316
1.855
50.18
66.845
1.332
318.73
1816.463
5.699
2
β
1.74
17.352
9.972
4.76
15.076
3.167
48.72
129.992
2.668
688.81
1723.45
2.502
3
伽玛
1.31
8.251
6.347
8.09
14.792
1.828
50.83
64.286
1.265
142.84
1281.707
8.973
4
Cauchy
0.45
1.423
3.162
1.33
15.078
11.34
1.37
2.845
2.077
224.19
588.517
2.625
5
指数
0.85
3.13
3.682
0.77
2.845
3.695
0.53
2.276
4.294
143.18
389.406
2.72
6
统一的
0.42
2.561
6.098
0.45
1.423
3.162
0.18
2.846
15.81
40.3
247.467
6.141
7
几何学
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
8
超几何学
1.8511.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
9
物流
1.27
4.267
3.36
1.11
4.267
3.844
0.71
3.13
4.408
178.65
626.632
3.508
10
威布尔型
2.99
5.69
1.903
2.74
4.268
1.558
2.64
6.828
2.586
536.37
1558.472
2.906
11
泊松
2.91
5.974
2.053
6.26
8.534
1.363
3.43
13.085
3.815
153.59
303.219
1.974
12
F
3.86
10.241
2.653
9.94
22.472
2.261
65.47
135.396
2.068
1249.22
1801.955
1.442
13
智平方
2.47
5.974
2.419
7.71
13.37
1.734
44.11
61.725
1.399
210.24
1235.059
5.875
14
非中心奇异度
8.05
14.223
1.767
45.61
209.068
4.584
220.66
10342.96
46.873
744.45
1997.653
2.683
15
非中心区F
19.1
28.446
1.489
14.67
46.935
3.199
212.21
2561.991
12.073
1848.9
2912.141
1.575
16
非中央贝塔
16.3
26.739
1.64
10.48
43.237
4.126
153.66
2290.915
14.909
2686.82
2839.893
1.057
17
负二项式
6.13
11.094
1.81
12.21
19.627
1.607
14.05
60.019
4.272
1130.39
1936.498
1.713
18
正常
1.15
4.267
3.71
0.81
3.983
4.917
0.7
2.277
3.253
293.7
696.321
2.371
19
对数正态
1.99
5.406
2.717
3.19
8.819
2.765
3.18
6.259
1.968
479.75
1269.761
2.647
20
T
2.32
11.663
5.027
8.01
19.059
2.379
50.23
58.596
1.167
951.58
1425.92
1.498
21
非中央T
38.47
86.757
2.255
27.75
39.823
1.435
1339.51
1930.524
1.441
1550.27
1699.84
1.096
<PDF R/MQL5>
3.474<CDF R/MQL5>
3.465
<<广联达R/MQL5>>
7.03
<随机R/MQL5>
3.13



但指定的版本当然会被测试。无论是速度还是性能。

 
桑桑尼茨-弗门科

关于 "错误的答案",你错了

...

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

我写的时候,对错误的答案有一点讽刺意味。我应该加一个笑脸的...实际上,我在最后补充说,这在两种情况下都不是一个错误,因为编译器和解释器在非定义功能区的行为完全取决于系统架构和开发人员。当然,在这种情况下,最好是退回南。
我的意思是,不要用没有定义的参数来调用一个函数,然后与另一个库的结果进行比较,否则你会发现数以百计的 "错误"。

顺便说一下,这是个有趣的例子,有弧度。
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)

Wolfram -
Arcsin(1) = Pi/2
Arcsin(2)=复杂的东西。没有有效结果的解决方案。

R -
asin(1) = Pi/2
asin(2) = nan(答案是实数)。
asin(2+0i) = 复杂的东西,就像在wolfram中一样

wiki说asin(1)仍然被定义(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions),你可以向servicedesk写一份bug报告。
但是asin(2)是一个不可定义的区域,它是可以的,而且到处都是匹配的。

再说说上一篇文章--在简单的数学中除以0是不可能的,所以mql脚本崩溃出错是符合逻辑的,这里没有bug。但非常奇怪的是,对结果的准确性如此一丝不苟地达到小数点后16位,而在除以0时返回nan或Inf,因为某些原因不可能。我认为需要返回Inf,而不是用他们的脚本突然崩溃来折磨开发者。

 
Renat,这个从R到mql的几个函数的翻译真的是你所说的惊喜吗?
 

要禁用实值除法控制,在metaeditor.ini文件的[专家]部分使用参数FpNoZeroCheckOnDivision=1

如果这个参数存在,以下代码将产生inf

void OnStart()
  {
   double x=0;  
   Print(1/x);
  }

当然,这个参数的存在并不能使你在除以常数0.0时避免编译错误
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS:
Renat,这个从R到mql的一些函数的转移真的是你所说的惊喜吗?

没有。

惊讶是没有意义的,我们将在MQL5和MetaTrader 5内做一切事情。

 
雷纳特-法特库林

如果这个参数存在,下面的代码将给出inf

谢谢你,非常正确的设置。而如果你用零除以零,得到的是nan而不是inf,那就更正确了,我甚至没有想到会有这样的准确性!"。