Bug in NormalizeDouble

Einloggen oder registrieren, um einen Kommentar zu schreiben
lindomatic
59
lindomatic  

Hallo Moderation,

wo soll man Bugs melden, hier?
NormalizeDouble funktioniert nicht stabil -> siehe Screenshot; das kommt häufiger vor, dass ein paar mehr Nachkommastellen ausgegeben werden.

Hier der Code, ist noch was mehr drin von einem Chris70-Test, aber spielt zum Nachspielen keine Rolle:

// +------------------------------------------------------------------+
// |                          CopyTicks test                          |
// |                                    Metatrader username "Chris70" |
// |                                             https://www.mql5.com |
// +------------------------------------------------------------------+

#property   copyright     "metatrader username Chris70"
#property   version       "1.0"

//+------------------------------------------------------------------+
//| global scope                                                     |
//+------------------------------------------------------------------+
bool initialized=false;
int elements=10;
ulong count0,count1;
ulong duration_a=0;
ulong duration_b=0;
MqlTick tick_arr_a[];
MqlTick tick_arr_b[];
MqlTick new_tick[1];
int iterations=0;
double diff;

int OnInit() 
  {
   ArraySetAsSeries(tick_arr_a,false);
   ArraySetAsSeries(tick_arr_b,false);
   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
//+------------------------------------------------------------------+
//| method A                                                         |
//+------------------------------------------------------------------+
   count0=GetMicrosecondCount();
   CopyTicks(_Symbol,tick_arr_a,COPY_TICKS_ALL,0,elements);
   count1=GetMicrosecondCount();
   duration_a+=count1-count0;
   
//+------------------------------------------------------------------+
//| method B                                                         |
//+------------------------------------------------------------------+
   count0=GetMicrosecondCount();
   if (!initialized)
     {
      CopyTicks(_Symbol,tick_arr_b,COPY_TICKS_ALL,0,elements);
      Print("copied ticks aus !initialized: ");
      ArrayPrint(tick_arr_b);
      count1=GetMicrosecondCount();
      initialized=true;
     }
   else
     {
      ArrayRemove(tick_arr_b,0,1);
      SymbolInfoTick(_Symbol,new_tick[0]);
      ArrayResize(tick_arr_b,elements);
      ArrayCopy(tick_arr_b,new_tick,elements-1);
      count1=GetMicrosecondCount();
      Print("10t-letzter Tick.bid: ", tick_arr_b[elements-10].bid);
      Print("____letzter Tick.bid: ", tick_arr_b[elements-1].bid);
      diff = tick_arr_b[elements-1].bid-tick_arr_b[elements-10].bid;
      Print("______Diff 10 - last: ", NormalizeDouble(diff,2)); 
      if (diff>0.03)
        {
        Print("Diff ist > 0.03");
        }
   
     }
   duration_b+=count1-count0;
     
   iterations++;
   Comment("\naverage duration method A (msc): ",double(duration_a)/iterations,
           "\naverage duration method B (msc): ",double(duration_b)/iterations);
  }

 

VG

Christian
2850
Christian  
lindomatic:

Hallo Moderation,

wo soll man Bugs melden, hier?
NormalizeDouble funktioniert nicht stabil -> siehe Screenshot; das kommt häufiger vor, dass ein paar mehr Nachkommastellen ausgegeben werden.

Hier der Code, ist noch was mehr drin von einem Chris70-Test, aber spielt zum Nachspielen keine Rolle:

 

VG

Das ist kein Bug .

Und dieses Thema kommt immer wieder mal hoch.

Schau mal hier -> https://www.google.com/search?client=firefox-b-d&q=mql5+normalizedouble

Gruß

lindomatic
59
lindomatic  
Christian:

Das ist kein Bug .

Und dieses Thema kommt immer wieder mal hoch.

Schau mal hier -> https://www.google.com/search?client=firefox-b-d&q=mql5+normalizedouble

Gruß

Ok, dann leben wir damit =)

VG

Otto Pauser
1853
Otto Pauser  
lindomatic:

Ok, dann leben wir damit =)

VG

NormalizeDouble funktioniert schon richtig. Für den Computer muss die Zahl passen.

Willst du eine double irgendwo zum ansehen ausgeben (zB in Comment()) verwende DoubleToString(). Dann passt es auch für's Auge ;)

lindomatic
59
lindomatic  
Otto Pauser:

NormalizeDouble funktioniert schon richtig. Für den Computer muss die Zahl passen.

Willst du eine double irgendwo zum ansehen ausgeben (zB in Comment()) verwende DoubleToString(). Dann passt es auch für's Auge ;)

*top* =)

Einloggen oder registrieren, um einen Kommentar zu schreiben