Ein Unter-Workshop zum Ausfüllen der FAQ (häufig gestellte Fragen). Helfen wir den Kameraden! - Seite 5

 

Ich habe versprochen, mit dem einfachsten zu beginnen)

Frage: FührtMQL arithmetische Operationen falsch aus? Warum ergibt die Division einer Zahl durch eine andere den Wert 0?

Antwort:

Höchstwahrscheinlich haben Sie einen Ausdruck geschrieben wie

c = a/b;  // (1)

Deklaration der Variablen a und b als ganze Zahlen:

int a,b;

In diesem Fall interpretiert der MQL-Compiler das "Schrägstrich"-Zeichen als eine "Integer-Division"-Operation. Selbst wenn also, bevor (1) im Code auftaucht, a und b beliebige Werte zugewiesen werden, auch nicht-ganzzahlige, enthält die Variable c immer noch die Antwort " b passt so und so oft in die Zahl a ". Das bedeutet, dass, wenn vor der Berechnung von (1) a kleiner als b war, das Ergebnis Null sein wird, unabhängig vom Typ der Variablen c (in diesem Beispiel kann sie double sein).

Der beschriebene Fehler ist oft der Grund für ein "falsches" Programmverhalten im Client-Terminal - " Dividieren durch Null "-Meldung in den Logs der Expert Advisors, Nichtanzeige einer oder mehrerer Indikatorzeilen im Terminalfenster usw.

Die Lösung des Problems:

Korrigieren Sie den Datentyp in der Variablendeklaration auf denjenigen, der den zu verwendenden Operationen entspricht:

double a,b;
 
Frage: Warum ist 3 geteilt durch 2 gleich 1 und nicht 1,5?

Alert(3/2);

Antwort: Die Zahlen 3 und 2 in diesem Ausdruck sind ganze Zahlen. Eine ganze Zahl ist nicht teilbar, ohne dass ein Rest übrig bleibt. Um das Ergebnis 1,5 zu erhalten, müssen Sie angeben, dass der Divisor eine Fließkommazahl ist:

Alert(3.0/2);

* * *

Frage: Warum wird der Ausdruck nicht korrekt berechnet?

  double price=1.0; // Цена
  double point=0.0001; // Величина пункта
  double level=272.0; // Уровень в пунктах от цены
  double levelprice; // Значение цены уровня
   
  levelprice=price+point*level; // должно быть 1.0272
   
  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

A: Fließkommavariablen haben eine begrenzte Anzahl von Nachkommastellen. Aus diesem Grund können die Werte bei der Berechnung leicht verzerrt werden. Nach der Berechnung des Ausdrucks und vor dem Vergleich von Fließkommazahlen sollten diese auf den erforderlichen Genauigkeitsgrad normalisiert werden:

  levelprice=NormalizeDouble(levelprice,4);

  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

* * *

Frage: Wie kann ich den Wert eines benutzerdefinierten Indikators in meinem Expert Advisor ermitteln?

Antwort: Zu diesem Zweck gibt es die Funktion iCustom().

* * *

Frage: Wo kann ich mit dem Erlernen von MQL4 beginnen?

Antwort: In MetaEditor ist eine sehr ausführliche Hilfe integriert (MetaEditor öffnen - Hauptmenü - Ansicht - Navigator - Wörterbuch).
Das Terminal kommt mit zwei Expert Advisors - MACD Sample und Moving Average, Sie können mit der Analyse ihres Codes beginnen.
Außerdem gibt es auf mql4.com ein Tutorial, eine große Anzahl von Artikeln und jede Menge Code.
 
F: Warum ist der Wert 0, obwohl er definitiv nicht 0 ist?

  double point=0.00001; // Величина пункта
  Print(point);

A: Print() und Alert() geben nur vier Nachkommastellen aus. Wenn Sie mehr benötigen, sollten Sie die Zahl double mit DoubleToStr() in einen String umwandeln.
Print(DoubleToStr(point,5));
 

