向MQL4大师们提问。还是关于双倍比较。 - 页 4

 
Integer:
VBAG看一下这个脚本
而且你也在晚上工作,谢谢你的支持,现在我必须消化这一切。
 
Integer:

价格=1.1111

ma = 1.11110001

当规范化为8位数时,ma>price是正确的。归一化为较少的数字将导致相等-不正确。 这是实现最大精度的方法。

这是个笑话,不是吗?:)
一般来说,不把马>价格正常化也是正确的做法。既然已经有了,而且已经知道比可实现的更大,为什么还要实现最大的精度呢?

归一化为9位数并不奏效。就好像价格是9位数,而指数是8位数,或者相反(我不记得了),总之,它被未知的神秘所覆盖。


是的,很可能是在NormalizeDouble 本身只计算到8位数。我告诉你,这是个可笑的功能,不管你怎么转。
 
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 有一辆更好的车!
 
Irtron:
而在其原始形式中,它只是一首歌而已 :)
嗯,是的,你必须为多功能性付费。
或者说,ComparePrice也适用于比较任何给定精度的任何数字?
 
komposter:

或者说,ComparePrice也适用于比较任何给定精度的数字?
当然是这样!如果精度是已知的,在处理交易值时就是如此。固定点
 
Irtron:
当然了!如果准确度是已知的,交易值就是如此。固定点。
我同意。
只需要向众多 "关于双打的比较 "专题的作者解释。
这就是为什么我提出了一个_普遍_(但远非最佳)的比较方法。
而且很有效。缓慢但可靠。而在所有的情况下。

而当 "关于优化双打的比较 "的话题出现时,我们就可以开发它了;)
[删除]  

哪里需要价格正常化吗?

文件中写到,贸易请求中的价格必须是正常化的。

'非正常化的历史和开仓' 分支中,它说了以下内容。

Renat 16.02.2007 10:01
我们特意在交易请求中加入了归一化价格,以避免无意中向服务器发送错误的价格。
 
我想感谢所有专家的见解!

Irtron, 我选择了你的变体,我非常喜欢它。我针对一般情况稍加修正,并进行了检查。

int ComparePrice(double a, double b, double digit)
{
a -= b。
b = 数字。
如果(a>b)
返回(1)。
如果(a < -b)
返回(-1)。
返回(0)。
}
谢谢。
 
有了digit=0,就会有问题。而且该函数比单次调用NormalizeDouble()的速度要慢。
 
Integer:
Digit=0会导致问题。

任何数字都会引起问题。我不明白什么是数字,修改的意义何在。

整数
而且该函数比单次调用NormalizeDouble()的速度要慢。
此外,它还会比MathAbs、2+3等慢。:)

比较不同功能的函数有什么话题? 一个是简化的(虽然不可行),现在是NormalizeDouble。
你想用这种公然的方式来证明什么,向谁证明?(自己插入词)?