Veuillez me guider en ce qui concerne la répartition - page 4

 
deysmacro:
Vous devez cependant vous rappeler. L'EA ferme uniquement les transactions en cours. Vous devez ouvrir la transaction vous-même.

100%, pas de problème, c'est exactement ce que j'essaie de faire... Je ne veux pas que l'EA ouvre une transaction, c'est MON travail... Je veux juste qu'il la ferme si plus de 2 ordres sont ouverts avec un profit X et qu'il tienne compte du spread ! Lentement, j'y arrive... cette programmation aurait dû être enseignée à l'école... dommage, je suis des années 80, je n'ai jamais pensé que je devrais passer par là, mais plus je lis le fichier d'aide, plus je trouve cela intriguant... aussi, ce forum a beaucoup d'aide, grâce à des gars comme vous.
 
tatyawinchu:

Et si je pouvais ajouter une boucle IF et ensuite coller le reste du code ci-dessous qui démarre la boucle ?

La condition IF doit vérifier que le total des commandes est => 2 afin que le contrôle soit transmis pour fermer tous les ordres ouverts à un profit X après le spread ?



Je ne suis pas sûr de ce que vous voulez vraiment dire par " Lacondition IF devrait vérifier que le OrdersTotal est => 2 afin que le contrôle soit passé pour fermer tous les ordres ouverts à un profit X après le spread ".

mais je suis presque sûr que rien de vraiment mauvais ne se produira si vous essayez. Et si cela ne fonctionne pas, il n'y a rien à perdre. Au moins, vous aurez essayé.

 
tatyawinchu:

100%, pas de problème, c'est exactement ce que j'essaie de faire... Je ne veux pas que l'EA ouvre une transaction, c'est MON travail... Je veux juste qu'il la ferme si plus de 2 ordres sont ouverts avec un profit X et qu'il tienne compte du spread ! Lentement, j'y arrive... cette programmation aurait dû être enseignée à l'école... dommage, je suis des années 80, je n'ai jamais pensé que je devrais passer par là, mais plus je lis le fichier d'aide, plus je trouve cela intriguant... aussi, ce forum a beaucoup d'aide, grâce à des gars comme vous.

Il suffit d'inclure "spread" dans "totalprofit".
 
thrdel:


Je ne suis pas sûr de ce que vous voulez dire par "La condition IF devrait vérifier que le OrdersTotal est => 2 afin que le contrôle soit passé pour fermer tous les ordres ouverts à un profit X après spread".

mais je suis presque sûr que rien de vraiment mauvais n'arrivera si vous essayez. Et si cela ne fonctionne pas, il n'y a rien à perdre. Au moins, vous aurez essayé.


Je ne suis pas sûr de ce que vous voulez dire par "La condition IF devrait vérifier que le OrdersTotal est => 2 afin que le contrôle soit passé pour fermer tous les ordres ouverts à X profit après le spread".

Hmm... Ok, ce que je veux dire c'est que

SI ... le nombre total d'ordres ouverts est supérieur ou égal à 2 ... alors seulement allez-y et suivez le reste du code...

SI le nombre total d'ordres ouverts [ OrdersTotal() ? ? ] ... est inférieur à 2 ... ce qui signifie que c'est soit 1 soit 0, alors ne faites rien ....

Maintenant, voici un problème pour moi, le fichier d'aide de mql 4 dit que OrdersTotal() compte tous les ordres, marché ET en attente ... J'essaie de chercher une fonction qui peut obtenir seulement les ordres du marché en direct, pas ceux en attente, OU, il peut être calculé mathématiquement comme la plupart du temps je n'ai que 2 trades maximum en cours d'exécution à la fois de toute façon.

Cette explication est-elle plus claire ?

Merci pour le temps que vous m'accordez.

 

thrdel veut que vous essayiez d'abord et voyez ce qui se passe, bien que je sois assez sûr de ce qui pourrait se passer.

 
deysmacro:

