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
Weitere Beispiele für die Verwendung der Funktion SetOrder().
Um Klarheit zu schaffen, sollten wir ein Symbol mit einem großen zulässigen Mindestniveau von Stop Loss/Stake Profit in Pips wählen. Ich habe AUDCAD gewählt, bei dem dieses Niveau in meinem ausgewählten Brokerage-Unternehmen zum Testen 10 Punkte beträgt.
1. Einstellen eines BuyLimit-Auftrags mit Lot 0,1, 5 Pips unter dem aktuellen Kurs. Ich habe absichtlich ein niedrigeres Orderlevel als das minimal zulässige Level gewählt, um den Fehler 130 (Falsche Stops) zu erhalten und zu zeigen, wie die SetOrder-Funktion das Problem lösen wird.
Inhalt des Protokolls (von unten nach oben gelesen):
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5: entfernt
2008.03.17 09:06:24 stdlib AUDCAD,M5: entfernt
2008.03.17 09:06:24 stdlib AUDCAD,M5: uninit Grund 0
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5: uninit Grund 0
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5: Eröffnung #21616412 Kauflimit 0.10 AUDCAD bei 0.9180 ok
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5: SetOrder(): Korrigierte Kursstände
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5: Ask=0.919 Bid=0.918 sy=AUDCAD ll=0.1 op=Buy Limit pp=0.9185 sl=0 tp=0 mn=0
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5: Error(130) set order: ungültige Stops, versuche 1
2008.03.17 09:06:15 stdlib AUDCAD,M5: erfolgreich geladen
2008.03.17 09:06:14 test_SetOrder AUDCAD,M5: erfolgreich geladen
Das Protokoll zeigt, dass diese Funktion versucht hat, eine 0,9185-Order (pp=0,9185) zu platzieren, aber der Handelsserver hat diese Order nicht akzeptiert und Fehler 130 zurückgegeben. Dann korrigiert die Funktion die Ordereinstellung entsprechend dem zulässigen Mindestniveau und führt den nächsten erfolgreich abgeschlossenen Handelsversuch durch. Der Auftrag wird bei 0,9180 erteilt.
2. Setzen eines BuyStop-Auftrags mit Lot 0.3 bei 6 Pips über dem aktuellen Kurs mit einem Stop von 9 Pips
Inhalt des Protokolls (von unten nach oben gelesen):
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5: entfernt
2008.03.17 09:27:36 stdlib AUDCAD,M5: entfernt
2008.03.17 09:27:36 stdlib AUDCAD,M5: uninit Grund 0
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5: uninit Grund 0
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5: open #21617419 buy stop 0.30 AUDCAD bei 0.9209 sl: 0.9195 ok
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5: SetOrder(): Korrigierte Kursstände
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5: Ask=0.9198 Bid=0.9188 sy=AUDCAD ll=0.3 op=Buy Stop pp=0.9204 sl=0.9195 tp=0 mn=0
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5: Error(130) set order: ungültige Stops, versuche 1
2008.03.17 09:27:26 stdlib AUDCAD,M5: erfolgreich geladen
2008.03.17 09:27:25 test_SetOrder AUDCAD,M5: erfolgreich geladen
Dieses Beispiel zeigt, wie sich die Auftragseinstellungsebene von 0,9204 auf 0,9209 geändert hat. Gleichzeitig ist das Niveau des Stopps unverändert bei sl=0,9195 geblieben. Das heißt, der Stopp in Pips hat sich von 9 auf 14 erhöht.
3. Einstellen einer SellLimit-Order mit 0,5 Lot bei 8 Punkten über dem aktuellen Kurs mit einem Stop von 9 Punkten und einer Take-Order von 7 Punkten
Inhalt des Protokolls:
2008.03.17 10:38:50 test_SetOrder AUDCAD,M5: entfernt
2008.03.17 10:38:50 stdlib AUDCAD,M5: entfernt
2008.03.17 10:38:50 stdlib AUDCAD,M5: uninit Grund 0
2008.03.17 10:38:50 test_SetOrder AUDCAD,M5: uninit Grund 0
2008.03.17 10:38:49 test_SetOrder AUDCAD,M5: open #21620553 sell limit 0.50 AUDCAD bei 0.9190 sl: 0.9201 tp: 0.9179 ok
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5: SetOrder(): Korrigierte Kursstände
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5: Ask=0.919 Bid=0.918 sy=AUDCAD ll=0.5 op=Sell Limit pp=0.9188 sl=0.9197 tp=0.9179 mn=0
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5: Error(130) set order: ungültige Stops, versuche 1
2008.03.17 10:38:40 stdlib AUDCAD,M5: erfolgreich geladen
2008.03.17 10:38:39 test_SetOrder AUDCAD,M5: erfolgreich geladen
In diesem Beispiel wird erneut versucht, einen Limitauftrag zu nahe am Markt zu platzieren. Das Order-Setting-Level wurde um 2 Pips von 0,9188 auf 0,9190 nach oben angepasst. Die Stoppmarke wurde ebenfalls angepasst, allerdings um 4 Punkte von 0,9197 auf 0,9201. Nur das Take-Niveau ist unverändert geblieben, das sich von 9 auf 11 Pips erhöht hat.
Ich denke, das sind genug Beispiele. Sie sind schon ziemlich schwer zu verstehen. Welche Schlussfolgerungen können gezogen werden?
1. Die Funktion wird ihr Bestes tun, um ihre Aufgabe zu erfüllen, d.h. sie wird versuchen, eine Reihenfolge festzulegen. Es wird die Niveaus an den sich verändernden Markt anpassen und immer wieder versuchen, seine Aufgabe zu erfüllen.
2. Die Anpassung des Niveaus der Stop-Order-Einstellung führt zu einer Erhöhung des Stop-Niveaus in Punkten gegenüber dem Einstellungskurs. Dies ist darauf zurückzuführen, dass das Stop-Level des Stop-Auftrags bestehen bleibt und das Order-Setting-Level vom Stop-Level wegbewegt wird. Das Niveau der BuyStop-Order wird nach oben und das der SellStop-Order nach unten verschoben. Diese Manipulationen mit der Auftragseinstellungsebene erhöhen die Stoppgröße in Punkten um den Wert der Einstellung der Auftragseinstellungsebene.
3. Die Anpassung des Limit-Order-Setting-Levels führt zu einer Erhöhung des Take-Line-Levels in Punkten relativ zum Setting-Preis. Dies wird auf folgende Weise umgesetzt. Die Abschläge bleiben bestehen, während die Stopps und Einstellwerte für BuyLimit nach oben und für SellLimit nach unten verschoben werden. Die Größe der Take-In-Punkte erhöht sich um den Wert der Korrektur der Auftragseinstellungsebene.
Warnung! Ich habe den Code der SetOrder-Funktion geändert, indem ich ein paar Zeilen ausgetauscht habe. Der alte Beitrag kann nicht bearbeitet werden, daher füge ich die korrigierte Funktion hier ein. Ebenfalls beigefügt ist ein Skript zum Online-Test der Funktion SetOrder.
Um die Veröffentlichung der Funktion ModifyOrder zu beschleunigen, beschloss ich, für eine Weile zu den Positionsfunktionen zu wechseln, um dann zu den Bestellfunktionen zurückzukehren und mit ihnen fertig zu werden.
Achtung!
Ich definierePositionen als OP_BUY und OP_SELL Handelsoperationen. Positionen werden geöffnet und geschlossen.
Ich nenne die Handelsoperationen OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT und OP_SELLSTOPals Aufträge. Aufträge werden erteilt und gelöscht. Wenn ein Auftrag ausgelöst wird, wird er zu einer Position.
Die Funktion ExistPositions().
Mit dieser Funktion können Sie überprüfen, ob es offene Positionen zum Kauf oder Verkauf gibt. Ähnlich wie bei der Funktion ExistOrders. Standardmäßig werden alle Positionen geprüft: aktuelle und andere. Sie können die Auswahl mit einer Kombination von Filtern - Funktionsparametern - verfeinern:
Beispiele für die Verwendung der Funktion ExistPositions().
1. Prüfen Sie das Vorhandensein einer Position
2. Prüfen, ob eine beliebige Position auf dem aktuellen Kartensymbol vorhanden ist
3. Überprüfung der Existenz des Kaufs eines beliebigen Instruments
4. Prüfen Sie, ob es einen Verkauf mit der magischen Zahl 123456 auf EURUSD gibt
5. Prüfen Sie das Vorhandensein einer Position, deren Öffnungszeit nicht länger als 15 Minuten zurückliegt
Der Trailer enthält ein Skript zum Testen der Funktion ExistPositions. Die ersten vier Beispiele sind auskommentiert.
Sorry, aber weder OrderSet_1 noch OrderSet_2 funktionieren! Er erzeugt Fehler - er lässt sich nicht kompilieren! Was muss ich tun?
Funktionen und Möglichkeiten, mit Datum und Uhrzeit zu arbeiten, wären sehr hilfreich...
Zum Beispiel:
- 2 Stunden von der aktuellen Zeit subtrahieren
- X Tage bis zum Verfall...
Außerdem... Ich weiß nicht, ob das relevant ist... :(
Funktionen für die Statistik. Zum Beispiel:
- wie viele stündliche Kerzen um 21:00 Uhr jeden Montag
- von denen: 215 bullish, 245 bearish
- der bullischen Kerzen: min. 12 Pips max. 54 Pips
- usw...
oder
- der Tiefstwert jeder ersten 15-Stunden-Kerze des Tages ist X-mal höher/niedriger als der der zweiten
Es sind nicht die Funktionen selbst, die wichtig sind, sondern wie sie erstellt werden, und es ist einfacher, eigene Funktionen zu implementieren,
während ich programmieren lerne...
Ich beschwere mich mal wieder :))) Manchmal sind viele Dinge nicht ganz klar, und Bücher über C können helfen.
Sie können sie natürlich lesen, aber müssen Sie wirklich Ihren Kopf mit unnötigen Informationen füllen und sich nur auf µl4 konzentrieren?
Welche Art von Unklarheit? zum Beispiel diese: ||
Funktionen und Möglichkeiten, mit Datum und Uhrzeit umzugehen, wären sehr nützlich...
Zum Beispiel:
- 2 Stunden von der aktuellen Zeit subtrahieren
- Noch X Tage bis zum Verfall...
...
brauchen Sie eine solche Funktion nicht zu schreiben - es gibt eine sehr einfache Lösung!
int gHour = 2;
datetime gTwoHour ;
gTwoHourTime = TimeCorrent() - ((86400)/24) * gHour ); // 2 Stunden
gTwoHourTime = TimeCorrent() - 7200; // dasselbe, aber ohne Lastberechnungen
d.h. wir erhalten 86400 Ticks an einem Tag
also 2 Stunden = 7200 Ticks, d.h. 86400/24 * 2 = 7200
1 Stunde = 3600; usw.
Funktionen und Möglichkeiten zur Arbeit mit Datum und Uhrzeit wären nützlich.
Funktionen für die Statistik. Zum Beispiel:
- wie viele Kerzenständer um 21:00 Uhr jeden Montag
- von denen: 215 bullish, 245 bearish
- der bullischen Kerzen: min. 12 Pips max. 54 Pips
- usw...
oder
- der Tiefstwert jeder ersten 15-Stunden-Kerze des Tages ist X-mal höher/niedriger als der der zweiten
Es sind nicht die Funktionen selbst, die wichtig sind, sondern wie sie erstellt werden, und es ist einfacher, eigene Funktionen zu implementieren,
während ich programmieren lerne...
Ordnungsgemäß notiert... :-)
Ich werde mich wieder beschweren :))) manchmal ist vieles nicht ganz klar, und man sagt, dass C-Bücher helfen werden.
Sie weisen darauf hin, dass viele C-Bücher hilfreich sind. Natürlich können Sie sie lesen, aber müssen Sie wirklich Ihren Kopf mit unnötigen Informationen füllen und sich nur auf µl4 konzentrieren?
Welche Art von Unklarheit? zum Beispiel diese: ||
Es ist eine logische ODER-Verknüpfung. Lassen Sie es mich an einem Beispiel erklären. Der Ausdruck "Wenn x>2 oder x<-3, dann x=5" hat in MQL4 die folgende Form