Fermeture des demi-lots. - page 15

 
J'utilise ceci ? Si l'on ajoute à cela "if(OpenOrdersThisPair(Symbol())>0) " ci-dessus, cela devrait permettre de séparer les EA de chaque paire ? Je vois ce que vous voulez dire. Avez-vous des suggestions sur la façon dont je peux distinguer une transaction qui a été divisée par deux de celle qui ne l'a pas été en utilisant OrderOpenTime() ? Un petit coup de pouce dans la bonne direction... ?

//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Check to see if any order open on this currency pair                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

int OpenOrdersThisPair(string pair)
  {
   int total=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==pair) total++;
     }
   return(total);
  }
 
DomGilberto:
J'utilise ceci ? Si on ajoute à cela "if(OpenOrdersThisPair(Symbol())>0)" ci-dessus, cela devrait permettre de séparer les EA de chaque paire ?

Non, supposons que vous ayez 2 EA en cours d'exécution et que chacun ait un ordre ouvert, vous avez une chance sur deux que le dernier OrderSelected() par la fonction OpenOrdersThisPair() ne soit pas le bon... la fonction renverra un ordre mais vous pourriez bien avoir le mauvais ordre sélectionné.
 
Pardonnez-moi, mais je ne comprends pas comment cela peut être vrai ? Je m'assure que le OrderSymbol()==pair ? Donc l'EA concerné qui est attaché à EURUSD, le détecterait s'il s'agit de l'ordre sélectionné sur EURUSD ?
 
Est-ce que ça va régler le problème ? Dans le journal, il me dit ceci ? Qu'en est-il de "OrderSymbol()==OrderSymbol()" ? si c'est CE symbole... je ne sais pas si c'est débile ou pas...

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

         if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice() && OrderSymbol()==OrderSymbol()) // lol? If this symbol is, this symbol...
               {
               CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
               }
            
2013.08.08 18:51:21	2010.02.08 01:00  Trend Fishing 3 Exits GBPJPY,H1: The Symbol is: GBPJPY

 

Ah ! et si je comparais l'OrderCloseTime() et l'OrderOpenTime() ?

Ce serait sûrement la MEILLEURE façon de faire ce que je veux ? De cette façon, je peux ajouter autant de fonctions OrderClose que je veux ? Après tout, je pourrais simplement sélectionner la transaction dans l'historique qui a le même OrderOpenTime() que l'"OP_BUY" actuel, mais si l'OrderCloseTime() > OrderOpenTime(), alors cela empêcherait l'OrderClose() de fermer les moitiés en permanence !

Quelqu'un peut me dire que j'ai quelque chose à faire ici :( haha.

 
DomGilberto:
Pardonnez-moi, mais je ne comprends pas comment cela peut être vrai ? Je m'assure que l'OrderSymbol()==paire ? Ainsi, l'EA concerné qui est attaché à l'EURUSD, détectera l'ordre sélectionné sur l'EURUSD ?

Vous commencez par OrderSelect()... puis vous vérifiez....

if(OrderSymbol()==pair) total++;

... et c'est très bien pour cette fonction, si les symboles ne correspondent pas, vous n'incrémentez pas le compte ... mais cela signifie toujours que le dernier ordre que vous avez sélectionné n'était pas pour le symbole sur lequel vous travaillez.

Vous avez besoin d'une boucle supplémentaire pour trouver un ordre valide et sortir de la boucle... alors vous avez l'ordre correct sélectionné.

 
Je suis confus, j'ai testé mon EA sur 16 paires différentes, simultanément cette semaine et il n'a jamais sélectionné la mauvaise paire :s ? Est-ce que je rate quelque chose ?
 
DomGilberto:
Je suis confus, j'ai testé mon EA sur 16 paires différentes, simultanément cette semaine et il n'a jamais sélectionné la mauvaise paire :s ? Est-ce que quelque chose m'échappe ?
Pour autant que je puisse voir, il semble possible qu'il puisse sélectionner le mauvais ordre, je le corrigerais pour être certain plutôt que de le risquer. Vérifiez votre code, si cela ne peut pas arriver alors vous n'avez pas besoin de le corriger.
 

DomGilberto:
I thought that too - It says I need OrderSelect() before using OrderType, but it works? I only ever have one order open at any given time...

I can't think of how to use OrderOpenTime() to my advantage and stop CloseHalfOrder being called every time...

EA ferme partiellement un ordre, EA doit savoir quel ordre ne doit pas être fermé partiellement à nouveau, donc récupérer OrderOpenTime() avant de fermer partiellement. Codez l'EA pour qu'il ne ferme pas partiellement les ordres sur cette paire de devises avec ce même OrderOpenTime().

 
SDC:

EA ferme partiellement un ordre, EA doit savoir quel ordre ne doit pas être fermé partiellement à nouveau, donc récupérer OrderOpenTime() avant de fermer partiellement. Codez l'EA pour qu'il ne ferme pas partiellement les ordres sur cette paire de devises avec ce même OrderOpenTime().


Oui, je commence à y arriver maintenant - je suppose que je dois comparer avec les transactions qui ont été clôturées dans l'historique sur le même OrderSymbol() ?

Le problème que j'ai cependant est que j'essaie de clôturer partiellement le même "OP_BUY" ou "OP_SELL" jusqu'à 4 fois à des prix différents... Je pense que la question que je devrais poser est la suivante : puis-je obtenir un moyen par lequel j'ai une règle selon laquelle TOUTES les clôtures partielles (de n'importe quels lots et prix sur UNE transaction donnée) ne seront clôturées partiellement qu'UNE SEULE fois avec leurs paramètres prédéfinis "OrderClose()"...

La façon dont je cherche à le faire maintenant en comparant l'OrderOpenTime() ne fonctionnera essentiellement qu'une seule fois, et empêchera tout autre type de fonction OrderClose() de se produire du tout... Je veux trouver un moyen d'appliquer une règle à 4 fonctions OrderClose()... (si cela a un sens ?)

Je sais que les gens suggèrent d'ouvrir 4 ordres, mais sans aller trop loin, c'est moins efficace pour moi de le faire de cette façon.