thrdel veut que vous essayiez d'abord et voyez ce qui se passe.



Oui, je consulte le fichier d'aide pour trouver la fonction appropriée qui ne donne que les ordres ouverts.
 
Montrez-nous votre code lorsque vous aurez réussi à le compléter et nous vous aiderons si nous le pouvons.
 
deysmacro:
Montrez-nous votre code lorsque vous réussirez à le compléter et nous vous aiderons si nous le pouvons.

Bien reçu ! Merci beaucoup...

..

et je n'ai pas réussi à trouver une fonction qui ne renvoie que les transactions ouvertes ... C'est ok, donc j'ai ajouté la boucle IF comme ci-dessous ...

//+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link      "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target=100;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! ";
                                          
int Slippage=5;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()

//+------------------------------------------------------------------+
//| This is just the single line of code that I have added
//+------------------------------------------------------------------+
{ 
 if (OrdersTotal()>=2)

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
          {
          //Close opened long positions
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Pink);
                         break;
               
          //Close opened short positions
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Pink);
                          
          }
          
       if(result == false)
          {
            Sleep(0);
          }  
       }
      Print ("Account Profit Reached. All Open Trades Have Been Closed");
      return(0);
   }  
   
   Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(),
           "\nMy Account Profit Target: ",My_Money_Profit_Target);
   
  return(0);
   }
 }

J'ai ajouté la condition IF au début qui va si (OrdersTotal()>=2) ... [ Surligné dans le code ci-dessus avec le commentaire ].

Maintenant, il y avait un problème pour fermer les {} car lors de ma première tentative, j'ai essayé comme suit

{ 
 if (OrdersTotal()>=2)
}

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       { .. etc etc 
     

donc en tant que codeur débutant, j'ai essayé de mettre cette condition if pour être vérifiée EN PREMIER... ça n'a pas compilé...

J'ai donc fermé le {} en mettant la condition à l'intérieur... maintenant il a compilé avec seulement 2 avertissements et aucune erreur...

La valeur de retour de 'OrderSelect' devrait être vérifiée Testcode 1.mq4 56 8

Tous les chemins de contrôle ne retournent pas une valeur Testcode 1.mq4 86 2

Donc, il compile ... est-il logiquement correct ?

[Je n'enlève pas les informations de copyright, j'ajoute juste une ligne, enlever ses détails serait totalement injuste de ma part... quelle est la règle à ce sujet ? ]

 
tatyawinchu:

Oui, j'ai parcouru le fichier d'aide pour trouver la bonne fonction qui ne donne que les ordres ouverts.


Vraiment désolé, comme je l'ai déjà dit, je ne suis pas très bon pour expliquer. Je comprends que vous voulez trouver une fonction qui ne comptera que les ordres d' achat ou de vente ouverts, je vous ai demandé de regarder mon code, je vous l'ai expliqué au mieux de mes capacités et je n'ai pas été aussi bon que je l'espérais .

Tu te souviens de la première étape que j'ai mentionnée à propos de ce code ?

C'était : CountMyOrders. Maintenant, si vous regardez le code comme je vous l'ai demandé, voici ce que vous allez trouver.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }

Il est écrit :

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

Vous devez savoir ce que signifie OP_BUY et OP_SELL.

Il n'y a pas d'ordres en attente, pas de stop d'achat ouvert, pas de stop de vente ouvert, pas de limite d'achat ou de vente, juste un achat ouvert et une vente ouverte.

Comment mieux expliquer ce morceau de code et ce qu'il fait ?

Vous pouvez continuer à chercher dans la documentation et vous familiariser avec elle, mais je peux vous dire que la fonction que vous recherchez n'est pas là.

Mon EA dit que s'il n'y a pas encore d'ordres, il faut attendre :

if(myOrders<1)

Vous voulez que votre attende 2 ordres. Si vous aviez prêté un peu d'attention à ce que j'ai dit, vous auriez probablement remarqué que tout ce que vous devez faire est :

if(myOrders<2)

Voilla. Maintenant, il attend que les 2 ordres soient en place - pas d'attente, seulement achat ou vente !

Comprenez bien que j'ai essayé d'assembler ce code pour qu'il convienne à d'autres personnes qui pourraient chercher un moyen de gérer des transactions ouvertes, et non pour qu'il soit conçu dans un but précis.

Il est destiné à servir d'exemple, prenez ce que vous pensez être bon, laissez le reste de côté, améliorez-le, changez-le, apprenez de lui si vous le pouvez et expérimentez avec lui.

J'espère que cela a du sens.

 
thrdel:


Vraiment désolé, comme je l'ai déjà dit, je ne suis pas très bon pour expliquer. Je comprends que tu veuilles trouver une fonction qui ne comptera que les ordres d'achat ou de vente ouverts, je t'ai demandé de regarder mon code, je te l'ai expliqué au mieux de mes capacités et je n'ai pas été aussi bon que je l'espérais .

Tu te souviens de la première étape que j'ai mentionnée à propos de ce code ?

C'était : CountMyOrders. Maintenant, si vous regardez le code comme je vous l'ai demandé, voici ce que vous allez trouver.

Il est écrit :

Vous devez savoir ce que signifie OP_BUY et OP_SELL.

Il n'y a pas d'ordres en attente, pas de stop d'achat ouvert, pas de stop de vente ouvert, pas de limite d'achat ou de vente, juste un achat ouvert et une vente ouverte.

Comment mieux expliquer ce morceau de code et ce qu'il fait ?

Vous pouvez continuer à chercher dans la documentation et vous familiariser avec elle, mais je peux vous dire que la fonction que vous recherchez n'est pas là.

Mon EA dit que s'il n'y a pas encore d'ordres, il faut attendre :

Vous voulez que votre attende 2 ordres. Si vous aviez prêté un peu d'attention à ce que j'ai dit, vous auriez probablement remarqué que tout ce que vous devez faire est :

Voilla. Maintenant, il attend que les 2 ordres soient en place - pas d'attente, seulement achat ou vente !

Comprenez bien que j'ai essayé d'élaborer ce code pour qu'il convienne à d'autres personnes qui pourraient chercher un moyen de gérer des transactions ouvertes, et non pas pour qu'il soit conçu dans un but précis.

Il est destiné à servir d'exemple, prenez ce que vous pensez être bon, laissez le reste de côté, améliorez-le, changez-le, apprenez de lui si vous le pouvez et expérimentez avec lui.

J'espère que ça a du sens.

Merci beaucoup ... D'abord, ce n'est pas vous ! c'est moi ! hehe je suis le débutant ici ... vos explications sont parfaites ! juste un peu difficile à digérer pour le moment car je vais étape par étape ... mot par mot à travers les fichiers d'aide =) et demander de l'aide quand je suis bloqué ... Plutôt, maintenant grâce à votre code, je lis la section FONCTION dans le fichier d'aide ! ! En outre, pourriez-vous compiler le code que j'ai collé ci-dessus à votre extrémité et voir s'il y a quelque chose de mal dans la logique de cette condition IF ? Imaginons que cet EA soit exécuté alors qu'aucun ordre n'est ouvert, que le premier ordre soit ouvert et qu'un peu plus tard un autre ordre soit déclenché... le flux logique de cette condition IF est-il correct ? Aussi, je suis maintenant presque sûr que ce code a juste besoin d'une ligne de correction ou autre[Aussi, j'ai abandonné l'idée de poster ceci comme un travail...], je n'ai pas besoin de le compliquer pour scanner si oui ou non il faut omettre les ordres d'autres EAs parce que pour moi ce sera le seul EA en cours d'exécution, donc je n'ai pas besoin d'assigner spécifiquement un numéro magique à chaque ordre etc... maintenant j'ai juste besoin de découvrir si la logique de mon IF est correcte ^^
Raison: