Fehler, Irrtümer, Fragen - Seite 2823

 
Nikolai Semko:

beschloss ich, die Version der Geschwindigkeitsschwankungen zu überprüfen.
Und das Ergebnis war überraschend.
Der Vergleich selbst von vornormierten Double ist im Durchschnitt sogar langsamer, als wenn Double durch Epsilon oder durch Umwandlung in int verglichen wird.

Das Ergebnis:

Ich schließe nicht aus, dass vieles von der Neuartigkeit und der Architektur des Prozessors abhängt und dass manche Programmierer ein anderes Ergebnis erzielen können.

Überraschenderweise gibt die Funktion Rundung auf Ganzzahl eine reelle Zahl zurück, keine Ganzzahl, und Sie müssen den Typ ebenfalls auf eine Ganzzahl runden. Wo bleibt die Logik der Sprache?
 
Nikolai Semko:

Hängt die Leistung der Operation, die zwei Doppelwerte vergleicht, von den Werten der Variablen selbst ab? Das bezweifle ich.

Es scheint so zu sein. Es ist ziemlich seltsam.
Wenn Sie die Zeile im obigen Beispiel ersetzen

double test = 1.11;

zu

double test = NormalizeDouble(1.11,2);

der einfache Vergleich von zwei Doppelgängern funktioniert schneller als andere Optionen. Sie kann aber auch doppelt oder zweifach sein. Welchen Unterschied scheint es zu machen? Aber die resultierende Leistung ist doppelt so hoch. Es ist wie ein Wunder.

2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   простое сравнение предварительно нормализированых double 1 - 552 микросекунд, всего совпадений = 507
2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   простое сравнение предварительно нормализированых double 2 - 954 микросекунд, всего совпадений = 507
2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   сравнение double через эпсилон                             - 778 микросекунд, всего совпадений = 507
2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   сравнение double через преобразование в int                - 854 микросекунд, всего совпадений = 507
Dateien:
 
Alexey Navoykov:

Der Test ist falsch. Warum teilen Sie nur einmal am Ende durch 100000.0? Das sollte bei jeder Iteration durchgeführt und dann summiert werden. Das ist ein fairer Vergleich. Aber das ist überhaupt keine Normalisierung - Sie haben nur Ihren Testalgorithmus optimiert. Natürlich wird es schneller und genauer sein (da der kumulierte Fehler reduziert wird).

Ja, Sie haben Recht. Die Genauigkeit ist dieselbe wie bei NormalizeDouble, wenn Sie bei jeder Iteration teilen. Aber die Geschwindigkeit wird immer noch höher sein als bei NormalizeDouble.

2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4)   простая сумма                            - 1394 микросекунд, сумма = -3604329.1567609389312565
2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4)   сумма с NormalizeDouble                  - 5861 микросекунд, сумма = -3604329.1543100476264954
2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4)   сумма, нормализированная через int       - 2179 микросекунд, сумма = -3604329.1543100476264954

Ich danke Ihnen.

 

Im Allgemeinen ist es nicht gut, nach dem Runden auf eine ganze Zahl eine ungerundete Zahl zurückzugeben. Bisher habe ich in Druckereien fast ganze Zahlen mit Nullen hinter dem Komma und einer Eins am Ende oder mit Neunen hinter dem Komma gesehen. Ich dachte, es sei ein Fehler. Es stellt sich heraus, dass dies eine unklare Position der Entwickler ist. Nun, beim Runden auf eine ganze Zahl sollte man den Rest nach dem Dezimalpunkt in binärer Form entfernen, aber offenbar ist es schwierig/unmöglich, die Mantisse auf Null zu setzen. Die Normalisierung ist sogar noch komplizierter, selbst wenn wir ein Komma auf 5 Stellen und Integer im Binärformat verschieben, ergibt die umgekehrte Rundung auf Double einen Unterschied zum Integer-Typ.

Leider muss man sich auf scheinbar einfache Vergleichsoperationen stützen.

Nicht python.))))

 
Valeriy Yastremskiy:

Im Allgemeinen ist es nicht gut, nach dem Runden auf eine ganze Zahl eine ungerundete Zahl zurückzugeben. Bisher habe ich in Druckereien fast ganze Zahlen mit Nullen nach dem Komma und einer Eins am Ende oder mit Neunen nach dem Komma gesehen. Ich dachte, es sei ein Fehler. Es stellt sich heraus, dass dies eine unklare Position der Entwickler ist. Nun, beim Runden auf eine ganze Zahl sollte man den Rest nach dem Dezimalpunkt in binärer Form entfernen, aber offenbar ist es schwierig/unmöglich, die Mantisse auf Null zu setzen. Die Normalisierung ist sogar noch komplizierter, selbst wenn wir ein Komma auf 5 Stellen und Integer im Binärformat setzen, ergibt die umgekehrte Rundung auf Double einen Unterschied zum Integer-Typ.

Leider müssen wir uns mit scheinbar einfachen Vergleichsoperationen herumschlagen.

