Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1144
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
Ich verstehe das, aber mql5 ist leider schwer zu verstehen. Ich stimme fxsaber zu, ich denke, es ist einfacher, 4 zu verwenden und für die Optimierung und andere Dinge sollten wir 5 verwenden. Generell würde ich gerne wissen, ob es jemanden gibt, der mql5 ohne OOP-Praxis gemeistert hat? Natürlich ist die Zeit nach C++ 4 nicht relevant, auch wenn ich vielleicht falsch liege.
Die beiden Sprachen sind absolut identisch. Weder mehr noch weniger. Und OOP (von dem alle eingeschüchtert sind) ist in beiden genau dasselbe. Sie wussten es nicht? Haben Sie im Internet Horrorgeschichten gelesen und auf YouTube Blogger beobachtet, die "gut, weise und ewig säen"? Die klugerweise Unsinn reden und die Leute absichtlich von MQL5 abschrecken.
Ich muss Sie leider enttäuschen - beide Sprachen sind genau gleich. Sowohl in Bezug auf die Verständlichkeit als auch auf die Funktionen und das Vorhandensein von OOP.
Aber MQL5 hat mehr Möglichkeiten.
Ich habe den Spanier zu Ihnen geschickt, um ihn zu erschrecken. Machen Sie ihm ein Zeichen - ich habe keine Zeit. Es ist auf Englisch. Ich erkläre es Ihnen, wenn es etwas gibt. Aber... du wirst es herausfinden.
Ich erinnere mich nicht mehr an die Antwort von Artem und werde auch nicht danach suchen. Alle Codes in seinen Artikeln sind entweder mehrterminal oder zwei Versionen, für mql5 und mql4. Ich habe diese Versionen auf mql4 überprüft und alles funktioniert einwandfrei.
Ja, diese Artikel sind schwer zu verstehen, aber es lohnt sich, wenn man nicht älter ist als ich. Und ich bin für einen Programmierer obszön alt.
Die andere Variante ist einfacher, aber auch viel langsamer. Schreiben Sie das Auftragsticket in ein Array, und wählen Sie anhand dieses Arrays den Auftrag aus und überprüfen Sie den Zeitpunkt des Auftragsabschlusses. Ist der Wert größer als Null, bedeutet dies, dass der Auftrag abgeschlossen ist. Wenn der Kommentar eines geschlossenen Auftrags die Buchstaben "sl" enthält, bedeutet dies, dass der Auftrag mit einem Stop geschlossen wurde. Wenn der Auftrag abgeschlossen ist, wird er aus dem Array gelöscht. Oder es wird, nachdem die Reihe abgeschlossen ist, mit den verbleibenden offenen Aufträgen aufgefüllt. Die Vorstellungskraft fliegt im Allgemeinen.
Welche Option Sie wählen, bleibt Ihnen überlassen. Und lesen Sie einige meiner Beiträge zu Kovalevs Lehrbuch. Das Lehrbuch schlägt vor, int start() zu schreiben, während das neuere mql4 void OnTick() verlangt.
Indikatoren und Skripte entnehmen Sie bitte der Dokumentation. Übrigens ist es viel einfacher, Indikatoren in aktualisiertem mql4 zu schreiben, als es war, als Sergey dieses Tutorial schrieb.
Ich danke Ihnen vielmals. Ihre Informationen waren für mich sehr wertvoll. Insbesondere über die Funktion start().
Ich erinnere mich nicht an die Antwort von Artem, und ich werde sie auch nicht suchen, aber ich kann mir denken, was er geantwortet haben könnte. ...
Hier ist meine Antwort. Mit einem klaren Hinweis darauf, was zu tun ist:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes
Artyom Trishkin, 2020.04.28 08:22
Die Erklärung ist einfach: Sie müssen die Anzahl der Aufträge und Positionen überwachen und sie mit dem vorherigen Stand vergleichen. Wenn wir beim vorherigen Tick 12 Positionen und beim aktuellen Tick 8 Positionen haben, haben wir eine Veränderung von 4 Positionen. Daher sollten wir die letzten vier Positionen (zum Zeitpunkt des Börsenschlusses) betrachten, um zu verstehen, was mit ihnen geschehen ist.
Aber nach dem beigefügten Code zu urteilen, in dem "Wunder" geschrieben stehen, brauchen Sie wirklich keine Erklärung in Worten. Aber sie ist da, um zu helfen, nicht um für sie zu schreiben.
Ich danke Ihnen vielmals. Ihre Informationen waren für mich sehr wertvoll. Insbesondere über die Funktion start()
Und was macht Ihr Code, außer dass er zwei Verkaufspositionen eröffnet, jede zu einer genau festgelegten Zeit, und den Zeitpunkt der Eröffnung der letzten Position ausgibt, wenn dies erlaubt ist? Alles. Mit uninitialized Variablen, die zu "Wunder" in der Code-Verhalten führen kann, und sehr, sehr alt start() Handler, die aus einem verstaubten Regal mit Jahren von Spinnweben gezogen wurde, und auf dem Markt (eines Tages wollen Sie etwas zu verkaufen) mit alten Handler wird nie verpassen Validator - es wird sagen, dass das falsche Programm Typ.
Danke für den Beitrag. Beim Paar GBP/USD habe ich beim Testen ein Muster im Preisverhalten gefunden. Dieses Muster mit kleinen Korrekturen, wie auch mit kleinen Drawdowns, führt Balance Chart seit 2008 und bis zum aktuellen Moment stetig nach oben. Wie ich schon sagte, sind die Korrekturen und Rückgänge im Gleichgewichtschart nicht groß, aber sie können mehrere Monate andauern.
Ich begann, verschiedene Varianten dieses Musters zu testen und griff zu diesem Zweck auf die Optimierung zurück. Es stellte sich jedoch heraus, dass die Optimierung mit mehreren Parametern auf einmal sehr viel Zeit in Anspruch nimmt. In meinem Fall hat es etwa ein Jahr gedauert. Ein genetischer Algorithmus ist nichts für mich.
Dann kam ich auf die Idee, dass Tests und Optimierungen mit Hilfe von richtig formuliertem Code, der Funktion Pront() und einer Excel-Tabelle schneller durchgeführt werden können.
Der folgende Code ist nur ein Versuch, einen solchen Code zu schreiben. Ich werde diesen Code weiter verbessern. Aber ich stieß auf ein Problem, für dessen Lösung mir das Wissen fehlte.
Bitte beurteilen Sie mich und meinen Code nicht sehr streng.... Ich bin ein Anfänger, der gerade erst begonnen hat, die Grundlagen des Programmierens zu verstehen und wenig mehr. Aber ich nehme Kritik gelassen hin und nehme vor allem an konstruktiver Kritik keinen Anstoß......
Ich danke Ihnen für Ihre Hilfe.
Wenn zwei oder mehr Orders durch Stop oder Take auf demselben Tick geschlossen werden, druckt das Programm Print() erst nach der letzten Order, die auf diesem Tick geschlossen wurde. Ich brauche Print(), nachdem jede Bestellung abgeschlossen ist. Ich weiß nicht, wie ich das erreichen kann. Aber wenn ich den erforderlichen Code sehe, verstehe ich ihn sofort und kann ihn mir merken.
Nachstehend finden Sie ein Beispiel für mein Problem.
Das Gute ist, dass wir im Editor erstellen können, was wir brauchen, einen EA, ein Skript, einen Indikator und der Editor wird eine Vorlage mit den richtigen Feldern erstellen.
Ja, ich habe diese korrekten Felder bemerkt, d.h. neue Funktionen anstelle von START. Aber ich habe ihnen nicht viel Aufmerksamkeit geschenkt und START wie bisher zum Testen verwendet.
Ich weiß nicht, wo ich mehr Details über die letzten Updates von MQL4 lesen kann. Das Buch von Kovalev gefällt mir sehr gut, weil alle Informationen logisch aufgebaut und leicht verständlich sind. Und sie ist ausführlich genug, um alle notwendigen Details zu verstehen. Ich frage mich, warum er nicht das gleiche Lehrbuch für MQL5 geschrieben hat.
Zwei absolut identische Sprachen. Weder mehr noch weniger. Und OOP (von dem alle eingeschüchtert sind) ist in beiden genau dasselbe. Sie wussten es nicht? Haben Sie im Internet Horrorgeschichten gelesen und auf YouTube Blogger beobachtet, die "gut, weise und ewig säen"? Die klugerweise Unsinn reden und die Leute absichtlich von MQL5 abschrecken.
Ich muss Sie leider enttäuschen - beide Sprachen sind genau gleich. Sowohl in Bezug auf die Verständlichkeit als auch auf die Funktionen und das Vorhandensein von OOP.
Aber MQL5 hat mehr Möglichkeiten.
Ja, ich habe die richtigen Felder bemerkt, d. h. neue Funktionen anstelle von START. Aber ich habe ihnen nicht viel Aufmerksamkeit geschenkt, also habe ich START wie bisher zum Testen verwendet.
Ich weiß nicht, wo ich mehr Details über die letzten Updates von MQL4 lesen kann. Das Buch von Kovalev gefällt mir sehr gut, weil alle Informationen logisch aufgebaut und leicht verständlich sind. Und sie ist ausführlich genug, um alle notwendigen Details zu verstehen. Ich frage mich, warum er nicht das gleiche Lehrbuch für MQL5 geschrieben hat.
Wir danken Ihnen für Ihre Teilnahme.
...
Der folgende Code ist nur ein Versuch, einen solchen Code zu schreiben. Ich werde diesen Code in Zukunft verfeinern. Aber ich stieß auf ein Problem, für dessen Lösung mir das Wissen fehlte.
Bitte beurteilen Sie mich und meinen Code nicht sehr streng.... Ich bin ein Anfänger, der gerade erst begonnen hat, die Grundlagen des Programmierens zu verstehen und wenig mehr. Aber ich nehme Kritik gelassen hin und nehme vor allem an konstruktiver Kritik keinen Anstoß......
Ich danke Ihnen für Ihre Hilfe.
Wenn zwei oder mehr Orders durch Stop oder Take auf demselben Tick geschlossen werden, druckt das Programm Print() erst, nachdem die letzte Order auf diesem Tick geschlossen wurde. Ich brauche Print(), nachdem jede Bestellung abgeschlossen ist. Ich weiß nicht, wie ich das erreichen kann. Aber wenn ich den erforderlichen Code sehe, verstehe ich ihn sofort und kann ihn mir merken.
Nachstehend finden Sie ein Beispiel für mein Problem.
Ich habe Ihnen bereits geantwortet:
Die Erklärung in Worten: Sie müssen die Anzahl der Aufträge und Positionen überwachen und sie mit dem vorherigen Stand vergleichen. Wenn wir beim vorherigen Tick 12 Positionen hatten und beim aktuellen Tick 8, haben wir eine Veränderung von 4 Positionen. Dementsprechend sollten wir die letzten vier (zum Zeitpunkt der Schließung) Positionen betrachten, um zu sehen, was mit ihnen geschehen ist.
Sie nehmen den letzten Auftrag in der Liste:
Und Sie müssen zunächst herausfinden, wie sehr sich der Stand der Auftragsliste geändert hat. Früher hatten Sie 12, jetzt haben Sie 8 - das ist eine Veränderung um 4 Aufträge. Dementsprechend müssen Sie alle vier Aufträge ausdrucken. Und Sie drucken immer nur den letzten Auftrag in der Liste.
Wie kann ich wissen, wie viel sich verändert hat? Wir müssen die Anzahl der Aufträge in eine Variable schreiben, zum Beispiel int last_total, wenn wir den EA ausführen. Vergleichen Sie dann bei jedem Tick OrdersTotal() mit last_total. Wenn sie NICHT gleich sind, ist das eine Veränderung. Schreiben Sie die Differenz zwischen OrdersTotal() und last_total in eine Variable, z. B. num_changes, und speichern Sie den neuen Stand von OrdersTotal() in last_total.
Hier kann es einige Feinheiten geben, zum Beispiel, wenn ein schwebender Auftrag ausgelöst wird. Aber im Moment sollten Sie erst einmal das tun, was Sie tun müssen.
Wenn Sie die Anzahl der ausstehenden Aufträge kennen, können Sie diese in der Historie nachsehen. Sie können jedoch auch die Überwachung von Aufträgen in der Liste der historischen Aufträge einschränken - führen Sie alle oben genannten Schritte für die Liste der historischen Aufträge und nicht für die Liste der Marktaufträge durch. Der Unterschied zwischen dem, was war, und dem, was geworden ist - das ist die Menge der Aufträge, die Sie analysieren müssen. Sie analysieren immer nur den letzten Auftrag in der Liste.
Dies kann jedoch nicht garantieren, dass der letzte Auftrag in der Historienliste auch der letzte abgeschlossene Auftrag ist. Auch dies ist eine Nuance, die berücksichtigt werden muss. Aber dann.