Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 82

 

Guten Tag,

Frage zu mql5 - wie arbeite ich mit stopLoss und takeProfit Triggern?

Ich sende einen Auftrag, ändere ihn, er wird ausgeführt und verschwindet wieder. Ich kann danach weder sl noch tp ändern, da OrderSelect keine Bestellung gefunden hat. Dann wird ein Trigger ausgelöst und eine neue Order erstellt, die automatisch StopLoss / TakeProfit implementiert.

 
Forux: Frage zu mql5 - Wie arbeite ich mit stopLoss und takeProfit Triggern?

Ich sende den Auftrag, ändere ihn, er wird ausgeführt und verschwindet. Dann gibt es keine Möglichkeit, sl zu ändern, tp - OrderSelect erscheint mit einer Fehlermeldung Der Auftrag wurde nicht gefunden. Dann wird ein Trigger ausgelöst und ein neuer Auftrag erstellt, der automatisch einen StopLoss / TakeProfit ausführt.

Die Ideologie von mql5 besteht darin, dass nach der Auslösung des Auftrags eine Position für das ausgewählte Symbol geöffnet (geändert, geschlossen) wird. Nachdem der Auftrag ausgelöst wurde (wenn er nicht zur Schließung der Position geführt hat), sollten wir also mit der Position arbeiten. Zum Beispiel mit PositionSelect(). Und für die Änderung der StopLoss- und TakeProfit-Levels hat die Position ihre eigene Variante der Handelsanfrage.
 
Yedelkin:
Die mql5-Ideologie besteht darin, eine Position für das ausgewählte Symbol nach der Auslösung des Auftrags zu öffnen (zu ändern, zu schließen). Nach der Auslösung des Auftrags (wenn er nicht zur Schließung der Position geführt hat) sollten wir also mit der Position arbeiten. Zum Beispiel mit PositionSelect(). Und für die Änderung der StopLoss- und TakeProfit-Levels hat die Position ihre eigene Variante der Handelsanfrage.

Warum wird die Position dann nicht durch stopLoss geschlossen?

2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   deal performed [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)
2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:02   Cant select order 2 error 4754
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00    === add order === 2
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   deal performed [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)

Außerdem ist sein Volumen immer gleich 0,10 Lots, auch wenn einStop-Loss erreicht wurde.

 

Forux: Тогда почему stopLoss не закрывает позицию?   Кроме того ее объем постоянно равен 0.10 лотам, да же после отыгрывания stop loss 

Und woher wissen Sie, dass die Position nicht geschlossen wird, wenn der SL ausgelöst wird und das Volumen gleich bleibt?
 
Yedelkin:
Und wie stellen Sie fest, dass die Position nicht geschlossen wird, nachdem der SL ausgelöst wurde, und dass ihr Volumen gleich bleibt?

PositionGetDouble(POSITION_VOLUME);

2013.01.16 11:38:36     Core 1  disconnected
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:30   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:28   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:26   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:24   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:22   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   deal performed [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:11   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:09   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:06   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:04   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:02   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00    === add order === 2
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   deal performed [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)
2013.01.16 11:38:34     Core 1    magic=12345
 
Und aktualisieren Sie die Positionsinformationen, wie im Referenzhandbuch beschrieben, bevor Sie PositionGetDouble(POSITION_VOLUME) erneut verwenden?
 
Yedelkin:
Und aktualisieren Sie die Positionsinformationen wie im Handbuch beschrieben, bevor Sie PositionGetDouble(POSITION_VOLUME) erneut verwenden?

Wenn ich richtig verstanden habe, was gemeint war, dann ja, indem man Folgendes tut

PositionSelect(_Symbol); // судя по справке обновляет кеш
Print("PositionGetDouble(POSITION_VOLUME) = " + PositionGetDouble(POSITION_VOLUME));
 
Forux: Wenn ich richtig verstanden habe, was gemeint war, dann ja, indem man Folgendes tut:
Ja, genau das habe ich gemeint. D.h. die Verwendung einer solchen Konstruktion für 10 Sekunden ergibt immer noch ein von Null verschiedenes Volumen der Sl-geschlossenen Position? In diesem Fall habe ich noch keine Ahnung davon :(
 

Versuchen Sie dies:

if(PositionSelect(_Symbol)) 
   Print("myPositionGetDouble(POSITION_VOLUME) == " + PositionGetDouble(POSITION_VOLUME));
else 
   Print("Сведения о позиции не обнаружены");
 
Yedelkin:

Versuchen Sie es so:

Ich danke Ihnen vielmals :)

2013.01.16 12:47:49     Core 1  disconnected
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:30   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:28   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:26   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:24   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:22   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   deal performed [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:11   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:09   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:06   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:04   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:02   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00    === add order === 2
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   deal performed [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)
2013.01.16 12:47:45     Core 1    magic=12345

Grund der Beschwerde: