初学者的问题 MQL5 MT5 MetaTrader 5 - 页 154

 
paladin800:
也就是说,你需要将1.33182转换成1.3318?你可以简单地切断小数点后的第5位数字,或将其四舍五入到第4位数字,例如,你会从1.33186得到1.3318或1.3319?

我的问题是,是否存在一个错误。在我的例子中,当从double转换到int时,结果是少了一个。请自己检查。

   double max=NormalizeDouble(1.33182,4);  
   //double max=1.3318;
   Alert(int(max*10000));
警报 应该发出13318,但它发出了13317。如果 四舍五入到int,它将正确地给出13318.0。
 

告诉我在表达上是否有区别。

if(bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize && bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)

и

if(( bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize) && ( bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize))
 
sgreen:

告诉我在表达上是否有区别。

и

如果你怀疑某件事情不对,就把它变成这样。

if(bufferclose[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) && bufferopen[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) )
 
Rorschach:

我的问题是,是否存在一个错误。在我的例子中,当从double转换到int时,结果是少了一个。请自己检查一下。

警报应该发出13318,但却发出了13317。因此,如果 减少到int,则正确地给出了13318.0
警报并没有发出错误。重点是,归一化将数字引向二进制形式,它最接近 所要求的十进制模拟,而不一定与它多少吻合(在你的例子中)。 因为用有限的十进制分数表示的东西,不一定能用有限的 二进制表示。 表达式
int(max*10000)

导致丢弃小数部分而不是四舍五入(即类似于MathFloor()而不是MathRound()),在你的例子中,归一化的数字 很可能正好等于13318,但是说13317,999999999997

当以有限位数的小数形式输出时,会导致四舍五入到正确的(预期的)结果,而当.... 的小数部分被丢弃的时候你自己看吧。

我希望我解释清楚了。

 
pronych:
是否有类似于夏普的部分? 或者如何做?

没有类似的东西。你可以使用#include<partial_class_code.mqh>嵌入一段定义。

有些人甚至以这种方式模仿多重继承。//我不这样做,我已经习惯了不这样做。:)

 
paladin800:

如果你怀疑有什么不对劲,就把它说出来。

我已经有了。只是好奇。
 
sgreen:
我已经做了。只是好奇。

我明白了。回到你之前的问题,记录的本质可以得出这样的比较。

if (A<=B && C<=D)     // 1
if ((A<=B) && (C<=D)) // 2

这些条目之间没有区别。同时,我建议你在if-os里面括上数学计算

if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
MetaDriver:
该警报不产生错误。重点是,归一化将一个数字引向二进制形式,它 接近所要求的十进制模拟,而它可能不会在更大或更小(在你的例子中)的方向上与之重合。 因为用有限的十进制分数表示的东西,不一定能用有限的二进制分数表示。表达式

结果是放弃小数部分而不是四舍五入(即看起来更像MathFloor()而不是MathRound()),在你的例子中,归一化的数字 很可能是13317.9999999999997而不是13318。

当以有限位数的小数形式输出时,会导致四舍五入到正确的(预期的)结果,而当.... 的小数部分被丢弃的时候你自己看吧。

我希望我已经解释清楚了。

谢谢,我明白了。

还有一个问题,如果我不能不转换为int,那么我应该如何对抗?

 
你能告诉我在测试EA 时如何将经纪人的佣金考虑在内吗?
 
Rorschach:

谢谢你,我明白了。

另一个问题,如果你不能不转到int,你如何处理这个问题?

而你要加几个ε值。

DBL_EPSILON

满足1.0+DBL_EPSILON !=1.0条件的最小的数字。


Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов - Документация по MQL5