Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1864
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 habe vor kurzem eine Meldung geschrieben:#18550. Sie kann jedoch durch Hinzufügen von SendNotification verbessert werden:
Fügen Sie die Zeilen, die ich hervorgehoben habe, zum Quellcode hinzu, legen Sie ihn im Ordner Indicators ab und kompilieren Sie ihn. Dieser Indikator kann beliebig oft in das Diagramm eingefügt werden und empfängt Signale, wenn verschiedene Niveaus überschritten werden. Der Code wurde online fertiggestellt. Das Ergebnis wird nicht überprüft.
Forum für Handel, automatisierte Handelssysteme und Strategietests
Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes
GlaVredFX, 2022.01.17 18:59
Ich suche den Code, um Aufträge zu schließen, und wenn ich keinen sehe, werde ich einen neuen Auftrag eröffnen.
Aber aus irgendeinem Grund, schließt es nur 1 Auftrag und hält vor dem nächsten Signal.
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 < Abschluss 1.1304 ExistPosSell 0
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 > clos 1.1304 ExistPosBuy 1
2022.01.17 16:22:08.366 2022.01.04 08:00:00 e: Signal 1.1325 < clos 1.1306 ExistPosSell 0
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 > clos 1.1306 ExistPosBuy 1
2022.01.17 16:22:08.327 2022.01.04 2022.01.04 00:00:00 e: Signal 1.1326 < clos 1.1296 ExistPosSell 0
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 > clos 1.1296 ExistPosBuy 1
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 < close 1.1283 ExistPosSell 0
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: close #1 buy 0.01 EURUSD at 1.13598 at price 1.12831
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 > close 1.1283 ExistPosBuy 1
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: open #4 buy 0.01 EURUSD at 1.13512 ok
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 < Schluss 1.135 ExistPosSell 0
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 > Schluss 1.135 ExistPosBuy 1
Wenn Sie Ihrer Frage und Ihrem Code etwas mehr Aufmerksamkeit schenken, werden Sie es selbst sehen.
Die Frage ist, dass die 1 profitabelste Order auf einem Balken geschlossen werden sollte und dann warten wir auf einen neuen Balken und schließen wieder 1 profitable Order. Wir sollten nicht alle von ihnen auf einmal schließen.
Das bedeutet, dass wir den ersten Balken schließen, aber auf dem nächsten Balken nichts passiert.
Das Problem dabei ist, dass die 1 profitabelste Order auf einem Balken schließen sollte, dann auf einen neuen Balken warten und wieder 1 profitable Order schließen. Sie sollten nicht alle auf einmal schließen.
Dann müssen Sie Ihre Fragen richtig formulieren. Sie haben nur 1 Signal. Sie erhalten nur 1 Signal bei der Eröffnung eines neuen Balkens. Wenn es nur 1 Signal gibt, wie viele Aufträge werden dann geschlossen? Und nur, wenn das Signal auf einem neuen Balken erscheint. Bleibt das Signal aus, werden die Aufträge in den nächsten Bars geschlossen. Wiederum, wenn es ein Signal gibt.
Dann müssen Sie die Fragen richtig formulieren. Sie erhalten nur 1 Signal. Und es ist bei der Eröffnung einer neuen Bar. Und wenn es nur 1 Signal gibt, wie viele Aufträge werden dann geschlossen? Und nur, wenn das Signal auf einem neuen Balken erscheint. Bleibt das Signal aus, werden die Aufträge in den nächsten Bars geschlossen. Und wieder, wenn es ein Signal gibt.
In solchen Fällen hilft in der Regel ein Flussdiagramm. Oder wir müssen den Algorithmus im Detail Punkt für Punkt auf einem Blatt Papier oder in einer Textdatei beschreiben. Und erst dann werden Sie verstehen, wie Sie Ihren Code schreiben müssen.
Benötige Funktion, um 1 Auftrag zu schließen, der unter allen verfügbaren Aufträgen zuerst geöffnet wurde. wer kann teilen.
Wie Sie bemerkt haben, ist der Algorithmus im Code enthalten.
1) Neue Leiste erscheint
2) Wenn der MA höher ist als der Schlusskurs des vorherigen Balkens, gehen Sie zu Schritt 3, wenn der MA unter dem Schlusskurs liegt, gehen Sie zu Schritt 4.
3)Wenn wir eine KAUFEN-Position haben, schließen wir eine Position mit maximalem Gewinn in dem Währungspaar.
3.1)Wenn es keine offenen KAUF-Aufträge gibt, eröffnen Sie eine VERKAUF-Position.
4) Wenn wir eine KAUFEN-Position haben, schließen wir eine Position mit einem maximalen Gewinn in dem Währungspaar.
4.1) Wenn es keine offene SELL-Order gibt, eröffnen wir eine BUY-Position.
Jetzt habe ich wieder eine Frage, was in diesem Code des oben beschriebenen Algorithmus falsch ist:
Dieser Code enthält eine Reihe von Befehlen. Das Terminal weiß nicht, was Sie brauchen, es weiß nur, was im Code steht!
Schreiben Sie die Variablen buySignal undsellSignal global.Im Code ist eine Reihe von Befehlen enthalten. Das Terminal weiß nicht, was Sie brauchen, es weiß nur, was im Code steht!
Ich habe diese Nachricht gelöscht, weil das Problem darin besteht, dass Aufträge nicht nach Gewinn, sondern nach Zeit abgeschlossen werden sollten.
Das liegt daran, dass wir nicht immer und nicht immer dort Gewinn machen, wo er sein sollte.
Daher benötigen wir die Funktion"Schließen Sie eine Position, die ganz am Anfang aller verfügbaren Positionen eröffnet wurde".
Ich habe diese Nachricht gelöscht, weil das Problem darin besteht, dass Aufträge nach Zeit und nicht nach Gewinn geschlossen werden sollten.
Denn der Gewinn ist nicht immer da und nicht immer dort, wo er sein sollte.
Daher benötigen wir die Funktion"Schließen Sie eine Position, die ganz am Anfang aller verfügbaren Positionen eröffnet wurde".
Ich habe ein Beispiel für die Positionseröffnung im Timer im vorherigen Beitrag hinzugefügt. Damit ist gewährleistet, dass die Position geöffnet wird. Sie können dort Ihre eigene Funktion ersetzen.
Im vorherigen Beitrag wurde ein Beispiel für die Öffnung einer Timerposition hinzugefügt. Damit ist gewährleistet, dass die Stelle geöffnet wird. Sie können dort Ihre eigene Funktion ersetzen.
Aber nicht auf diese Weise. Sie müssen das Ergebnis der
oder eine neue Funktion von Ihnen in OnTradeTransaction. Und wenn es keine Positionen gibt, wird er eintreten. Oder Sie schreiben das Signal in buySignal odersellSignal und verarbeiten es in OnTimer, wie ich im Beispiel gezeigt habe.