[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 5
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Schließen Sie nicht die Möglichkeit aus, dass die erste Order zu einer Marktorder wird und infolgedessen mit diesem Zyklus für Limit-Orders nicht entfernt werden kann?
Ich führe eine Visualisierung durch. Zu dem Zeitpunkt, zu dem der Auftrag gelöscht werden sollte, ist er noch nicht abgeschlossen. Ich weiß, wie ich die magische Zahl einstellen kann, aber ich kann den ersten von zwei ausstehenden Aufträgen nicht löschen.
Offensichtlich dafür - ein paar Beiträge weiter oben :-))) - Der einfachste Weg, um zu bestimmen, welche Reihenfolge von zwei zu schließen ist, ist die magische Zahl. Weisen Sie ihnen beim Einrichten unterschiedliche Nummern zu. In dem Beispiel, das Sie oben gezeigt haben, fehlt diese Prüfung. Schreiben Sie statt Ticket auch OrderTicket()."
OrderTicket() wird wahrscheinlich das Ticket der letzten ausstehenden Bestellung erhalten, ich brauche das vorletzte.
OrderTicket() wird wahrscheinlich ein Ticket der letzten ausstehenden Bestellung erhalten, und ich brauche die vorletzte.
Wenn Sie zwei schwebende Aufträge erteilen, ist es wahrscheinlich einfacher, dem ersten eine 1 und dem zweiten eine 2 zu geben. ))
Dann werden sowohl Sie als auch der Expert Advisor nicht durch die Zahlen verwirrt.
alex12, es ist schon gut, etwas zu schreiben. Eine Menge Fehler, aber trotzdem nicht schlecht.
1. beide Kompilierungsfehler sind darauf zurückzuführen, dass Sie in derselben start() die lokalen Variablen SL und TP zweimal definieren. Sie müssen sie einmal innerhalb der Funktion definieren, sonst kommt es zu einem Fehler.
Entfernen Sie den Typ double in der zweiten Berechnung der beiden Variablen und der Fehler wird verschwinden. Aber das ist noch nicht alles.
2. Sind Sie sicher, dass Sie globale externe Variablen mit denselben Namen benötigen? Das Problem ist, dass die innerhalb der Funktion definierte SL-Variable eine andere ist als die globale Variable mit demselben Namen. Wenn Sie wollen, dass es genau die gleiche Variable wie die externe (extern) ist, entfernen Sie double überall.
3. Die Bedingung if() ist in der Regel eine logische Bedingung, obwohl einfache Berechnungen durch die Syntax nicht untersagt sind. Und Sie haben einfach keine logische Bedingung.
Üben Sie zunächst mit einfachen Programmen, z. B. Berechnungen mit Ausgabe. Dann werden Sie die Syntax verstehen.
OrderTicket() wird wahrscheinlich das Ticket der letzten ausstehenden Bestellung erhalten, und ich brauche das vorletzte.
Sie müssen sich die Zeit merken, zu der die Bestellung aufgegeben wurde, und dann die Zeit in der Schleife vergleichen und die älteste Bestellung löschen.
alex12, es ist schon gut, etwas zu schreiben. Viele Fehler, aber trotzdem nicht schlecht.
1. beide Kompilierungsfehler sind darauf zurückzuführen, dass Sie in derselben start() die lokalen Variablen SL und TP zweimal definieren. Sie müssen sie einmal innerhalb der Funktion definieren, sonst kommt es zu einem Fehler.
Entfernen Sie den Typ double in der zweiten Berechnung der beiden Variablen und der Fehler wird verschwinden. Aber das ist noch nicht alles.
2. Sind Sie sicher, dass Sie globale externe Variablen mit denselben Namen benötigen? Das Problem ist, dass die innerhalb der Funktion definierte SL-Variable eine andere ist als die globale Variable mit demselben Namen. Wenn Sie wollen, dass es genau die gleiche Variable wie die externe (extern) ist, entfernen Sie double überall.
3. Die Bedingung if() ist in der Regel eine logische Bedingung, obwohl einfache Berechnungen nicht durch die Syntax verboten sind. Und Sie haben einfach keine logische Bedingung.
Üben Sie zunächst mit einfachen Programmen, z. B. Berechnungen mit Ausgabe. Dann werden Sie die Syntax verstehen.
Sie merken sich den Zeitpunkt der Auftragserteilung, dann vergleichen Sie auch im Zyklus die Zeit - löschen Sie die älteste, etwa so - schauen Sie hier und verbinden Sie sie mit Ihrem EA.
Danke für den Link! Ich werde es studieren :) Ich habe eine gute Idee mit der Zeit, sowie mit der magischen Zahl und der Auftragsart (bylimit oder selllimit). Aber wahrscheinlich haben Sie mich nicht ganz verstanden. Mein Problem ist nicht die Markierung des Auftrags, sondern WIE man ihn wieder entfernt. Ich kann nur den letzten schwebenden Auftrag löschen, egal wie ich den vorletzten Auftrag definiere.
Andrejew:
Danke für den Link!!! Ich werde es mir ansehen :) Mit Zeit, sowie magischer Nummer und nach Auftragsart (bylimit oder selllimit) - gute Idee. Aber wahrscheinlich haben Sie mich nicht ganz verstanden. Mein Problem ist nicht die Markierung des Auftrags, sondern WIE man ihn wieder entfernt. Ich kann nur den letzten schwebenden Auftrag löschen, egal wie ich den vorletzten definiere.
Wenn Sie mindestens einen der angebotenen Tipps beherzigen (Magier, Typ, Zeiteinstellung), werden Sie kein Problem haben, genau den Auftrag zu löschen, den Ihre Handelsstrategie vorsieht. ))
Verwenden Sie zwei Kriterien bei Ihrer Auswahl, z.B. Installationszeit und Typ oder Typ und Magie.
Danke für den Link!!! Ich werde es mir ansehen :) Mit Zeit, als auch magische Zahl und nach Auftragsart (bylimit oder selllimit) ist eine gute Idee. Aber wahrscheinlich haben Sie mich nicht ganz verstanden. Mein Problem ist nicht die Markierung des Auftrags, sondern WIE man ihn wieder entfernt. Ich kann nur den letzten schwebenden Auftrag löschen, unabhängig davon, wie ich den vorletzten Auftrag definiere.
Ich korrigiere meinen Code gemäß Ihren Bedingungen - ich werde ihn jetzt hier veröffentlichen.
OrderTicket() wird wahrscheinlich ein Ticket der letzten ausstehenden Bestellung erhalten, und ich brauche das vorletzte.
Berechnen Sie bei jedem Tick die Anzahl der ausstehenden Aufträge neu.
Wenn es weniger sind, bedeutet dies, dass ein schwebender Auftrag zu einem Marktauftrag geworden ist.
Alle übrigen (unnötig gewordenen) können gelöscht werden.