Diskussion über die MQL4-Dokumentation - Seite 17

 
Yurixx:

Rosh, wenn ich dein Schweigen richtig verstehe, gibt es keine klare Aussage, für welche Fälle und für welche Ausdrücke/Variablen eine Normalisierung erforderlich ist. Wenn dies der Fall ist, kann vielleicht eine einfachere Frage beantwortet werden: Ist die Normalisierung der berechneten Werte der Form

int StLs=25;
double prc = Ask + StLs*Point;

Oder soll ich das selbst herausfinden, in einem Experiment?

Ich dachte nicht, dass Sie auf meine Antwort auf die Frage warten würden. Meine Antwort lautet: Ich führe in solchen Fällen keine Normalisierung durch, und die Aufträge werden normal geöffnet. Aber als ich einmal einen manuell erstellten Verlauf lud und versuchte, einen Tester darauf laufen zu lassen, war ich doch überrascht. In fast allen Fällen sollte die Normalisierung nur für den Fall verwendet werden - ob es sich nun um selbst erstellte Indikatorwerte handelt, die in die OrderSend()-Preisparameter eingefügt werden [z.B. alle Arten von Pivots] oder um komplexe (und nicht komplexe) Berechnungen innerhalb des EAs - in allen Fällen kann man nichts mit Butter verderben.

Aber eigentlich kann ich keine klare Formulierung geben, wann es absolut unnötig ist, die Preisnormalisierung in OrderSend() anzuwenden. Im Prinzip bekommt ein Nachtmensch in einem halben Jahr ein Gespür dafür, aber es ist nicht nötig, ein Gespür dafür zu bekommen, sondern es einfach immer wieder zu normalisieren.
 
Außerdem habe ich heute bei der Überprüfung des Hilfsprogramms eine Gruppe von Funktionen unter Data Conversions:

gefunden, die die Konvertierung von Daten aus einem Format in Daten eines anderen Formats ermöglichen.

Besonders hervorzuheben ist die Funktion NormalizeDouble(), die die erforderliche Genauigkeit der Preisdarstellung sicherstellt. Sie können keine nicht normalisierten Preise in Handelsoperationen verwenden , deren Genauigkeit die vom Handelsserver geforderte Genauigkeit um mindestens eine Stelle überschreitet.
 
Auch NormalizeDouble

double NormalizeDouble( double value, int digits)
Rundung einer Fließkommazahl auf die angegebene Genauigkeit.
Die berechneten StopLoss- und TakeProfit-Werte sowie die Eröffnungskurse der Pending Orders müssen auf die Genauigkeit normalisiert werden, deren Wert in der vordefinierten Variable Digits gespeichert wird.
Parameter:
Wert - Wert mit Fließkomma.
Ziffern - Ein Präzisionsformat, die Anzahl der Stellen nach dem Dezimalpunkt (0-8).
Beispiel:
  double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// Ausgabe: 0.12346
 
"Beispiel:
  double var1=0,123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// Ausgabe: 0,12346".

Dies sind Beispiele, die ich gerne in der Dokumentation sehen würde. Alles ist einfach und verständlich. Sie fügen sie in einen Expert Advisor oder einen Indikator ein und sehen sofort das Ergebnis.
 
Sie meinen so?
 

Rosh, schauen Sie bitte auf Seite 16 desselben Forums nach, ich habe bereits über diese Funktion und Vorschläge zur Verbesserung der Hilfe dazu geschrieben.

 
Dies wurde vorerst behoben (wird in der neuen Version enthalten sein):

double NormalizeDouble( double value, int digits)
Rundung einer Fließkommazahl auf die angegebene Genauigkeit.
Die berechneten StopLoss- und TakeProfit-Werte sowie die offenen Preise der Pending Orders sollten auf die Genauigkeit normalisiert werden, deren Wert in der vordefinierten Variable Digits gespeichert wird.

Parameter:
Wert - Wert mit Fließkomma.
Ziffern - Ein Präzisionsformat, die Anzahl der Stellen nach dem Dezimalpunkt (0-8).
Beispiel:
 double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),8));
// Ausgabe: 0.12346000



In diesem Beispiel wird die Beschneidung mittels NormalizeDouble() auf 5 Ziffern demonstriert, während Print() sie einfach wiedergibt (entschuldigen Sie den nicht-russischen Stil).
 

Ja, das Beispiel wurde deutlich informativer, sobald die Anzahl der Zeichen unterschiedlich war.

 
bool SendFTP( string Dateiname, string ftp_path=NULL)
Sendet die Datei an die im Fenster Veröffentlichen angegebene E-Mail-Adresse. Gibt FALSE zurück, wenn die Suche nicht erfolgreich war.
Die Funktion funktioniert nicht im Testmodus. Diese Funktion kann auch nicht von den benutzerdefinierten Indikatoren aus aufgerufen werden.
Die zu sendende Datei muss sich im Ordner terminal_directory\experts\files oder seinen Unterordnern befinden.
Der Versand wird nicht durchgeführt, wenn in den Einstellungen keine FTP-Adresse und/oder kein Zugangspasswort angegeben ist.
[...]
void SendMail( string subject, string some_text)
Sendet eine E-Mail an die Adresse, die in den Einstellungen auf der Registerkarte Mail angegeben ist.
Der Versand kann in den Einstellungen verboten sein, auch die E-Mail-Adresse darf nicht angegeben werden. Die Funktion GetLastError() muss aufgerufen werden, um die Fehlerinformationen zu erhalten.
[...]

Beobachtungsaufgabe: Finde 2 Unterschiede.
 
Anscheinend muss man aufgeben, damit man die richtige Antwort hinter seinem Rücken wegwerfen kann? :)
Grund der Beschwerde: