Fermeture des demi-lots. - page 14

 
Bon conseil, merci ! Je vais certainement essayer de suivre cette voie - Je n'ai pas un prix fixe de take profit par rapport à une valeur de pip (c'est-à-dire toujours 100 pips) C'est fait sur la base de l'endroit où se trouve l'EMA 60 = stop loss et le TP fixe final est 1:2 (donc ça peut être n'importe quelle valeur de pip par rapport à la distance de 2x pip du stop loss...). C'est un peu plus difficile pour moi de le faire à cause de cela...

Dernière question, la normalisation des doubles de prix est-elle vraiment cruciale ? Je ne comprends pas son utilité... ?
 

Oui, cela peut être un problème avec les doubles, OrderTakeProfit() OrderStopLoss() OrderLots() surtout si vous faites des calculs sur eux. Cela a affecté l'un de mes EA lorsque je faisais quelque chose de similaire à votre fermeture partielle d'ordres. Jetez un coup d'œil à ce fil de discussion https://www.mql5.com/en/forum/141034

 
Bien - j'ai réussi à le faire fonctionner parfaitement... Le problème est que je veux m'éloigner de If(OrderOpenPrice() > OrderStoploss())" pour filtrer une transaction qui est continuellement fermée au même prix...

J'ai essayé de me creuser la tête mais je n'arrive pas à trouver la logique pour le faire via l'OrderTicket() sur le "OP_BUY" dès qu'il est déclenché, et vers le numéro d'OrderTicket() sur la position restante après que la moitié soit fermée ?

Une fois que l'OP_BUY a été divisé par deux à OrderClose(), la position restante a un numéro de ticket différent... Quelqu'un peut-il m'éclairer sur la façon de comparer les deux afin de pouvoir dire à l'OrderClose() de s'arrêter après qu'il l'ait fait une fois ?
 
S'il vous plaît - Je sais que j'ai épuisé ce fil, mais c'est la dernière partie :) ?

J'ai tout préparé, mais je ne comprends pas la logique de la comparaison de ce que j'ai écrit ci-dessus.

J'ai l'intention de créer un fil de discussion pour aider les autres après avoir terminé ceci - ce ne serait que justice !
 
Quelqu'un :(
 

Je vous ai déjà dit comment faire, obtenez le OrderOpenTime() du ticket que vous êtes sur le point de fermer partiellement. Une fois que vous l'avez fermé partiellement, refaites OrderSelect(), le ticket qui a le même OrderOpenTime() est la partie restante de l'ordre fermé partiellement.

 

Ah oui - Désolé, j'ai dû rater ça la première fois !

Je viens de m'asseoir et d'y réfléchir, et j'ai du mal à en comprendre la logique ? Pourriez-vous me donner un indice ?

Pour le moment, j'ai ceci dans la section "int Start()" :

Il est évident que je dois supprimer la partie "OrderOpenPrice() > OrderStopLoss()), mais par quoi dois-je la remplacer pour que le "CloseHalfOrder() ;" ne soit PAS appelé continuellement ? Je n'arrive pas à mettre en place la logique (un peu lent aujourd'hui !) Est-ce que je compare avec la transaction fermée dans l'historique ?

   if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
      {
      if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
         {
         CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }

      if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
         {
         CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }   
      
 
DomGilberto:

Ah oui - Désolé, j'ai dû manquer ça la première fois !

Je viens de m'asseoir et de réfléchir à ce sujet, et j'ai du mal à en comprendre la logique ? Pourriez-vous me donner une indication ?

Pour le moment, j'ai ceci dans la section "int Start()" :

Il est évident que je dois supprimer la partie "OrderOpenPrice() > OrderStopLoss()), mais par quoi dois-je la remplacer pour que le "CloseHalfOrder() ;" ne soit PAS appelé continuellement ? Je n'arrive pas à mettre en place la logique (un peu lent aujourd'hui !) Est-ce que je compare avec la transaction fermée dans l'historique ?...

Au point que j'ai marqué dans votre code, quel ordre avez-vous sélectionné ?

 if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
      {

      //  order currently selected is ??
 
      if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
         {
         CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }

      if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
         {
         CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }   
      

Est-ce le bon ordre ? Si c'est le bon ordre, est-ce par hasard ou à dessein ?

 
C'est ce que je pensais aussi - Il est indiqué que je dois utiliser OrderSelect() avant d'utiliser OrderType, mais cela fonctionne ? Je n'ai jamais qu'un seul ordre ouvert à un moment donné...

Je ne vois pas comment utiliser OrderOpenTime() à mon avantage et empêcher que CloseHalfOrder soit appelé à chaque fois...
 
DomGilberto:
C'est ce que je pensais aussi - Il est indiqué que je dois utiliser OrderSelect() avant d'utiliser OrderType, mais cela fonctionne ? Je n'ai jamais eu qu'un seul ordre ouvert à un moment donné...

Si vous faites tourner l'EA sur deux symboles, vous aurez potentiellement deux ordres ouverts en même temps... Vous ne pouvez pas tester cela dans le testeur de stratégie, quel ordre sera alors sélectionné ? le bon ou le mauvais ?