Frage an die MQL4-Meister. Nochmals zu Double Compare. - Seite 4

 
Integer:
VBAG schauen Sie sich dieses Skript an
Und Sie arbeiten auch nachts, danke für die Unterstützung, jetzt muss ich das alles erst einmal verdauen.
 
Integer:

Preis = 1,1111

ma = 1,11110001

Bei einer Normalisierung auf 8 Stellen ist der ma>Preis korrekt. Eine Normalisierung auf weniger Stellen führt zu gleich - falsch. So wird die höchste Genauigkeit erreicht.

Das ist ein Scherz, oder? :)
Im Allgemeinen ist es auch richtig, den Preis nicht zu normalisieren. Warum sollte man eine maximale Genauigkeit anstreben, wenn sie bereits vorhanden und bekanntermaßen größer ist als das, was man erreichen kann?

Die Normalisierung auf 9 Ziffern funktioniert nicht. Der Eindruck ist, dass der Preis eine Art von 9 Ziffern ist und der Indikator hat 8 oder umgekehrt (ich erinnere mich nicht), kurz gesagt, es ist durch das Geheimnis des Unbekannten bedeckt.


Ja, höchstwahrscheinlich ist es in NormalizeDouble selbst zählt nur bis zu 8 Ziffern. Ich sage Ihnen, es ist eine lächerliche Funktion, egal wie man es dreht und wendet.
 
komposter:

Und in vereinfachter Form funktioniert es genauso schnell wie ComparePrice:
2007.09.10 03:19:24 CheckCompareDoubleSpeed GBPUSD,Daily: Vergleichskurs: 20922, gleich: 20453
Und in seiner ursprünglichen Form ist es nur ein Lied :)
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, gleich: 178704
Eh, aber komposter hat ein besseres Auto!
 
Irtron:
Und in seiner ursprünglichen Form ist es nur ein Lied :)
Nun ja, für Vielseitigkeit muss man zahlen.
Oder ist ComparePrice auch geeignet, um beliebige Zahlen mit beliebiger Genauigkeit zu vergleichen?
 
komposter:

Oder ist ComparePrice auch geeignet, um beliebige Zahlen mit beliebiger Genauigkeit zu vergleichen?
Natürlich tut sie das! Wenn die Genauigkeit bekannt ist, was bei der Arbeit mit Handelswerten der Fall ist. Fixpunkt.
 
Irtron:
Ja, natürlich! Wenn die Genauigkeit bekannt ist, was bei Handelswerten der Fall ist. Fixpunkt.
Ich stimme zu.
Es ist nur notwendig, es zahlreichen Autoren von Themen "über den Vergleich von Doppelgängern" zu erklären.
Aus diesem Grund habe ich eine _universelle_ (aber bei weitem nicht optimale) Art des Vergleichs vorgeschlagen.
Und es funktioniert. Langsam, aber zuverlässig. Und zwar in allen Fällen.

Und wenn ein Thema "Über die Optimierung des Doppelvergleichs" erscheint, werden wir es entwickeln können ;)
 

Ist eine Preisnormalisierung irgendwo notwendig?

In der Dokumentation steht, dass die Preise in Handelsanfragen normalisiert werden müssen.

Im Zweig "Unnormalisierte Historie und Eröffnungspositionen" steht Folgendes:

Renat 16.02.2007 10:01
Wir haben absichtlich den normalisierten Preis zu den Handelsanfragen hinzugefügt, um zu vermeiden, dass versehentlich falsche Preise an den Server gesendet werden.
 
Ich möchte mich bei allen Profis für ihre Einsichten bedanken!

Irtron, ich habe mich für deine Variante entschieden, sie hat mir sehr gut gefallen. Ich habe sie für allgemeine Fälle ein wenig korrigiert und überprüft:

int ComparePrice(double a, double b, double digit)
{
a -= b;
b = Ziffer;
wenn (a > b)
zurück (1);
wenn (a < -b)
zurück (-1);
zurück (0);
}
Danke.
 
Mit digit=0 wird es Probleme geben. Außerdem ist die Funktion langsamer als ein einzelner Aufruf von NormalizeDouble()
 
Integer:
Ziffer=0 wird Probleme verursachen.

Jede Ziffer wird Probleme verursachen. Ich verstehe nicht, was eine Ziffer ist und was der Sinn einer Änderung ist.

Ganzzahlig:
Außerdem ist die Funktion langsamer als ein einzelner Aufruf vonNormalizeDouble().
Außerdem wird es langsamer sein als MathAbs, 2+3 usw. :)

Was hat es mit dem Vergleich von Funktionen mit unterschiedlicher Funktionalität auf sich? Eine vereinfachte (allerdings nicht praktikabel), jetzt ist es NormalizeDouble.
Was und wem wollen Sie mit einer so eklatanten... (Wort selbst einfügen)?