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
Eine kleine Änderung, denn es wurde geprüft, ob ein Auftrag geschlossen wurde, obwohl es keinen gab.
Dem Code zufolge gibt es keinen Grund, einen Verkauf zu eröffnen, sobald ein Kauf geschlossen wird.
Die Bedingung für den Ausstieg aus einem Kauf ist nicht dieselbe wie die Bedingung für die Eröffnung eines Verkaufs.
Denken Sie daran, dass, da Sie nur das Öffnen der Kerze prüfen, Close[0] der Geldwert des ersten Ticks ist, der für die Kerze empfangen wurde.
Hallo GumRai,
Ich habe mich gefragt, ob du mir bei meinem Code weiterhelfen kannst/willst? Wenn du mir einfach sagen könntest, welche Codes ich mir ansehen sollte, werde ich versuchen, es zuerst selbst zu kodieren und dann einfach mit Fragen zurückkommen.
Was ich will, ist, dass, sobald ein Handel platziert wird, setzt es einen Stop-Loss bei, sagen wir, 50 Pips (das ist, was es jetzt tut). Sobald sich der Kurs jedoch um 60 Pips in Richtung des Trades bewegt, wird der SL auf Break-Even gesetzt, und im weiteren Verlauf wird ein Trailing-Stop 70 Pips vom Trade entfernt gesetzt.
Wie würde ich vorgehen, um dies zu tun? Wie immer wäre ich für jede Hilfe sehr dankbar.
Für den Break-even verschiebe ich die SL immer mindestens auf Break-even + 1 Punkt. Das vermeidet mögliche Probleme mit dem Vergleich von Doubles bei späteren Kontrollen.
Es geht einfach darum, 2 Bedingungen zu prüfen (für einen Kauf)
und
und dann den Auftrag so zu ändern, dass der SL dem Eröffnungskurs + 1 Punkt oder dem Betrag entspricht, den Sie festschreiben möchten.
Bei einem Verkauf ist es die umgekehrte Bedingung, aber Sie sollten auch kodieren, um zu berücksichtigen, wenn der SL anfangs 0 ist.
OrderOpenPrice()>OrderStopLoss() || OrderStopLoss()==0
Für den Break-even verschiebe ich die SL immer mindestens auf Break-even + 1 Punkt. Das vermeidet mögliche Probleme mit dem Vergleich von Doubles bei späteren Kontrollen.
Es geht einfach darum, 2 Bedingungen zu prüfen (für einen Kauf)
und
und dann den Auftrag so zu ändern, dass der SL dem Eröffnungskurs + 1 Punkt oder dem Betrag entspricht, den Sie festschreiben möchten.
Bei einem Verkauf ist es die umgekehrte Bedingung, aber Sie sollten auch kodieren, um zu berücksichtigen, wenn der SL anfangs 0 ist.
Vielen Dank für den Hinweis. In der Tat, was ich tun werde, ist genug Punkte hinzufügen, so dass es gerade (ungefähr) deckt die Kosten für die Brokerage für den Handel.
Für die zweite Zeile..warum sollte ich Orderclose price-OrderOpenPrice verwenden? Ich habe diesen Code nicht ganz verstanden. Müsste ich nicht Bid-OrderOpenPrice verwenden, da dies die Bewegung des Kurses widerspiegelt?
Bin ich überhaupt nahe dran mit dem, was ich hier unten mache?
Ich habe commission oben als extern deklariert. Und ich habe stattdessen Bid verwendet.
Bearbeiten:
Ich vermute also (basierend auf dem, was ich unten gefunden habe), dass der Code, den ich oben gepostet habe, falsch ist? Ich fand die folgenden in der MQL4 Buch/Hilfe... Es scheint nur ein Trailing-Stop, während das, was ich brauche, ist ein Breakeven-Stop zuerst, gefolgt von Trailing-Stop. Wie würde ich dies ändern?
Ihr gesamter Code-Block ist an BuyTicket==-1 gebunden.
Wenn ein Auftrag eröffnet wird, ist BuyTicket nicht = -1, so dass keine Prüfungen für den Wechsel zu BE durchgeführt werden, während der Handel geöffnet ist.
Was hat die Ticketnummer mit dem Preis zu tun?
Sie müssen eine Order auswählen, bevor Sie OrderOpenPrice() verwenden.
OrderClosePrice() ist der Geldkurs (Bid) zu dem Zeitpunkt, zu dem die Order für einen Kauf ausgewählt wird, und der Briefkurs (Ask) für einen Verkauf (während die Order noch offen ist).
Ich vermute also (basierend auf dem, was ich unten gefunden habe), dass der Code, den ich oben gepostet habe, falsch ist? Ich fand die folgenden in der MQL4 Buch/Hilfe...Es scheint zu sein, nur ein Trailing-Stop, während was ich brauche, ist ein Breakeven-Stop zuerst, gefolgt von Trailing-Stop. Wie würde ich dies ändern?
Versuchen Sie dies
Vielen Dank für die Hinweise! Ich habe die notwendigen Änderungen vorgenommen. Wenn ich kompiliere, zeigt es eine Warnung an, dass "der Rückgabewert von 'OrderSelect' überprüft werden sollte. Dies führt seltsamerweise dazu, dass nur ein Kauf ausgelöst wird und für den Rest wird wieder ein 4108-Fehlercode angezeigt. Verkaufen funktioniert gut (ich habe keine Änderungen daran vorgenommen).
Hier ist der gesamte Abschnitt des Kauf-Codes, für den Fall, dass ich etwas falsch mache - aber dieser Teil sollte nicht sein, da ich nur diesen Code in der Mitte hinzugefügt habe. Der Rest war wie vorher, was perfekt funktionierte. Was mache ich hier falsch?
Update:
Ich habe noch mehr gegoogelt und es wie folgt geändert:
Dadurch wird der Fehler beseitigt, der beim Klicken auf "Kompilieren" auftritt. Aber es erzeugt immer noch den OrderModify-Fehler 4108 im Journal.
Ihr gesamter Code ist in der if-Bedingung enthalten
enthalten, so dass er nur einmal pro neuem Balken ausgeführt wird.
Wenn BuyTicket == -1 ist, versuchen Sie, die Bestellung mit einer Ticketnummer von -1 auszuwählen, die natürlich nicht existiert.
Prüfen Sie, ob BuyTicket>0 ist, bevor Sie versuchen, einen Auftrag auszuwählen.
Ihr gesamter Code ist in der if-Bedingung enthalten
enthalten, so dass er nur einmal pro neuem Balken ausgeführt wird.
Danke für diesen Hinweis.
Deshalb habe ich oben eine zusätzliche Klammer eingefügt, direkt nach Start wie:
int start() { {
und schloss dann eine Klammer (die den gesamten Abschnittif(bar_time!=Time[0]) beendete) und platzierte dann den Code am Ende, gefolgt von einem Return (0); und einer Endklammer, um den Start() zu schließen.
Keine Fehler, entweder in den Code oder die Backtest-Journal, aber es dauerte nur einen Kauf Handel und das ist es--das auch, die es geschlossen rechts zu öffnen, obwohl Preis nicht rühren höher von der Eröffnung--geschweige denn bewegen 50 Pips.
Ich denke, das könnte mit dem BuyTicket zu tun haben, das == -1 ist, das Sie erwähnt haben. Aber ich habe ehrlich gesagt keine Ahnung, wie man das ändern kann. Ich würde diese -1 Sache in basierend auf Ihrer Empfehlung für den ursprünglichen Code setzen--was fantastisch funktioniert. Aber wie würde ichprüfen, ob BuyTicket>0 ist, bevor ich versuche, eine Bestellung auszuwählen?
Aber wie würde ichprüfen, ob BuyTicket>0 ist, bevor ich versuche, eine Bestellung auszuwählen?
Es tut mir leid, aber wenn Sie diese Frage stellen müssen, versuchen Sie, einen Code zu schreiben, der viel zu kompliziert für Ihren Wissensstand ist.
Ich kann Ihren Code nicht Stück für Stück für Sie schreiben.