向MQL4大师们提问。还是关于双倍比较。 - 页 2 123456789...11 新评论 Glaswegian 2007.09.10 01:40 #11 再一次。 价格、地段、金钱--固定的精度。 指标是浮动的。 这种差异在本质上是,虽然双倍被用来代表这两种情况。它实际上决定了你所谓的 "编程风格"。 同样,每个人的 "正确性 "标准是不同的。例如,根据我的理解,NormalizeDouble()是一个效率低得可笑的函数,因此也是绝对不必要的。 Владимир 2007.09.10 01:49 #12 komposter: //--- Если value1 равняется value2 до precision знака после запятой, возвращает true, иначе - false. bool equal( double value1, double value2, int precision = 8 ) { return( nd( abs( nd( value1, precision ) - nd( value2, precision ) ), precision ) < nd( MathPow( 0.1, precision ), precision ) ); } 代码很清晰,你的例子也很说明问题!而这一次是一个小插曲。 nd( MathPow( 0.1, precision ), precision ) 把它改为 //--- Если value1 равняется value2 до precision знака после запятой, возвращает true, иначе - false. bool equal( double value1, double value2, int precision = 8 ) { return( nd(nd( abs( nd( value1, precision ) - nd( value2, precision ) ), precision )), precision ) == 0.0 ); } 还是错了? Andrey Khatimlianskii 2007.09.10 01:51 #13 Irtron: 将数字与双精度进行比较的问题很牵强,来自于对数学的基本无知。 但以令人羡慕的毅力,它在论坛上出现了。 要么给出如何解决这个 "问题 "的明确指示,要么二者之一=) Irtron。 但会有性能问题。 有什么建议吗(用户级别,不是MT开发者级别)? Glaswegian 2007.09.10 02:07 #14 komposter: 有什么建议吗(用户级别,不是MT开发者级别)? 例如,对于价格。出价,有,询问,停止。 int ComparePrice(double a, double b) { a -= b; b = Point / 2.; if (a > b) return (1); if (a < -b) return (-1); return (0); } 通常情况下,用整数进行所有批次和级别的计算会更好。原则上要快很多倍,而且没有采样误差。 Владимир 2007.09.10 02:07 #15 Irtron: 再一次。 价格、地段、金钱--固定的精度。 指标是浮动的。 这种差异在本质上是,虽然双倍被用来代表这两种情况。它实际上决定了你所谓的 "编程风格"。 同样,每个人的 "正确性 "标准是不同的。例如,根据我的理解,NormalizeDouble()是一个效率低得可笑的函数,因此也是绝对不必要的。 最近,在某个主题中(我不记得具体内容),一个人在抱怨专家顾问的奇怪操作。而事实证明,即使是为他的订单从服务器上取下的价格,也仍然需要进行规范化处理! 此后,我简单地将NormalizeDouble()作为一个强制性程序。我确实还没有很好地理解代码有时是如何工作的,这就是为什么我对应该如何做感兴趣。 你建议用什么方法来代替NormalizeDouble()? Владимир 2007.09.10 02:11 #16 Irtron: 康帕斯。 有什么建议吗(在用户层面,而不是MT开发者层面)? 例如,对于价格。出价,有,询问,停止。 int ComparePrice(double a, double b) { a -= b; b = Point / 2.; if (a > b) return (1); if (a < -b) return (-1); return (0); } 通常情况下,用整数进行所有批次和级别的计算会更好。原则上要快很多倍,而且没有采样误差。 我同意,在欧米茄,一切都在INT中。你是否建议先将MT中的所有内容转换为INT,然后再进行计算? P.S. 而你的ComparePrice是一个非常有趣的解决方案,我甚至没有马上得到它。 ComparePriceComparePrice Dmitry Fedoseev 2007.09.10 02:12 #17 Irtron: 再一次。 价格、地段、金钱--固定的精度。 指标是浮动的。 这种差异在本质上是,虽然双倍被用来代表这两种情况。它实际上决定了你所谓的 "编程风格"。 同样,每个人的 "正确性 "标准是不同的。例如,根据我的理解,NormalizeDouble()是一个效率低得可笑的函数,因此也是绝对不必要的。 首先,在自己的订单上写几个专家顾问,感受一下客户的风吹草动,止损突然变成了1个点的错误。然后向他们解释NormalizeDouble()函数的荒谬之处,我想知道它对你来说会有什么效果=) Glaswegian 2007.09.10 02:17 #18 VBAG: 而事实证明,即使是从你的订单中从服务器中提取的价格也仍然需要规范化!!。 不太可能(c)。MT的内脏几乎不可能正常化。 过去和现在都有很多人在谈论,当用不理解的历史数据进行测试时,该EA的表现令人难以理解。 Andrey Khatimlianskii 2007.09.10 02:22 #19 Irtron: 例如,对于价格。出价,有,询问,停止。 这已经很了不起了。越来越具体了;) 如果你采取价格比较,你不需要像我这样的超载函数。 而在简化的形式下,它的工作速度与ComparePrice一样快。 int start() { double a = 1.23450001, b = 1.23449999; int start1 = GetTickCount(), c1; for ( c1 = 0; c1 < 100000000; c1 ++ ) ComparePrice( a, b ); int end1 = GetTickCount(); int start2 = GetTickCount(), c2; for ( c2 = 0; c2 < 100000000; c2 ++ ) equal( a, b ); int end2 = GetTickCount(); Print( "ComparePrice: ", (end1-start1), ", equal: ", (end2-start2) ); return(0); } int ComparePrice(double a, double b) { a -= b; b = Point / 2.; if (a > b) return (1); if (a < -b) return (-1); return (0); } bool equal( double a, double b ) { return( MathAbs( a - b ) < Point ); } 2007.09.10 03:19:24 CheckCompareDoubleSpeed GBPUSD,Daily: ComparePrice:20922, equal:20453 Glaswegian 2007.09.10 02:25 #20 Integer: 首先,在自己的订单上写几个专家顾问,感受一下客户的风暴,因为止损突然变成了1个点的错误......然后向他们解释NormalizeDouble()函数的荒谬性,我想知道它对你来说会有什么效果=) 让我告诉你一个秘密。 我已经写了许多定制的专家顾问,比开始需要的还要多。 我从来没有感觉到购买它们的冲动,因为我从来没有给过任何理由这样做。我的程序中的止损保证在(而不是 "出现")它应该在的位置。相应地,我不需要向客户解释任何东西,特别是关于一些非常具体的功能。在我看来,编写EA的全部意义在于为客户摆脱这种问题和解释。 123456789...11 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
价格、地段、金钱--固定的精度。
指标是浮动的。
这种差异在本质上是,虽然双倍被用来代表这两种情况。它实际上决定了你所谓的 "编程风格"。
同样,每个人的 "正确性 "标准是不同的。例如,根据我的理解,NormalizeDouble()是一个效率低得可笑的函数,因此也是绝对不必要的。
把它改为
还是错了?
将数字与双精度进行比较的问题很牵强,来自于对数学的基本无知。
要么给出如何解决这个 "问题 "的明确指示,要么二者之一=)
但会有性能问题。
有什么建议吗(用户级别,不是MT开发者级别)?
通常情况下,用整数进行所有批次和级别的计算会更好。原则上要快很多倍,而且没有采样误差。
再一次。
价格、地段、金钱--固定的精度。
指标是浮动的。
这种差异在本质上是,虽然双倍被用来代表这两种情况。它实际上决定了你所谓的 "编程风格"。
同样,每个人的 "正确性 "标准是不同的。例如,根据我的理解,NormalizeDouble()是一个效率低得可笑的函数,因此也是绝对不必要的。
此后,我简单地将NormalizeDouble()作为一个强制性程序。我确实还没有很好地理解代码有时是如何工作的,这就是为什么我对应该如何做感兴趣。
你建议用什么方法来代替NormalizeDouble()?
有什么建议吗(在用户层面,而不是MT开发者层面)?
通常情况下,用整数进行所有批次和级别的计算会更好。原则上要快很多倍,而且没有采样误差。
P.S. 而你的ComparePrice是一个非常有趣的解决方案,我甚至没有马上得到它。
再一次。
价格、地段、金钱--固定的精度。
指标是浮动的。
这种差异在本质上是,虽然双倍被用来代表这两种情况。它实际上决定了你所谓的 "编程风格"。
同样,每个人的 "正确性 "标准是不同的。例如,根据我的理解,NormalizeDouble()是一个效率低得可笑的函数,因此也是绝对不必要的。
首先,在自己的订单上写几个专家顾问,感受一下客户的风吹草动,止损突然变成了1个点的错误。然后向他们解释NormalizeDouble()函数的荒谬之处,我想知道它对你来说会有什么效果=)
而事实证明,即使是从你的订单中从服务器中提取的价格也仍然需要规范化!!。
过去和现在都有很多人在谈论,当用不理解的历史数据进行测试时,该EA的表现令人难以理解。
例如,对于价格。出价,有,询问,停止。
如果你采取价格比较,你不需要像我这样的超载函数。
而在简化的形式下,它的工作速度与ComparePrice一样快。
首先,在自己的订单上写几个专家顾问,感受一下客户的风暴,因为止损突然变成了1个点的错误......然后向他们解释NormalizeDouble()函数的荒谬性,我想知道它对你来说会有什么效果=)
让我告诉你一个秘密。
我已经写了许多定制的专家顾问,比开始需要的还要多。 我从来没有感觉到购买它们的冲动,因为我从来没有给过任何理由这样做。我的程序中的止损保证在(而不是 "出现")它应该在的位置。相应地,我不需要向客户解释任何东西,特别是关于一些非常具体的功能。在我看来,编写EA的全部意义在于为客户摆脱这种问题和解释。