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

 
EA starts 
---> Does nothing till there is 0 or 1 order 
----> Makes a 'call open sound' when 2nd order gets triggered 
----> Closes both orders at X amount of pure profit [after considering spread] and makes a 'call close sound' ]

of course, call open and call close sound files can be any small wave files.. easily available on mt4 itself. .. 
I think these things can be achieved in the above EA that I had posted by changing a few things !
Wow ... ce que vous voulez est en fait assez facile à coder.
 
deysmacro:
Wow ... ce que vous voulez est en fait assez facile à coder.


Pouvez-vous me guider ? J'ai déjà ceci sur le web

//+------------------------------------------------------------------+
//|                    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()
{
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);
}

Maintenant, j'ai bien précisé que je ne suis pas un codeur, mais je pense que j'ai besoin d'une ligne en dessous de "int start() " qui compte le nombre d'ordres EXÉCUTÉS [non en attente] et passe ensuite au code suivant seulement s'ils sont au nombre de 2 et exécute le reste du code... if (AccountProfit()>= My_Money_Profit_Target)... etc...

n'est-ce pas ? Comment dire une telle ligne en MQL ?

int start()
{
 {
   if (Ordertotal()<=1)  ------>   See , something here which says only execute lower code if total executed orders are two else dont go to lower code.. I know that syntax is totally busted, trying to push the concept                                                                                                             
                                   as a weak non coder mind ;( .. so till total open orders are less than or equal to 1 means not 2, the code below that line wont come into play !         

      if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
 
thrdel:

Oui deVries,

tout échoue et je ne devrais pas faire cela si vous le dites, mais puisque je ne vois vraiment pas beaucoup d'aide dans votre réponse ......

Vous comprenez bien que le code n'est pas un EA commercial destiné à être vendu à un client difficile, n'est-ce pas ? Nous essayons de trouver une solution et si vous ne voulez pas nous aider, vous devriez au moins laisser tomber.

Vous pensez vraiment que si je change le délai plusieurs fois..... quoi ? Le slippage sera de 3000000 ? Pas dans mon MT4 apparemment. Et si vous ne me croyez pas, faites un test vous-même.

Mon test dit que lorsque vous changez les cadres temporels, l'EA passe par le cycle deinit/init et puisque le code mentionné est dans le OnInit, le Slippage sera juste à 30 points à chaque fois.

Comme tout le monde peut le voir, changer de time frame n'amènera pas le Slippage à un million, si c'est ce que vous suggérez.

Et non, ce n'est pas une fausse image, elle est réelle, vous pouvez vérifier le temps de changement de chaque cadre temporel.

J'espère que cela vous aidera.


ceci échoue .....

pour beaucoup de transactions le prc n'est pas le bon prix

qu'est-ce que vous avez à dire à ce sujet...

lire Double appels à OnInit() et OnDeinit()

il y a des problèmes avec les nouvelles versions

(Le problème du double appel à OnInit() semble avoir été corrigé dans la version 628, mais je n'ai pas encore trouvé cette version).

 
deVries:

ceci échoue .....

pour beaucoup de métiers, le prc n'est pas le bon prix

qu'est-ce que vous avez à dire à ce sujet...

hehehe, maintenant vous deux êtes allés profondément dans le terrier du lapin et discutez de quelque chose qui fait voler des oiseaux au-dessus de ma tête ! xD ... pourriez-vous s'il vous plaît regarder cette ligne de code boiteuse que j'ai ajouté ? =D

 
tatyawinchu:

hehehe, maintenant vous vous êtes enfoncés dans le terrier du lapin et vous discutez de quelque chose qui fait voler des oiseaux au-dessus de ma tête ! xD ... Pourriez-vous s'il vous plaît regarder cette ligne de code boiteuse que j'ai ajoutée ? =D


Correct Ask et Bid sont les prix de chartSymbol si le trade est un autre symbole le closingprice est faux.

       if(result == false)
          {
            Sleep(0);
          }  

Quel effet cela aura-t-il ?

Est-ce que ça échoue ? ?? OrderType est une transaction en attente ? ??

ou la fermeture échoue

Dans ce cas, vous devez obtenir la dernière erreur GetLastError() pour connaître la raison.

 
tatyawinchu:

EA démarre ---> Ne fait rien jusqu'à ce qu'il y ait 0 ou 1 ordre ----> Fait un 'son d'ouverture d'appel' quand le 2ème ordre est déclenché ----> Ferme les deux ordres à un montant X de profit pur [après avoir considéré le spread] et fait un 'son de fermeture d'appel' ]

Bien sûr, les fichiers sonores d'ouverture et de fermeture de l'appel peuvent être de petits fichiers d'ondes... facilement disponibles sur mt4 lui-même. ... Je pense que ces choses peuvent être réalisées dans l'EA ci-dessus que j'avais posté en changeant quelques choses ! hehehe aidez-moi plz =D

Salut tatyawinchu,

Je crois que tu n'as pas bien compris ce que fait l'EA que tu as posté. Laissez-moi vous guider pas à pas et vous pourrez décider si vous pouvez ou non l'utiliser pour vos besoins.

Le stop loss basé sur le compte est là pour protéger quiconque veut l'utiliser et je ne recommanderais jamais d'être sur le marché sans au moins un stop d'urgence, si vous avez 10 000 sur votre compte et que vous voulez tout risquer, réglez simplement le StopLossLimit à 10 000.

Votre décision.

Maintenant, revenons au code, c'est aussi simple que 1, 2, 3 :

1. Si vous lisez le code dans la fonction OnTick - c'est la partie qui est exécutée à chaque tick - vous verrez que la première chose qu'il fait est : CountMyOrders. J'espère que vous avez compris. Ensuite, si myOrders <1, cela signifie qu'il n'y a pas encore d'ordres, il vérifie l'équité du compte, s'en souvient et c'est tout.

Ne fait rien d'autre. Au prochain tick, si toujours pas d'ordres, retour à l'attente. Plutôt ennuyeux d'être un EA, n'est-ce pas ?

2) Quand un ordre est placé, myOrders<1 n'est plus vrai, donc au prochain tick, il passe à la ligne suivante et calcule le profit pour l'ordre ou les ordres qui sont sur le marché.

Ensuite, il compare la somme des profits de tous les ordres avec le profit cible.

Facile, n'est-ce pas ? Si le profit atteint l'objectif, la ligne suivante indique : ExitAll . Et une alerte (avec son) apparaîtra à l'écran pour vous dire que les ordres ont atteint leur objectif !

Ce n'est pas si mal, non ?

Et j'ai oublié de mentionner que si le marché va contre vous et que la perte d'équité atteint le niveau prédéfini, il vous sortira du marché pour protéger le capital restant.

Et c'est la meilleure aide que je puisse vous apporter.

Si vous avez besoin de plus que cela, c'est probablement un travail pour les gars qui font plus de code personnalisé que cela.

J'espère que cela vous aidera.

Au revoir

 
thrdel:

Bonjour tatyawinchu,

Je crois que vous n'avez pas bien compris ce que fait l'EA affiché. Laissez-moi vous guider pas à pas et vous pourrez décider si vous pouvez ou non l'utiliser pour vos besoins.

Le stop loss basé sur le compte est là pour protéger quiconque veut l'utiliser et je ne recommanderais jamais d'être sur le marché sans au moins un stop d'urgence, si vous avez 10 000 sur votre compte et que vous voulez tout risquer, réglez simplement le StopLossLimit à 10 000.

Votre décision.

Maintenant, revenons au code, c'est aussi simple que 1, 2, 3 :

1. Si vous lisez le code dans la fonction OnTick - c'est-à-dire la partie qui est exécutée à chaque tick - vous verrez que la première chose qu'il fait est : CountMyOrders. J'espère que vous avez compris. Ensuite, si myOrders <1, cela signifie qu'il n'y a pas encore d'ordres, elle vérifie l'équité du compte, s'en souvient et c'est tout.

Ne fait rien d'autre. Au prochain tick, si toujours pas d'ordres, retour à l'attente. Plutôt ennuyeux d'être un EA, n'est-ce pas ?

2) Quand un ordre est placé, myOrders<1 n'est plus vrai, donc au prochain tick, il passe à la ligne suivante et calcule le profit pour l'ordre ou les ordres qui sont sur le marché.

Ensuite, il compare la somme des profits de tous les ordres avec le profit cible.

Facile, n'est-ce pas ? Si le profit atteint l'objectif, la ligne suivante indique : ExitAll . Et une alerte (avec son) apparaîtra à l'écran pour vous dire que les ordres ont atteint leur objectif !

Ce n'est pas si mal, non ?

Et j'ai oublié de mentionner que si le marché va contre vous et que la perte d'équité atteint le niveau prédéfini, il vous sortira du marché pour protéger le capital restant.

Et c'est la meilleure aide que je puisse vous apporter.

Si vous avez besoin de plus que cela, c'est probablement un travail pour les gars qui font plus de code personnalisé que cela.

J'espère que cela vous aidera.

Salutations


Hmm... on dirait que nous nous éloignons les uns des autres...

Mon besoin exact est le suivant

Étape 1 L'EA démarre.

Étape 2 L'EA vérifie le profit du compte courant afin de connaître le point de départ du calcul.

Étape 3 L'EA vérifie les ordres ouverts en cours [non en attente].

Étape 4 L'EA ne fait rien s'il n'y a pas d'ordre en cours OU s'il n'y a qu'un seul ordre en cours.

Étape 5 EA émet un son lorsque le SECOND ordre est déclenché. Ce second ordre sera sur une autre paire.

Etape 6 L'EA ferme les DEUX ordres à un profit X après avoir pris en compte le SPREAD et fait un son.... ici LES DEUX devraient être TOUS les ordres ouverts ... il n'est pas nécessaire de supprimer les ordres en attente.

Ce dont l'EA n'a pas besoin... SL ou TP d'aucune sorte...

De préférence, l'EA devrait travailler sur des ordres de plus de deux, mais ce n'est pas nécessaire si c'est trop difficile...

[ Bien que logiquement je pense que ce ne sera pas difficile, plutôt très facile, car EA active la fermeture de tous les ordres ouverts s'ils sont PLUS DE 1 ... c'est 2 ou PLUS automatiquement ! donc cela peut être déjà couvert par EA... corrigez-moi si je me trompe].

 
deysmacro:
Wow ... ce que vous voulez est en fait assez facile à coder.

Tu es drôle. Subtil mais drôle.
 
thrdel:

Vous êtes drôle. Subtil mais drôle.

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 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 spread ?

Comment dire à l'EA de faire des notations dans certains cas ?

Disons que je fais ce qui suit

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start() 
{
if (OrdersTotal()=>2)                                     // Can this work? Can a function be directly called like this?
} 
{
 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)
Ok, cant seem to get out of this box yet ! hehe need to know forum stuff more ! but, as you can see above, if that "if (OrdersTotal()=>2)" is valid, it would directly solve my problems .. because the rest of
the stuff would be executed only if the total running market orders are 2 ! =D ..  and some forum guru please release this text from this src prison box ! ;)
 
Vous devez cependant vous rappeler. L'EA ferme uniquement les transactions en cours. Vous devez ouvrir la transaction vous-même.
Raison: