Questions des débutants MQL5 MT5 MetaTrader 5 - page 82

 

Bon après-midi,

Question sur mql5 - comment puis-je travailler avec les déclencheurs stopLoss et takeProfit ?

J'envoie un ordre, je le modifie, il est exécuté et disparaît. Je ne suis pas en mesure de modifier sl ou tp par la suite car OrderSelect n'a pas trouvé d'ordre. Ensuite, un déclencheur est déclenché et un nouvel ordre est créé qui implémente automatiquement le StopLoss / TakeProfit.

 
Forux: Question sur mql5 - Comment puis-je travailler avec les déclencheurs stopLoss et takeProfit ?

J'envoie l'ordre, je le modifie, il est exécuté et disparaît. Il n'y a alors aucune possibilité de changer de sl, tp - OrderSelect s'affichera avec une erreur La commande n'a pas été trouvée. Ensuite, un déclencheur est déclenché et un nouvel ordre est créé qui exécute automatiquement un StopLoss / TakeProfit.

L'idéologie de mql5 est qu'après le déclenchement de l'ordre, une position est ouverte (changée, fermée) pour le symbole sélectionné. Ainsi, après le déclenchement de l'ordre (s'il n'a pas entraîné la fermeture de la position), nous devons travailler avec la position. Par exemple, en utilisant PositionSelect(). Et pour modifier les niveaux stopLoss et takeProfit, la position a sa propre variante de demande de transaction.
 
Yedelkin:
L'idéologie mql5 consiste à ouvrir (changer, fermer) une position pour le symbole sélectionné après le déclenchement de l'ordre. Ainsi, après le déclenchement de l'ordre (s'il n'a pas conduit à la fermeture de la position), nous devons travailler avec la position. Par exemple, en utilisant PositionSelect(). Et pour modifier les niveaux stopLoss et takeProfit, la position a sa propre variante de demande de transaction.

Alors pourquoi le stopLoss ne ferme pas la position?

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)

En outre, son volume est toujours égal à 0,10 lot, même après avoir atteint unstop loss.

 

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

Et comment savez-vous que lorsque le SL est déclenché, la position n'est pas fermée et que son volume reste le même ?
 
Yedelkin:
Et comment déterminez-vous que la position n'est pas fermée après le déclenchement du SL et que son volume reste le même ?

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
 
Et mettez-vous à jour les informations sur la position, comme le prescrit le manuel de référence, avant d'utiliser à nouveau PositionGetDouble(POSITION_VOLUME) ?
 
Yedelkin:
Et mettez-vous à jour les informations sur la position, comme le prescrit le manuel, avant d'utiliser à nouveau PositionGetDouble(POSITION_VOLUME) ?

Si j'ai bien compris ce que vous vouliez dire, alors oui, en faisant ce qui suit

PositionSelect(_Symbol); // судя по справке обновляет кеш
Print("PositionGetDouble(POSITION_VOLUME) = " + PositionGetDouble(POSITION_VOLUME));
 
Forux: Si j'ai bien compris ce que vous vouliez dire, alors oui, en faisant ce qui suit:
Oui, c'est ce dont je parlais. C'est-à-dire qu'en utilisant une telle construction pendant 10 secondes, on obtient toujours un volume non nul de la position Sl-fermée ? Dans ce cas, aucune idée à ce sujet pour le moment :(
 

Essayez ça :

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

Essayez comme ça :

Merci beaucoup :)

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