向MQL4大师们提问。还是关于双倍比较。 - 页 4 1234567891011 新评论 Владимир 2007.09.10 03:41 #31 Integer: VBAG看一下这个脚本 而且你也在晚上工作,谢谢你的支持,现在我必须消化这一切。 Glaswegian 2007.09.10 03:46 #32 Integer: 价格=1.1111 ma = 1.11110001 当规范化为8位数时,ma>price是正确的。归一化为较少的数字将导致相等-不正确。 这是实现最大精度的方法。 这是个笑话,不是吗?:) 一般来说,不把马>价格正常化也是正确的做法。既然已经有了,而且已经知道比可实现的更大,为什么还要实现最大的精度呢? 归一化为9位数并不奏效。就好像价格是9位数,而指数是8位数,或者相反(我不记得了),总之,它被未知的神秘所覆盖。 是的,很可能是在NormalizeDouble 本身只计算到8位数。我告诉你,这是个可笑的功能,不管你怎么转。 Glaswegian 2007.09.10 03:54 #33 komposter: 而在简化的形式下,它的工作速度与ComparePrice一样快。 2007.09.10 03:19:24 CheckCompareDoubleSpeed GBPUSD,Daily: ComparePrice:20922, equal:20453 而在其原始形式中,它只是一首歌 :) int start() { double a, b; int start1, start2, end, c; a = 1.23450001; b = 1.23449999; start1 = GetTickCount(); for (c = 100000000; c > 0; c--) ComparePrice(a, b); start2 = GetTickCount(); for (c = 100000000; c > 0; c--) equal(a, b); end = GetTickCount(); Print("ComparePrice: ", start2 - start1, ", equal: ", end - 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 value1, double value2, int precision = 8) { return (NormalizeDouble(MathAbs(NormalizeDouble(value1, precision) - NormalizeDouble(value2, precision)), precision) < NormalizeDouble(MathPow(0.1, precision), precision)); } 2007.09.10 02:39:57 testScript USDJPYm,H4: ComparePrice:23843, equal:178704 诶,但是komposter 有一辆更好的车! Andrey Khatimlianskii 2007.09.10 04:41 #34 Irtron: 而在其原始形式中,它只是一首歌而已 :) 嗯,是的,你必须为多功能性付费。 或者说,ComparePrice也适用于比较任何给定精度的任何数字? Glaswegian 2007.09.10 04:56 #35 komposter: 或者说,ComparePrice也适用于比较任何给定精度的数字? 当然是这样!如果精度是已知的,在处理交易值时就是如此。固定点。 Andrey Khatimlianskii 2007.09.10 05:28 #36 Irtron: 当然了!如果准确度是已知的,交易值就是如此。固定点。 我同意。 只需要向众多 "关于双打的比较 "专题的作者解释。 这就是为什么我提出了一个_普遍_(但远非最佳)的比较方法。 而且很有效。缓慢但可靠。而在所有的情况下。 而当 "关于优化双打的比较 "的话题出现时,我们就可以开发它了;) [删除] 2007.09.10 12:56 #37 哪里需要价格正常化吗? 文件中写到,贸易请求中的价格必须是正常化的。 在'非正常化的历史和开仓' 分支中,它说了以下内容。 Renat 16.02.2007 10:01 我们特意在交易请求中加入了归一化价格,以避免无意中向服务器发送错误的价格。 Владимир 2007.09.10 13:34 #38 我想感谢所有专家的见解! Irtron, 我选择了你的变体,我非常喜欢它。我针对一般情况稍加修正,并进行了检查。 int ComparePrice(double a, double b, double digit) { a -= b。 b = 数字。 如果(a>b) 返回(1)。 如果(a < -b) 返回(-1)。 返回(0)。 } 谢谢。 Dmitry Fedoseev 2007.09.11 02:50 #39 有了digit=0,就会有问题。而且该函数比单次调用NormalizeDouble()的速度要慢。 Glaswegian 2007.09.11 11:25 #40 Integer: Digit=0会导致问题。 任何数字都会引起问题。我不明白什么是数字,修改的意义何在。 整数。 而且该函数比单次调用NormalizeDouble()的速度要慢。 此外,它还会比MathAbs、2+3等慢。:) 比较不同功能的函数有什么话题? 一个是简化的(虽然不可行),现在是NormalizeDouble。 你想用这种公然的方式来证明什么,向谁证明?(自己插入词)? 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
VBAG看一下这个脚本
价格=1.1111
ma = 1.11110001
当规范化为8位数时,ma>price是正确的。归一化为较少的数字将导致相等-不正确。 这是实现最大精度的方法。
一般来说,不把马>价格正常化也是正确的做法。既然已经有了,而且已经知道比可实现的更大,为什么还要实现最大的精度呢?
归一化为9位数并不奏效。就好像价格是9位数,而指数是8位数,或者相反(我不记得了),总之,它被未知的神秘所覆盖。
是的,很可能是在NormalizeDouble 本身只计算到8位数。我告诉你,这是个可笑的功能,不管你怎么转。
而在简化的形式下,它的工作速度与ComparePrice一样快。
而在其原始形式中,它只是一首歌而已 :)
或者说,ComparePrice也适用于比较任何给定精度的任何数字?
或者说,ComparePrice也适用于比较任何给定精度的数字?
当然了!如果准确度是已知的,交易值就是如此。固定点。
只需要向众多 "关于双打的比较 "专题的作者解释。
这就是为什么我提出了一个_普遍_(但远非最佳)的比较方法。
而且很有效。缓慢但可靠。而在所有的情况下。
而当 "关于优化双打的比较 "的话题出现时,我们就可以开发它了;)
哪里需要价格正常化吗?
文件中写到,贸易请求中的价格必须是正常化的。
在'非正常化的历史和开仓' 分支中,它说了以下内容。
Irtron, 我选择了你的变体,我非常喜欢它。我针对一般情况稍加修正,并进行了检查。
int ComparePrice(double a, double b, double digit)
{
a -= b。
b = 数字。
如果(a>b)
返回(1)。
如果(a < -b)
返回(-1)。
返回(0)。
}
谢谢。
Digit=0会导致问题。
任何数字都会引起问题。我不明白什么是数字,修改的意义何在。
而且该函数比单次调用NormalizeDouble()的速度要慢。
比较不同功能的函数有什么话题? 一个是简化的(虽然不可行),现在是NormalizeDouble。
你想用这种公然的方式来证明什么,向谁证明?(自己插入词)?