Code simple nécessaire pour l'EA (modifier deux ordres ouverts) - page 4

 

C'est la réponse que j'ai donnée il y a quelques messages... C'est la façon la plus simple de procéder...

"Je place deux ordres en attente à un moment précis, à savoir 23:00 GMT+2 je pense. L'un des ordres en attente est un stop de vente et l'autre un stop d'achat, les deux ordres sont à une distance égale de l'ouverture de la bougie de 23:00, dans ce cas 14 pips.Les deux ont un TakeProfit de 28 pips (dans ce cas) et un StopLoss de 55 pips."

Vous pouvez calculer où était le TP d'origine en vous référant à la bougie de 23:00, vérifiez l'ordre et voyez s'il est toujours fixé sur le TP d'origine, s'il l'est alors il peut être modifié ... sinon il a déjà été modifié donc ne le modifiez pas à nouveau.

 

Essayez ceci . . . il compile mais je ne l'ai pas encore essayé dans le testeur de stratégie. . . .

Dossiers :
madmax.mq4  10 kb
 
RaptorUK:

Essayez ceci... il compile mais je ne l'ai pas encore essayé dans le Strategy Tester....

Je reçois 'OrderSend error 130' pour une raison quelconque, même si le SL et le TP semblent corrects et que les 'OrderSend' sont disposés de la même manière que le code précédent. Pourquoi cela se produit-il ?

J'ai pris cette partie du code

   int CountOpenOrders = 0;
   double Candle23Open; 
   int Spread = MarketInfo(Symbol(), MODE_SPREAD);
   
   Candle23Open = Open[ iBarShift(NULL, 0, StrToTime("23:00") ) ]; // price value of the Open of the 23:00 hour candle
   
   for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
      {
      if(OrderSelect(iPos,SELECT_BY_POS) && 
         OrderMagicNumber() == MagicNumber &&
         OrderSymbol() == Symbol() &&
         OrderType() < 2               //  less than 2 is either OP_BUY (0) or OP_SELL (1) 
         )
      CountOpenOrders++;
      } // end of for(int iPos  

   if(CountOpenOrders == 2)  //  we have 2 open orders,  should we modify or have the already been modified ?
      {
      for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
         {
         if(OrderSelect(iPos,SELECT_BY_POS) && 
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol() 
            )
            {
            if(OrderType() == 1)               //  OP_SELL (1)  
               {
               if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
               }
            
            if(OrderType() == 0)               //  OP_BUY (0)
               {
               if(OrderTakeProfit() < Candle23Open + ((TakeProfitModified - 1) * Point) )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + (TakeProfitModified * Point), 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

et je l'ai placée dans l'EA précédent (l'original) et elle ouvre les ordres mais ne les modifie pas. Bien que je pense que si l'erreur OrderSend était corrigée dans l'EA que vous avez fourni, cela pourrait fonctionner.

Oh et dans cette partie,

if(!OrderModify

A quoi sert le !

Merci beaucoup,

madmax3

 
madmax3:


Oh et dans cette partie,

A quoi sert le !

Merci beaucoup,

madmax3

Avez-vous consulté la documentation relative à OrderModify() ? Qu'est-ce qu'elle renvoie ?
 
madmax3:

Je reçois le message 'OrderSend error 130' pour une raison quelconque, même si le SL et le TP semblent être corrects et que les 'OrderSend' sont disposés de la même manière que le code précédent. Pourquoi cela se produit-il ?

Avez-vous ajusté votre TP et SL pour tenir compte d'un courtier à 5 chiffres ? Votre courtier est-il un courtier à 5 chiffres ?
 

J'ai réussi à le faire fonctionner, j'ai juste oublié de remplir une variable (distance entre le ask et le bid). La documentation de OrderModify n'explique pas le ! Je crois.
Le code semble bien fonctionner, un problème cependant est qu'il ne modifie que les trades d'achat lorsque deux trades sont ouverts et pas les trades d'achat et de vente, je ne suis pas sûr de savoir pourquoi il fait cela. Une idée ?

Merci,

madmax3

 
madmax3:

J'ai réussi à le faire fonctionner, j'ai juste oublié de remplir une variable (distance entre le ask et le bid). La documentation de OrderModify n'explique pas le ! Je crois.
Le code semble bien fonctionner, un problème cependant est qu'il ne modifie que les trades d'achat lorsque deux trades sont ouverts et non les trades d'achat et de vente, je ne suis pas sûr de la raison pour laquelle il fait cela.

Merci,

madmax3

OrderModify retourne un bool . . . donc ! par rapport à un bool est NOT . . . donc !OrderModify() signifie . . . si OrderModify retourne false, c'est à dire échoue.

Je vais jeter un autre coup d'oeil à votre code . ... ou ma modification.

 
madmax3:

J'ai réussi à le faire fonctionner, j'ai juste oublié de remplir une variable (distance entre le ask et le bid). La documentation de OrderModify n'explique pas le ! Je crois.
Le code semble bien fonctionner, mais il y a un problème : il ne modifie que les transactions d'achat lorsque deux transactions sont ouvertes, et non les transactions d'achat et de vente, je ne sais pas pourquoi. Une idée ?

Merci,

madmax3


Voulez-vous qu'il modifie le StopLoss pour les transactions d'achat et de vente avec le même pip ?

Réfléchissez à nouveau si c'est ce que vous voulez et si vous pouvez comprendre pourquoi il ne se modifie pas de cette façon.....

Ne modifiez pas non plus les trades avec chaque nouveau point dans la bonne direction, choisissez un pas de retard pour permettre la modification (xx Points peut choisir 10 ou plus pour éviter beaucoup d'erreurs de tradecontext trop occupé).

" !" est quelque chose comme pas dans le codage

 
madmax3:

Le code semble bien fonctionner, mais il y a un problème : il ne modifie que les transactions d'achat lorsque deux transactions sont ouvertes et non pas les transactions d'achat et de vente, je ne sais pas pourquoi. Je ne sais pas trop pourquoi.

Vérifiez les journaux pour voir s'il y a des erreurs... Si vous utilisez le testeur de stratégie, vérifiez l'onglet journal, si vous êtes en mode réel ou démo, vérifiez l'onglet experts. Faites-moi savoir ce que vous trouvez...
 
RaptorUK:
Vérifiez que les journaux ne contiennent pas d'erreurs... Si vous utilisez le testeur de stratégie, vérifiez l'onglet journal, si vous êtes en mode réel ou démo, vérifiez l'onglet experts. Faites-moi savoir ce que vous trouvez...
2012.04.09 21:21:27 2012.01.17 00:59 Testeur : ordre #1, vendre 0.01 EURUSD est ouvert à 1.26498
2012.04.09 21:21:27 2012.01.17 02:21 Testeur : ordre n°2, achat 0.01 EURUSD est ouvert à 1.26795

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1 : modify #2 buy 0.01 EURUSD at 1.26795 sl : 1.26218 tp : 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1 : modifier #2 achat 0.01 EURUSD à 1.26795 sl : 1.26218 tp : 1.27480 ok

Pour une raison quelconque, il modifie l'ordre d'achat deux fois (la deuxième modification va au TP requis, mais sur certaines transactions il semble continuer à modifier à certaines heures entières comme 9:00 ou 10:00), il ne semble pas y avoir d'erreurs réelles en tant que telles.