F: Der EA gibt mit Print() eine große Anzahl von Meldungen aus, aber mehr als die Hälfte der Meldungen fehlt irgendwo im Tester.

A: Wenn die Ausgabefrequenz während des Tests hoch ist, wird ein Teil der Meldungen nicht auf der Registerkarte "Protokoll" gedruckt, aber alle Meldungen sind nach dem Test in der Protokolldatei des Testers zu sehen. Die Datei befindet sich im Ordner tester/logs.

 
Danke an alle, schreibt wieder.
Ich werde erst am Abend, wenn ich dort bin, eine FAQ zusammenstellen.
 

Ein Vorschlag an die Moderatoren und diejenigen, die bereit sind, minimale Hilfe zu leisten.

Sie werden zustimmen, dass das Forum für eine strukturierte Darstellung der Informationen, Verarbeitung und Suche nicht ausreicht. Ich sehe den einzigen Ausweg darin, das vollständigste CHM-Handbuch zu erstellen , das dann für einen ganzen Abschnitt im Forum verwendet werden kann.

Für den Anfang habe ich eine Hilfsstruktur erstellt.
Sie ist in 3 große Abschnitte unterteilt.

1) WIE: Dieser Abschnitt beschreibt proaktive Antworten auf mögliche Fragen. Zum Beispiel, wie man Indikatordaten erhält, wie man alle Aufträge schließt usw. Außerdem enthält dieser Abschnitt eine große systematisierte Datenbank von Funktionen (Kims Funktionsanalogien). Und das Wichtigste: Beispiele für fertige primitive TOR mit einer ausführlichen Erläuterung des Codes und Kommentaren. Dies ist ein sehr komplexer Abschnitt, da er eine verstärkte Systematisierung von Wissen und Analysen erfordert. Wird an letzter Stelle eingetragen.

2) WARUM. Dieser Abschnitt beschreibt häufige Fragen von Neulingen (ihre Beispiele wurden von alsu und integer in diesem Thread sehr schön dargestellt)

3) WO: Dieser Abschnitt enthält hauptsächlich einen Link, wo man etwas suchen oder finden kann. Ich werde es nicht beschreiben, sehen Sie selbst.
Ich hänge das Archiv der fertigen chm-Struktur an (Download am Ende des Beitrags)


1. Manuelle Struktur


2. Demonstrationen - gehen Sie zu "Wo: Nützliche Links -> MQL4 Tutorial".

Dateien:
mql4_4.zip  53 kb
 


Das weitere Vorgehen sieht folgendermaßen aus:

1. Für die Ausfüllung der Unterabschnitte werdenfreiberufliche Mitarbeiter benötigt . Das heißt, sie brauchen im Wesentlichen durchdachte Fragen und ausführliche Antworten mit einer detaillierten Erklärung, einer Reihe von Querverweisen usw. (die Beitragsvorlage, die auf der ersten Seite des FAQ-Themas vorgeschlagen wird. (gemäß der auf der ersten Seite des FAQ-Themas angebotenen Beitragsvorlage).

2. Alle Fragen, die für einen Unterabschnitt erstellt werden, werden von dem Kurator für diesen Unterabschnitt (1-2 Personen)gesammelt. Sie behandeln sie, bringen sie in einen gemeinsamen Stil und bilden gegebenenfalls einen Querverweis Dies wird jeder Unterabschnitt des Eigentümers haben, und wird nicht durcheinander die Datenbank wird ein Stil und Antwortmuster sein.
Der Abschnitt Wo ist zum Beispiel in 4 Unterabschnitte unterteilt: Fragen zum Tester, zum Terminal, zum Forum und zu nützlichen Links . Für jeden Unterabschnitt würde 1 Person ausreichen. Sie sind voll und ganz damit beschäftigt, die von Freiberuflern eingehende Wissensdatenbank zu sortieren, die sie für notwendig erachten, sowie alle Vorschläge, die von anderen Mitgliedern benachbarter Abteilungen kommen können. Und natürlich sollten sie selbst aktiv daran mitwirken, die Basis zu füllen und Fragen zu stellen.

3. Als füllende Unterabschnitte - sie werden an den Sammler (wie mich) übertragen . Es ist notwendig, sie in einer Datei chm zu sammeln und sie alle in einem Stil zu halten. Erstellen Sie zusätzliche Querverweise, indexieren Sie, fügen Sie Schlüsselwörter für Suchanfragen hinzu.

Unterabschnitte können auf Vorschlag des Kurators und in Absprache mit dem Assembler neu sortiert oder erweitert werden.

Fazit:
Teilnehmer: Willkommen in unserer Hütte. :) Wenn ihr gerne ein Unterbereichskurator sein möchtet und diejenigen, die bereits etwas beizutragen haben, können ihre Antworten hier posten.
Moderatoren: Es wird eine Menge Material geben. Bitte lassen Sie in diesem Thema keine Diskussionen und ablenkende, leere Beiträge zu. Um die Arbeit der Fachgruppe zu erleichtern, wird es auch notwendig sein, die Beiträge der Teilnehmer zu löschen, nachdem sie in die gemeinsame Datenbank aufgenommen wurden.
Kuratoren: Die Hilfedatei wurde in WinCHM 4.17 erstellt (wer sie braucht, kann mich kontaktieren). Anforderungen an Dateinamen und Speicherort:
- Ordnerstruktur muss exakt die Struktur der Hilfe wiederholen
- alle Namen von Dateien/Ordnern müssen nur in Englisch in sinnvollen Sätzen angegeben werden
- Beispiel der aktuellen Basis, die WinCHM im Archiv "kompiliert"

Dateien:
chm4_2.zip  19 kb
 

sergeev:

...


1) WIE: Dieser Abschnitt beschreibt vorausschauende Antworten auf mögliche Fragen. Zum Beispiel, wie man Indikatordaten erhält, wie man alle Aufträge abschließt, usw. Dieser Bereich enthält auch eine große systematisierte Datenbank mit Funktionen (Kima, usw.). Und am wichtigsten - Beispiele für fertige primitive TOR mit einer ausführlichen Erklärung des Codes und Kommentaren. Dies ist ein sehr komplexer Abschnitt, da er eine verstärkte Systematisierung von Wissen und Analysen erfordert. Wird in der letzten ausgefüllt werden.

...

Alexey, alle Bestellfunktionen von Kim sind in Bezug auf Zuverlässigkeit und Genauigkeit sehr fragwürdig. Nieten Sie auch EAs auf sie?

 
Integer:

Alexey, alle Bestellfunktionen von Kim sind sehr fragwürdig, was ihre Zuverlässigkeit und Genauigkeit angeht. Werden sie auch mit EAs vernietet?

Nein. Ich werde meine eigene, realistisch getestete Methode verwenden. :)

Um ehrlich zu sein, habe ich die Kim's praktisch nirgendwo gesehen, außer in den Empfehlungen in diesem Forum. Ich habe sie in der Beschreibung des Abschnitts nur als Beispiel genannt, damit Sie wissen, wovon wir sprechen. Und ich bin mir nicht sicher, ob Kim es in seinem Code in das Handbuch schaffen wird. Es wird lediglich eine Idee aufgegriffen und im allgemeinen Stil ausgearbeitet.

Der Abschnitt " WIE" ist der wichtigste. Er sollte von maximal 2-3 Personen bearbeitet werden, da alle WIE-Abschnitte eine Hinführung zum letzten Abschnitt - "Beispiele für TOR und ihre Umsetzung" - darstellen, der alle möglichen Optionen und Nutzungskombinationen aller Funktionen der vorherigen Abschnitte zeigt.

 

Frage: Wie kann ich zwei reelle Zahlen vom Typ "double" vergleichen?


Antwort:

double A;
double B;

if(NormalizeDouble(MathAbs(A-B),Digits)<0.1*Point)return(true);
else return(false);