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

 
komposter:

而在简化的形式下,它的工作速度和ComparePrice一样快:
但没有那么准确 :)
如果数值相差一个点,就会有一半的时间给出错误的结果。

简化模式与此又有什么关系呢?简化形式的ComparePrice可以和非简化形式的平等一样慢。
 
Irtron:
整数

首先,在自己的订单上写几个专家顾问,感受一下客户的风暴,突然止损错了1个点......然后向他们解释NormalizeDouble()函数的荒谬性,我想知道它对你来说会有什么效果=)

让我告诉你一个秘密。
我已经写了许多定制的专家顾问,比开始需要的要多。 我从来没有感觉到购买它们的冲动,因为我从来没有给过任何理由这样做。在我的程序中,止损被保证在(而不是 "出现")它应该在的位置。相应地,我不需要向客户解释任何东西,特别是关于一些非常具体的功能。在我看来,编写EA的全部意义在于为客户摆脱这种问题和解释。

而在没有NormalizeDouble()函数的情况下,如何可靠地找到它应该在的位置?那么在不使用NormalizeDouble()的情况下,如何将自己从解释中解放出来?
 
Irtron:
VBAG
而事实证明,即使是从你的订单中从服务器中提取的价格也仍然需要规范化!!。
这是不可能的。MT的内脏几乎已经超出了正常水平。
过去和现在都有很多关于专家顾问在无法理解的历史数据上测试时无法理解的表现的讨论。
确切地说,有一个不正确的故事,我记得。但对测试人员来说,缺乏正常化才是关键。不管怎么样。
还有,在没有normalise的情况下,与0等进行比较时,如何处理指标配音的问题。非常有趣。
 
VBAG:
还有,在没有normalise的情况下,与0等进行比较时,你如何处理指标配音的问题。非常有趣。
你不会相信的 :)
    double cci;
    
    cci = iCCI(NULL, 0, 14, PRICE_CLOSE, 1);
    
    if (cci > 0.)
        Print("Above");
    else if (cci < 0.)
        Print("Below");
    else
        Print("Bingo!");
 
Irtron:
VBAG
还有,在没有normalise的情况下,与0等进行比较时,你如何处理指标配音的问题。非常有趣。
你不会相信的 :)
    double cci;
    
    cci = iCCI(NULL, 0, 14, PRICE_CLOSE, 1);
    
    if (cci > 0.)
        Print("Above");
    else if (cci < 0.)
        Print("Below");
    else
        Print("Bingo!");
是的,嗯...- 这是可以理解的。我理解你的做法,即在每个特定的情况下,都要寻求最简单的解决方案。


 
VBAG看一下这个脚本
int start()
  {
//----
string str;
bool ok1,ok2;
   for(int i=0;i<10;i++){
      double NotNormPrice_1=StrToDouble("1.1111"+i);
         for(int j=0;j<10;j++){
            double NotNormPrice_2=StrToDouble("1.1111"+j);
               if(NormalizeDouble(NotNormPrice_1,4)==NormalizeDouble(NotNormPrice_2,4)){
                  str="Metod 1: "+DoubleToStr(NotNormPrice_1,5)+" = "+DoubleToStr(NotNormPrice_2,5)+" ";
                  ok1=true;
               }                 
               else{
                  str="Metod 1: "+DoubleToStr(NotNormPrice_1,5)+" != "+DoubleToStr(NotNormPrice_2,5)+" ";
                  ok1=false;
               }
               if(NormalizeDouble(NotNormPrice_1-NotNormPrice_2,4)==0.0){
                  str=str+"Metod 2: "+DoubleToStr(NotNormPrice_1,5)+" = "+DoubleToStr(NotNormPrice_2,5);
                  ok2=true;
               }         
               else{
                  str=str+"Metod 2: "+DoubleToStr(NotNormPrice_1,5)+" != "+DoubleToStr(NotNormPrice_2,5);                
                  ok2=false;
               }
            if(ok1!=ok2)Print(str);
         }
   }
//----
   return(0);
  }

以及他的工作成果

09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11111 != 1.11115 Metod 2: 1.11111 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11111 != 1.11116 Metod 2: 1.11111 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11115 Metod 2: 1.11112 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11116 Metod 2: 1.11112 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11117 Metod 2: 1.11112 = 1.11117
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11115 Metod 2: 1.11113 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11116 Metod 2: 1.11113 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11117 Metod 2: 1.11113 = 1.11117
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11115 Metod 2: 1.11114 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11116 Metod 2: 1.11114 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11117 Metod 2: 1.11114 = 1.11117
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11118 Metod 2: 1.11114 = 1.11118
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11119 Metod 2: 1.11114 = 1.11119
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11111 Metod 2: 1.11115 = 1.11111
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11112 Metod 2: 1.11115 = 1.11112
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 !=1.11113 Metod 2: 1.11115 = 1.11113
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11114 Metod 2: 1.11115 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 !=1.11111 Metod 2: 1.11116 = 1.11111
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11112 Metod 2: 1.11116 = 1.11112
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 !=1.11113 Metod 2: 1.11116 = 1.11113
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11114 Metod 2: 1.11116 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 !=1.11112 Metod 2: 1.11117 = 1.11112
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 !=1.11113 Metod 2: 1.11117 = 1.11113
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 !=1.11114 Metod 2: 1.11117 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11118 != 1.11114 Metod 2: 1.11118 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11119 != 1.11114 Metod 2: 1.11119 = 1.11114

自己决定你喜欢哪种算术。

当确定指标线(例如MA)与价格(Price_Now>MA_Now和Previous_Price<=Previous_MA的类型)的交叉点时,你必须总是归一到8位数。

 
Integer:

必须归一化为8位数。


不,为什么下降到8?:)还有一个7,9,或6。有些人选择了4个。
真的,为什么是8?标准是什么?
 
VBAG:
我理解你在每种情况下寻找最简单的解决方案的做法。

纠正。遗憾的是,这并不总是最简单的方法。
 
Irtron:
整数

必须归一化为8位数。


不,为什么要到8个?:)还有一个7,9,或6。有些人选择了4个。
真的,为什么是8?标准是什么?

假设

价格=1.1111

ma = 1.11110001

如果你规范化为8位数,那么ma>price是正确的。归一化为较低的数字将使它们相等--不正确。 这样就能达到最大的准确性。

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

 
Irtron:

    double cci;
    
    cci = iCCI(NULL, 0, 14, PRICE_CLOSE, 1);
    
    if (cci > 0.)
        Print("Above");
    else if (cci < 0.)
        Print("Below");
    else
        Print("Bingo!");

该方法通过。到目前为止,没有人注意到由此产生的误差率)。