Ausdrücke nach der Rundung können einige andere Operationen an den resultierenden Daten enthalten, die nicht unbedingt ganzzahlig sind. Dann müssen wir sie von int wieder in double umwandeln, was an Ort und Stelle einen Mehraufwand bedeutet.

Niemand hindert Sie daran, Ihre eigenen Funktionen RoundInt oder RoundLong zu erstellen, die den gewünschten Typ zurückgeben.

 

Es gibt ein Problem mit dem Prüfgerät auf dem Markt.

Wenn ich einen EA mit mehreren Währungen teste, bleibt das Testprogramm hängen.

Der Grund: Bei der Analyse des Finanzinstruments stolpert der Expert Advisor über Instrumente ohne Historie oder das Instrument ist nicht richtig konzipiert.

Im Standard-Terminal bleibt er 29 Sekunden lang hängen, das ist sicher, und er wird überprüft.

Der Prüfer auf dem Markt berichtet, dass die Prüfung zu lange dauert.

Ich gehe davon aus, dass der Expert Advisor auf mehrere solcher defekten Finanzinstrumente trifft.

Über dieses Problem wurde bereits vor einem Jahr mehrfach geschrieben, aber es ist immer noch da....

 
Vladimir Pastushak:

Über dieses Problem wurde bereits vor einem Jahr mehrfach geschrieben, aber es ist immer noch da....

Bei mir funktioniert das nicht. Bitte fügen Sie Ihren Quellcode bei.

 

Können Sie erläutern, warum die Funktion nicht funktioniert? Es wird nicht auf 0 umgeschaltet.

ChartSetInteger(0,CHART_BRING_TO_TOP,0,true);

Die zweite und weitere Anwendung des Musters dupliziert die Fenster

ChartApplyTemplate(0,"Template.tpl");

Diese Funktionen haben vor der Aktualisierung funktioniert.

 
fxsaber:

Für mich ist das kein Spiel. Fügen Sie Ihren Quellcode bei.

Test auf Demo-Metakvotes-Servern

void OnStart()
  {
   int m_all_symbols = SymbolsTotal(false);
   string m_sym_name = "";
   for(int i = 0; i < m_all_symbols; i++)
     {
      // ======================================================================
      // === Получили имя символа
      if((m_sym_name = SymbolName(i, false)) != NULL)
        {
         // ======================================================================
         // === Если символ не выбран в окне маркет ватч
         if(!SymbolInfoInteger(m_sym_name, SYMBOL_SELECT))
            if(!SymbolSelect(m_sym_name, true))
               Print(" SymbolSelect " + m_sym_name);
         ulong get = GetMicrosecondCount();
         MqlRates rateM1[1440];
         if(CopyRates(m_sym_name, PERIOD_M1, 0, 1440, rateM1) > 0)
           {
            Print(m_sym_name, "  ", (GetMicrosecondCount() - get));
           }
         else
            Print("Error  ",m_sym_name, "  ", (GetMicrosecondCount() - get));
        }
     }
  }


2020.08.11 20:20:55.657 test (EURUSD,M15) MXNJPY 1998

2020.08.11 20:20:55.659 test (EURUSD,M15) NZDMXN 1979

2020.08.11 20:20:55.661 test (EURUSD,M15) USDCOP 1973

2020.08.11 20:20:55.663 test (EURUSD,M15) USDARS 2093

2020.08.11 20:20:55.665 test (EURUSD,M15) USDCLP 1929

2020.08.11 20:21:25.259 test (EURUSD,M15) Fehler AUS200 29593673

2020.08.11 20:21:54.837 test (EURUSD,M15) Fehler FCHI40 29578404

2020.08.11 20:22:24.336 test (EURUSD,M15) Fehler GDAXIm 29498485

2020.08.11 20:22:53.949 test (EURUSD,M15) Fehler HSI50 29612968

2020.08.11 20:23:23.458 test (EURUSD,M15) Fehler Jap225 29509059

2020.08.11 20:23:52.919 test (EURUSD,M15) Fehler ND100m 29461316

2020.08.11 20:24:22.425 test (EURUSD,M15) Fehler SP500m 29505571

2020.08.11 20:24:51.860 test (EURUSD,M15) Fehler SPN35 29435460

2020.08.11 20:25:21.273 test (EURUSD,M15) Fehler STOX50 29412578

2020.08.11 20:25:50.663 test (EURUSD,M15) Fehler UK100 29389644

2020.08.11 20:26:20.205 test (EURUSD,M15) Fehler Brent 29542597

2020.08.11 20:26:49.667 test (EURUSD,M15) Fehler Rohöl 29462066

2020.08.11 20:27:19.194 test (EURUSD,M15) Fehler NatGas 29526780




 
Vladimir Pastushak:

Testen auf Demo-Metacvots-Servern

Verzeihung, es wird gerade aufgelegt....

Dieses Skript führte auf meinem Rechner nicht zum Aufhängen des Terminals.