错误、漏洞、问题 - 页 2939

 
x572intraday:
所有的价格都显示到小数点后五位,在同一个列表中,有一个由于某种原因而这样认为:为什么?这是一个错误,还是我的输出应该被编辑成一个统一的外观?好吧,这么说吧,我用PrintFormat或fprint来梳理它,但原则上它不是不正确的数字表示?

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

Nikolai Semko, 2020.01.05 21:41

我总是有这样的疑问。
不断地都在谈论 IEEE 标准 754,但人们经常,当他们去维基百科时--无论是因为复杂,还是因为懒惰,都没有理解该标准的含义就离开。

我将花一点时间尝试用简单的语言尽可能简要地解释这个标准,以便进一步参考这个帖子。


因此, 类型 双倍,包括8个字节=64位(float 4字节=32位)

双数 浮点数 数字表示 3个部分组成:符号、指数和尾数


双打。


漂浮物。

自然,这种格式的数字没有十进制表示,只有二进制。

  • 符号是1位。如果是0,就是+(加),如果是1,就是-(减)。
  • 指数存储的是数字2的度数。对于浮点数可以在-12610到12710的范围内,对于双数可以在-102210 到102310的范围内。
  • 尾数是二进制形式的数字本身的小数部分,简化为一种形式,其中逗号站在第一个单位之后,不考虑该第一个单位和逗号


对数字的二进制表示法及其与十进制数字的关系有一点了解。

24= 100002 = 1610

23= 10002 = 810

22= 1002 = 4

21=102= 2

20=12=110

2-1= 0.12=(1/2)10= 0.510

2-2= 0.012 = (1/4)10= 0.2510

2-3= 0.0012 = (1/8)10= 0. 12510

2-4= 0.00012 = (1/16)10 = 0.062510

2-5= 0.000012 = (1/32)10 = 0.0312510

2-6= 0.0000012 = (1/64)10= 0.01562510

2-7= 0.00000012 = (1/128)10= 0.007812510

2-8= 0.000000012 = (1/256)10 = 0.0039062510

2-9= 0.0000000012 = (1/512)10 = 0.00195312510

2- 10= 0.00000000012 = (1/1024)10 = 0.000976562510

2- 11= 0.000000000012 = (1/2048)10 = 0.0004882812510

2- 12= 0.0000000000012 = (1/4096)10 = 0.00024414062510

2- 13= 0.00000000000012 = (1/8192)10 = 0.000122070312510

让我们回顾 一下双倍例子

例子#1

我们有一个十进制的数字:891677.4025191

这个数字可以用二进制形式表示。

1101100110110001110101.011001110000101101110111110110001000001111111010001110
(谁想查就查))。

我们提取给定数字的尾数,只需将逗号19位向左移动(在本例中),使其位于第一个单位之后。

1.1011001101100011101011001110000101101111101111000101000001111101110001110* 219

但我们的尾数只有52位。所以我们取前52个有效位

Мантисса =1011001101100011101011001110000101101111101111000101

指数=(19+1023)10=100000100102(由于指数是一个有符号的数字,而且指数可以是负数(例如如果我们有0.0000042132),我们需要 1023加到10(011111111112),0111111112是零,一切多了就是正数,少了就是负数。换句话说,为了得到指数的反向值,我们需要从指数的11位值中减去1023。

总的来说,我们的号码891677.4025191 在类型上会有 如下的 双倍

0100000100101011001101100011101011001110000101101111101111000101

但由于这是一个二进制表示法,让我们把它准确地转换为十进制。

那将是891677.402519099996425211429595947265625


例子#2

我们有一个十进制的数字:-0.00000145258556224114

这个数字可以用二进制形式表示。

-0.000000000000000000011000010111101100111010110111010011010101001111001110

选择这个数字的尾数,只需将逗号向右移动20位,使其位于第一个单位之后。

1.1000010111101100111010110111010011010101001111001110* 2-20

Мантисса =1000010111101100111010110111010011010101001111001110

指数=(-20+1023)10=011111010112

减号,所以第一位是1。

我们的总数-0.00000145258556224114,在双倍类型中看起来如下。

1011111010111000010111101100111010110111010011010101001111001110

将其精确转换为十进制。

это будет-0.00000145258556224113991124017968015191826225418481044471263885498046875



在你的案例中,问题发生在数字0.01上,因为在双倍类型中,它将被表示成这样。

0 01111111000 0100011110101110000101000111101011100001010001111011

当转换为十进制符号系统时,等于0.010000000000000000208166817117216858513294309377670288085937510

而具有代表性的是

310= 1.5*2 =1.12*2 1

510= 2.5*2 = 10.12*2 1

610= 1.5*4 =1.12*2 2

710 = 3.5*2 = 11.12*2 1

没问题。

为什么双0.01的数字真的比0.01大?

原因就在这里。

0 01111111000 010001111010111010000101011101001010001111011 - 0.01000000000000000020816681711721685132943093776702880859375误差=0.000 000 000 000 000 208166817...

0 01111111000 01000111101011100001010001111010 - 0.0099999999999999984747344334114097569175064563751220703125误差= - 0.000 000 000 001 5265566...

要了解这个过程的化学,你可以玩一玩这些计算器:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

https://baseconvert.com/ieee-754-floating-point


https://baseconvert.com/ieee-754-floating-point


 

谢谢你,信息量大。那么,基本上,MQ应该有,但修正不足,还是由用户决定?

 

是否有一个函数或其他一些额外的功能(库、代码)来保存EA参数?

任务是在ondeinit代码中,例如,当在一个符号上运行EA时(附加功能也是周期分析),将保存设置的文件。

例如 - EA名称-符号-句号。

有可能被覆盖的文件--只有符号的最后设置。

例如,测试器中的标准设置被保存为最后一次运行。

 
日安,在远程电脑上的问题,我无法访问MQL5网站,所以我无法下载我买的指标。我无法进入MQL5网站,因此我无法下载我购买的指标。
 
Slava Botalov:
你好,我在远程电脑上遇到了一个问题,我无法访问MQL5网站,因此我无法下载我购买的指标。我不能下载我买的指标。


但在Zomro上有一台远程计算机?

 
x572intraday:

谢谢你,信息量大。那么,基本上,MQ的应该有,但修正不足,还是故意留给用户判断的决定?

所以他们没有得到它。
没有任何错误。
一切都是理所当然的。
 
Vladislav Andruschenko:


但在Zomro上有一台远程计算机?

 
Slava Botalov:
日安,在远程电脑上的问题,我无法访问MQL5网站,所以我无法下载我买的指标。我无法下载该指标,所以我无法在MQL5网站上安装它。
Vladislav Andruschenko:


但在Zomro上有一台远程计算机?

Slava Botalov:


该供应商因严重不当行为而被禁止

关于交易、自动交易系统和测试交易策略的论坛

为什么访问www.mql4.com 被阻止?

Renat Fatkhullin, 2020.11.17 12:16

***

整个有子网的Zomro供应商因其子网的大规模欺诈活动而被封锁。

***
 
Nikolai Semko:
所以,他们不理解。
根本就没有错误。
一切都是理所当然的。

这不是问题的关键。问题是,它能在哪些方面发挥作用,特别是对交易者,而不是程序员?我从来没有在终端中看到过这样的数字,无论是在价格表中还是在下单窗口中;那里的一切在任何地方都是一样的(某处是五位数,某处是其他)。

 
Vladimir Karputov:


该供应商因严重不当行为而被禁止。

太糟糕了,我们不得不换成另一个,有什么建议吗?