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...
然后按字面顺序评论一下,对于一个均匀的连续分布,极端点的密度是正的,而积分是零。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(!)倍。
我还不能对性能比较形成意见。而这是一个原则问题。
问题是,R是一个理想的开发环境--用一个词来形容就是解释器。但是,在开发过程中存在的代码与工作代码有很大的不同--从行数上看是很多倍。而另一方面,工作代码是非常简短和非常有容量的。这就是为什么我们应该比较软件包中的任何功能,这些功能在做出交易决定时是有意义的,例如,随机森林,它使用计算容量大的算法,矩阵操作,加载所有核心....。
我们有条不紊地将R的特征翻译成MQL5。而在这样一种方式下,函数调用的本质原来是非常相似的。
以下是该文章中的一个通信实例。
统一的
我们试图使来自R的代码在大小和时间上与在MQL5中编写的代码接近一致。
明天我们将发布图形库的测试版,并在R和MQL5中展示同等大小的代码块和图像。
我怀疑股票版本的R能突然加速--那里的代码并没有什么变化。显然,有些功能是可以加快的,特别是矩阵功能。而你的说法证实了我的看法,即R的代码在性能方面写得相当马虎。
如果你读了这篇文章,你会发现,即使在没有任何多线程和MKL的情况下,我们在基本函数上的速度也能达到46倍。
计算是在英特尔酷睿i7-4790,3.6Ghz CPU,16GB内存,Windows 10 x64上进行的。计算时间结果以微秒为单位
PDF计算时间(µs)
PDF计算时间(µs)
R/MQL5
CDF计算时间(µs)
CDF计算时间(µs)
R/MQL5
量子化时间(µs)
量子计算时间(µs)
R/MQL5
随机数生成时间(µs)
随机数生成时间(μs)
R/MQL5
但指定的版本当然会被测试。无论是速度还是性能。
关于 "错误的答案",你错了
...
例如,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,而不是用他们的脚本突然崩溃来折磨开发者。
要禁用实值除法控制,在metaeditor.ini文件的[专家]部分使用参数FpNoZeroCheckOnDivision=1
如果这个参数存在,以下代码将产生inf
当然,这个参数的存在并不能使你在除以常数0.0时避免编译错误。
'0.0' - division by zero in the constant expression s1.mq5 8 12
Renat,这个从R到mql的一些函数的转移真的是你所说的惊喜吗?
没有。
惊讶是没有意义的,我们将在MQL5和MetaTrader 5内做一切事情。
如果这个参数存在,下面的代码将给出inf