我怎样才能持续地通过列举? - 页 4

 
fxsaber:
比标准的NormalizeDouble(build 1395)几乎快四倍...是开发商的一个拐杖。

什么是几乎四倍的速度?给我看看代码!
 
我对这4次也感到惊讶......
而且也不太清楚数组或开关是如何落在那里的。 这是个纯数学问题。
 
Dmitry Fedoseev:
什么是几乎四倍的速度?给我密码!
不知道有多少天在代码库中进行检查。检查员一定是在度假。
 
fxsaber:
在kodobaza进行检查,时间不详。检查员可能在度假。
我想他们是今天开始发布的。也许他们也会来找我们 ))))
 
Ihor Herasko:
我想他们是今天开始发布的。也许他们也会到达我们这里 ))))
你猜对了。我不知道。
 
Dmitry Fedoseev:
什么是几乎4倍的速度?代码,请!

https://www.mql5.com/ru/code/16169

// Почти в четыре раза быстрее соответствующей стандартной функции (build 1395)
#define NormalizeDouble PRICE_COMPARE::MyNormalizeDouble
Price_Compare
Price_Compare
  • 投票: 1
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Изящное и шустрое сравнение double-значений "цены".
 

使用这个函数时要小心,它将在比NormalizeDouble小的数值范围内正确工作。

我不会解释原因--你自己猜吧。

NormalizeDouble函数 起作用。

  1. 整数部分被选中 - I
  2. 分数部分被选中 - F
  3. F = F * 10^digits
  4. F = F(+或-取决于符号) 0.5
  5. F = (F的整数部分) / 10^个数字
  6. 结果 = I + F
 
总而言之,没有任何感觉。
 
Ilyas:

使用这个函数时要小心,它将在比NormalizeDouble小的数值范围内正确工作。

我不会解释原因--你自己猜吧。

NormalizeDouble函数 起作用。

  1. 检测到的是整数部分 - I
  2. 分数部分被选中 - F
  3. F = F * 10^digits
  4. F = F(+或-,取决于符号) 0.5
  5. F = (F的整数部分) / 10^个数字
  6. 结果 = I + F

该函数描述 包含以下说明

计算出的StopLoss和TakeProfit值,以及挂单的开仓价格值,应该用Digits()可以得到的精度进行规范化

这只适用于最小价格步长为10^N的符号,其中N是一个整数且不是正数。如果最小价格步长有一个不同的值,那么在OrderSend之前对价格水平进行归一化是一个无意义的操作,在大多数情况下,这将导致返回错误的OrderSend。


在帮助中纠正过时的表述是一个好主意。

NormalizeDouble是完全不可靠的。不仅实施起来很弱智,在多个交易所的符号上也毫无意义(如RTS、MIX等)。

至于所提出的替代性实施方案,它在正反两方面都与原始方案一样准确。而且它以同样的方式进行四舍五入。只是它的工作速度快了4倍。

 
fxsaber:

这只适用于最小价格步长为10^N的字符,其中N是一个整数且不是正数。如果最小价格阶梯有不同的值,那么在OrderSend之前对价格水平进行归一化是一个无意义的操作,在大多数情况下,这将导致返回错误的OrderSend

为什么要这样呢?