Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ja.
Dankeschön
Warum funktioniert es dann ohne Normalisierung und MathFloor?
Wenn die Eingabe 0,95?
{
double ask2 = 1.55557, ask3 = 1.55558, bid = 1.55555;
Print("(ask2 + bid)/2 = ", (ask2 + bid)/2);
Print("(ask3 + bid)/2 = ", (ask3 + bid)/2);
int avPrice_2 = (int)NormalizeDouble((ask2/_Point + bid/_Point)/2, 0);
int avPrice_3 = (int)NormalizeDouble((ask3/_Point + bid/_Point)/2, 0);
Print("avPrice_2 = ", avPrice_2);
Print("avPrice_3 = ", avPrice_3);
}/*******************************************************************/
2017.02.27 00:03:54.456 00 (EURUSD.m,H1) (ask3 + bid)/2 = 1.555565
2017.02.27 00:03:54.456 00 (EURUSD.m,H1) avPrice_2 = 155556
2017.02.27 00:03:54.456 00 (EURUSD.m,H1) avPrice_3 = 155557
"Nehmen Sie Ask und Bid und berechnen Sie den Durchschnittspreis. Wenn die Spanne ungerade ist (3,5,7,9, usw.), dann wird der Durchschnittspreis näher am Geldkurs angesetzt."
Die Aufgabe ist nicht gestellt:
- Was bedeutet eine ungerade Streuung? 1,3,...,9 mal Punkt oder 1,3,...,17,57 mal Punkt? Rundungen funktionieren auch innerhalb von Einheitssegmenten...
- Was bedeutet "näher am Gebot"? Vor allem, wenn die Spanne zum Beispiel 43 mal Punkt beträgt. Womit soll das Gebot gleichgesetzt werden?
Sie brauchen zunächst Klarheit über das Problem, erst dann kann eine eindeutige Entscheidung getroffen werden.
Da es sich aber um gerade/ungerade Zahlen handelt, wäre es logisch, zu den ganzen Zahlen überzugehen, wo dieses Konzept Sinn macht.
double Ask,Bid,Middle; // Уже известные курсы Ask и Bid, вычисляемый средний курс
int Mash,Spr; // Множитель перехода к целым числам. Для 4-разрядного EURUSD 10000. И целочисленный спред
Mash=MathRound(1.0/_Point);
Spr=MathRound((Ask-Bid)*Mash); // Целочисленный спред
// Придаем конкретность среднему курсу. Предполагаем, что "ближе к Бид" значит "ближайший меньший среднего арифметического Ask и Bid, кратный Point"
Spr=Spr >> 1; // Целочисленный спред, деленный на 2 с отбрасыванием остатка
Middle=Bid+Spr*_Point;
// Если предположение неверно, канва последующих разборов такая
if ((Spr & 1) != 0)) { // Спред нечетный
}
else { // Спред четный
}
"Nehmen Sie Ask und Bid und berechnen Sie den Durchschnittspreis. Wenn die Spanne ungerade ist (3,5,7,9, usw.), dann wird der Durchschnittspreis näher am Geldkurs angesetzt."
Die Aufgabe ist nicht gestellt:
In der Tat scheint die Aufgabe einfach zu sein? und sie kann von einem Schuljungen erledigt werden? :-) Das dachte ich auch.
Aber bei der Preisgestaltung auf dem Server, der Datennormalisierung und dem Rest gibt es dunkle Ecken, die man gar nicht meint.
Ich programmiere seit 9 Jahren in mql - und ich hatte noch nie ein Problem mit der Normalisierung, weil ich es richtig gemacht habe. und die Genauigkeit auf 1 Millipunkt hat immer richtig funktioniert.
Aber es gibt Aufgaben, die eine hohe Genauigkeit erfordern.
Und es gibt Bedingungen.
Nämlich:
Wir müssen also den Preis so normalisieren, dass wir, wenn es einen Rückstand gibt (und den wird es auch bei einer gleichmäßigen Spanne geben! :-)), den Durchschnittspreis näher am Tiefpunkt, d. h. am Geldkurs, ansetzen.
Zum Beispiel:
Und alles scheint so einfach zu sein? Alles sollte funktionieren und ich bin selbst ein Narr? und ich saß 2 Tage lang in der Hoffnung, dass ich kein Narr bin. Verstehen über Schwänze und Dabbles und Tribbles und Bibbles..................
Aber! mit der gleichen Formel, mit geraden und ungeraden Streuungen - in einigen Situationen - hat die Formel nicht funktioniert . (siehe oben) .
Außerdem kann es bei Währungen funktionieren und bei Öl nicht.
Es kann sein, dass es bei JPY funktioniert und bei USD irgendwann nicht mehr.
Vielleicht ist es der Einfluss des Mondes? Das Wetter in Afrika .................
Aber wenn man sich sicher ist, dass die Formel funktioniert, merkt man nicht, dass 1 Millipunkt. und Sie arbeiten auf..... und dann "Bang, bang, bang, bang" und dieser Millipunkt, beschließt, wegzulaufen, oder rufen Sie den zweiten Millipunkt, der in den Weg kommt.
IMHO.
Sie können mich für einen Dummkopf halten, einen Unterprogrammierer, einen Schuljungen.... und so weiter.
Aber es bleibt eine Tatsache.
Bei verschiedenen Kombinationen von Doppelwerten tritt ein Fehler auf. Gleichzeitig ist alles klar mit Float.
Ich habe es noch nicht herausgefunden. Hilfe ist sehr gut, und ich bitte immer um Hilfe, das ist normal. Und ich werde vielleicht in 10 Jahren die Gemeinschaft um Hilfe bitten. Das ist normal. Und ich reagiere auf einen Hilferuf, wenn ich die Fallstricke kenne - das ist normal.
Natürlich werde ich nach solchen Tests "zusätzliche Untersuchungen" durchführen, um selbst zu verstehen, warum dies der Fall ist.
Ich danke Ihnen allen für Ihr Entgegenkommen und Ihre Hilfe.
In der Tat scheint die Aufgabe einfach zu sein? und sie kann von einem Schuljungen erledigt werden? :-) Das dachte ich auch.
Aber es gibt solche dunklen Ecken in den vom Server erhaltenen Preisen, in der Datennormalisierung und dem Rest - die Sie nicht einmal meinen.
Ich programmiere seit 9 Jahren in mql - und ich hatte noch nie ein Problem mit der Normalisierung, weil ich es richtig gemacht habe. und die Genauigkeit auf 1 Millipunkt hat immer richtig funktioniert.
Aber! mit der gleichen Formel, mit geraden und ungeraden Streuungen - in einigen Situationen - hat die Formel nicht funktioniert . (siehe oben) .
Bei anderen Kombinationen - mit doppelten Werten - tritt ein Fehler auf. Gleichzeitig ist mit Float alles klar.
Was hat die Normalisierung der Daten nach Metacvotes überhaupt damit zu tun? Dieser Begriff bedeutet für Programmierer unterschiedliche Dinge und keineswegs Rundung. Lesen Sie den IEEE-Standard 754 zum Beispiel hier:http://www.softelectro.ru/ieee754.html. Unnormierte reelle Zahlen reichen bis zu 1,17549421*10^(-38) im Falle einer 4-Byte-Länge und bis zu 4....*10^(-324) im Falle einer 8-Byte-Länge, wir begegnen ihnen sehr selten und schon gar nicht in Kursrechnungen. Wenn Sie OrderSend aufrufen müssen, dann runden Sie es entsprechend den Anforderungen dieser Funktion. Die Rundung ist erst dann erforderlich, wenn die Aufgabe es erfordert.
Die Fehler liegen nicht im Double- oder Float-Format, sondern in den verwendeten Operationen. Die Tatsache, dass die Formel die Aufgabe nicht gelöst hat, zeigt Ihnen, dass sie für die Aufgabe nicht geeignet ist. Nicht mehr als das. Sagen Sie mir, welche Fehler bei einer normalen Berechnung ohne Normalisierung auftreten (das ist der Teil aus meinem Beitrag oben):
Spr=MathRound((Ask-Bid)/_Point); Spr=Spr >> 1; Middle=Bid+Spr*_Point;
Die Aufgabe scheint einfach zu sein und kann von einem Schuljungen erledigt werden? :-) Das dachte ich auch.
Aber es gibt solche dunklen Ecken in den vom Server erhaltenen Preisen, in der Datennormalisierung und dem Rest - die Sie nicht einmal meinen.
Ich programmiere seit 9 Jahren in mql - und ich hatte noch nie ein Problem mit der Normalisierung, weil ich es richtig gemacht habe. und die Genauigkeit auf 1 Millipunkt hat immer richtig funktioniert.
Aber es gibt Aufgaben, die eine hohe Genauigkeit erfordern.
Und es gibt Bedingungen.
Nämlich:
Wir müssen also den Preis so normalisieren, dass wir, wenn es einen Rückstand gibt (und den wird es auch bei einer gleichmäßigen Spanne geben! :-)), den Durchschnittspreis näher am Tiefpunkt, d. h. am Geldkurs, ansetzen.
Zum Beispiel:
Und alles scheint so einfach zu sein? Alles sollte funktionieren und ich bin selbst ein Narr? und ich saß 2 Tage lang in der Hoffnung, dass ich kein Narr bin. Verstehen über Schwänze und Dabbles und Tribbles und Bibbles..................
Aber! mit der gleichen Formel, mit geraden und ungeraden Streuungen - in einigen Situationen - hat die Formel nicht funktioniert . (siehe oben) .
Außerdem kann es bei Währungen funktionieren und bei Öl nicht.
Es kann sein, dass es bei JPY funktioniert und bei USD irgendwann nicht mehr.
Vielleicht ist es der Einfluss des Mondes? Das Wetter in Afrika .................
Aber wenn man sich sicher ist, dass die Formel funktioniert, merkt man nicht, dass 1 Millipunkt. und Sie arbeiten auf..... und dann "Bang, bang, bang, bang" und dieser Millipunkt, beschließt, wegzulaufen, oder rufen Sie den zweiten Millipunkt, der in den Weg kommt.
IMHO.
Sie können mich für einen Dummkopf halten, einen Unterprogrammierer, einen Schuljungen.... und so weiter.
Aber es bleibt eine Tatsache.
Bei verschiedenen Kombinationen von Doppelwerten tritt ein Fehler auf. Gleichzeitig ist alles klar mit Float.
Ich habe es noch nicht herausgefunden. Hilfe ist sehr gut, und ich bitte immer darum, das ist normal. Und ich werde vielleicht in 10 Jahren um Hilfe von der Gemeinschaft bitten. Das ist normal. Und ich reagiere auf einen Hilferuf, wenn ich die Fallstricke kenne - das ist normal.
Natürlich werde ich nach solchen Tests "zusätzliche Untersuchungen" durchführen, um selbst zu verstehen, warum dies der Fall ist.
Ich danke Ihnen allen für Ihr Entgegenkommen und Ihre Hilfe.