- Merkmale der Sprache mql5, Feinheiten und Techniken
- Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes
- Anti-MQL5-Wünsche
Um einen Auftrag zu schließen, müssen Sie die Auftragsart und den entsprechenden Preis nicht definieren. Es ist ausreichend, OrderClosePrice() zu schreiben
void OnStart()
{
int i, total = OrdersTotal()-1;
for(i = total; i >= 0; i--)
{
if(OrderType() < OP_SELLSTOP)
{
if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100))
printf("***********");
}
}
}/********************************************************************/
Es gibt noch viele weitere Ungenauigkeiten in der Hilfe. Nehmen Sie zum BeispielSetIndexBuffer(). Was ist an der Hilfe falsch?
"Parameter
Index
[in] Nummer des Indikatorpuffers. Die Nummerierung beginnt mit 0. Die Anzahl muss kleiner sein als der in #property indicator_buffers angegebene Wert." (diese Aussage ist nicht wahr)
Die #Eigenschaft indicator_buffers gibt die Anzahl der anzuzeigenden Puffer an. Möglicherweise bedeutet die Hilfe, obwohl ich das nicht überprüft habe, dass den für die Berechnung verwendeten Puffern keine Nummer durch SetIndexBuffer() gegeben werden muss. Ich habe jedoch festgestellt, dass der Wert des für die Berechnung verwendeten Puffers über iCustom() abgerufen werden kann, wenn ihm mit SetIndexBuffer() eine Zahl zugewiesen wird.
Da die Entwickler den Thread besuchen - es gibt eine Frage über "Feinheiten und Tricks":
Beispiel für einen formatierten Ausdruck: PrintFormat("Bid=%.5f", Bid)
Frage: Gibt es eine Möglichkeit, anstelle einer festen Genauigkeit (hier5) eine Bedingung in der Formatbeschreibung anzugeben, so dass die Genauigkeit von _Digits abhängt? Ohne 'Vorverarbeitung' wie PrintFormat("Bid=%s", DoubleToString(Bid, _Digits))
In MQL4 kann derselbe Code je nach dem Zustand von #property strict unterschiedliche Ergebnisse liefern. Und das ist der Fall, wenn die Kompilierung in beiden Fällen erfolgreich ist. Wenn also die Ausführung "aus dem Ruder läuft", kann man lange Zeit an der falschen Stelle (streng) nach der Ursache suchen.
Frage: Ist es möglich, anstelle einer festen Genauigkeit (hier5) eine Bedingung in der Formatbeschreibung anzugeben, so dass die Genauigkeit von _Digits abhängt?

- www.mql5.com
Описание проблемы
Ich schreibe einen Indikator in MQL4. Ich bin auf eine undokumentierte Funktion des Stils DRAW_HISTOGRAM gestoßen.
Um die Werte im Diagramm anzuzeigen, benötige ich zwei Puffer: für den oberen Wert des Histogramms und für den unteren Wert. Bei der Zuordnung der Indikator-Array-Puffer, wenn die Puffer für den Stil die Werte 0 und 1, 2 und 3, 4 und 5 usw. haben, wird alles normal angezeigt. Wenn den Stilpuffern jedoch Werte zugewiesen werden, die mit OTHER beginnen, d. h. 1 und 2, 3 und 4, 5 und 6, werden die Histogrammlinien im Diagramm nicht korrekt angezeigt, obwohl die Werte im Datenfenster korrekt sind.
Bitte fügen Sie einen Hinweis auf diese Besonderheit in die Dokumentation ein oder korrigieren Sie sie, denn es ist nicht immer der Fall, dass die DRAW_HISTOGRAM-Stilbeschreibung mit einem geraden Puffer beginnt!
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
-Aleks-, 2017.02.07 18:21
Können Sie mir bitte sagen, ob in MT4 Expert Advisor, wenn ein benutzerdefinierter Indikator mit mehr als einem grafischen Puffer konsequent aufgerufen wird, dann geschieht Neuberechnung bei jedem Aufruf oder alle Puffer werden auf einmal berechnet und Sie können auf den Indikator im Code viele Male und nicht erwarten, Ressourcen zu verschwenden. Mich interessiert auch, was passiert, wenn der Code nicht abgeschlossen wird (länger als ein Tick läuft), aber der Indikatorwert sich ändert.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Slawa, 2017.02.08 08:20
Alle Puffer werden auf einmal berechnet. Ruhige Abfrage der Werte des Indikators - es findet keine Neuberechnung stattIn MT4 arbeitet der vom Expert Advisor aufgerufene Indikator im Fluss dieses EAs und auf einer Kopie seiner historischen Daten. Sie können den Expert Advisor in einer Schleife laufen lassen, aber gleichzeitig erhalten Sie die zum Zeitpunkt des OnTick-Aufrufs berechneten Indikatordaten. Bis Sie RefreshRates aufrufen. RefreshRates aktualisiert die historischen Daten des Expert Advisors, danach werden alle seine Daten beim ersten Aufruf des Indikators neu berechnet
Um einen Auftrag zu schließen, müssen Sie die Auftragsart und den Preis, die dieser Art entsprechen, nicht angeben. Es genügt, den Abschluss zum Preis OrderClosePrice() zu schreiben.
Sie können OrderClosePrice also erst NACH dem entsprechenden OrderSelect verwenden. Denn OrderSelect kopiert die Daten für Order(const)-Funktionen einmal, und der gleiche RefreshRates kann sie nicht aktualisieren.
Wenn also z. B. OrderClosePrice nicht geschlossen werden kann, müssen Sie OrderSelect vor dem nächsten Versuch erneut ausführen (RefreshRates ist nicht erforderlich).
ZS Dieses Thema ist von 2005! Hier sind detaillierte Argumente der Entwickler.
Es ist eine Schande...
---
Damit der Beitrag nicht nutzlos ist:
anstelle von StringGetCharacter("a", 0) kann man auch nur 'a' schreiben - wird oft benötigt, wenn man Strings mit StringSplit in Teile zerlegt

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.