Comment créer un tableau de nombres magiques ? - page 2

 
7bit:
Veuillez décrire en gros ce que votre EA va faire. Combien de types d'ordres différents doivent être gérés séparément? Peut-être que votre problème n'est pas un problème du tout si nous savons ce que vous essayez réellement de réaliser.


Je veux avoir une étiquette unique comme un numéro magique lorsque je passe un ordre. Pas de nombre fixe de commandes.

Chaque nouvelle commande doit être traitée comme un nouveau groupe et doit être gérée séparément.

int ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green)
&   ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green);

Au lieu de fixer 12345, je voudrais que le numéro magique s'incrémente avec chaque nouvelle commande comme 1, puis la prochaine commande 2, puis 3, puis 4, etc.

De plus, l'OrderSend est dans une fonction qui ne boucle pas. Comment faire quelque chose comme ça ?

Par exemple, un tableau dynamique[i] ?

Lorsque j'essaie de fermer, je pourrais passer par OrdersTotal() et chaque numéro magique unique du tableau [i] ? ?? Et les fermer dans le même groupe lorsque la condition est remplie.

 
7bit:
Veuillez ne pas recommander de telles absurdités. Le nombre magique n'est pas destiné à stocker des valeurs qui sont déjà contenues dans l'ordre lui-même.

pouvez-vous me montrer où se trouve exactement l'ordre Période() ; ?
 
qjol:
pouvez-vous s'il vous plaît me montrer où exactement est contenu dans l'ordre Période() ; ?

Il ne l'est pas.

IMHO, si vous ne prévoyez pas d'utiliser d'autres experts avec celui-ci, et ne prévoyez pas de le donner, alors vous pouvez utiliser le numéro magique pour stocker tout ce que vous voulez...

 
qjol:

pouvez-vous me montrer où se trouve exactement l'ordre Period() ; ?
Que signifie OrderPeriod() ???
 
gordon:

Ce n'est pas le cas.

IMHO, si vous ne prévoyez pas d'utiliser d'autres experts avec celui-ci, et si vous ne prévoyez pas de le donner, alors vous pouvez utiliser le numéro magique pour stocker ce que vous voulez...


Peut-être une fonction pour stocker le nombre magique incrémentiel.

Avant chaque OrderSend, exécuter la fonction pour savoir quel numéro magique sera attribué ensuite.

Une idée sur la façon de faire une fonction comme celle-ci ?

 
johnnybegoode:

Une idée de comment créer une fonction de ce type ?

Il y a un exemple relativement complexe dans cet article -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.
 
gordon:
Il existe un exemple relativement complexe dans cet article -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.


Merci !
C'est vraiment complexe, y a-t-il une méthode plus simple ?
 
johnnybegoode:


J'aimerais que le nombre magique s'incrémente à chaque nouvelle commande, comme 1, puis 2, puis 3, puis 4, etc.

Mais cela ne garantirait-il pas que vous n' ayez jamais deux ordres avec le même numéro unique ? Vos "groupes" ne comporteraient qu'une seule transaction par groupe ? Est-ce que je vous ai bien compris ?

Vous avez expliqué ce que vous voulez faire (tableau de MN, etc.) en vous basant sur ce que vous considérez comme la seule solution au problème mais vous n'avez toujours pas expliqué le problème lui-même, comment le système de trading est censé décider quels ordres fermer et lesquels garder. Comment cela fonctionnerait-il si l'on voulait trader manuellement, peut-être existe-t-il un système de trading disponible publiquement qui soit suffisamment similaire à celui-ci pour expliquer le concept, pour rendre clair le type de système dont il s'agit ?

Par exemple, "habituellement" (très souvent) on essaie de fermer les ordres qui remplissent certaines conditions qui peuvent être déterminées à partir de l'ordre lui-même, par exemple "l'ordre le plus ancien", "x pips de profit", "break even", "x pips de perte", etc. et le nombre magique est seulement utilisé pour distinguer les propres trades et les trades de EA complètement différents.

Pourrait-on trader (continuer à trader) ce système manuellement si l'on regardait simplement le graphique avec les ordres déjà ouverts et *sans* que des identifiants y soient inscrits ?

Qu'y a-t-il dans votre système pour que vous ayez besoin d'un seul ID d'un seul ordre uniquement pour décider si l'ordre doit être fermé ? Et pourquoi ne pouvez-vous pas utiliser le numéro de ticket lui-même si chaque ordre est unique de toute façon ?

En savoir plus sur ce sujet permettrait de prendre du recul et de voir l'ensemble sous un angle différent et peut-être de trouver une solution beaucoup plus élégante et plus facile.

 
7bit:

Mais cela ne garantirait-il pas que vous n' ayez jamais deux ordres avec le même numéro unique ? Vos "groupes" ne comporteraient qu'une seule transaction par groupe ? Est-ce que je vous ai bien compris ?

Vous avez expliqué ce que vous voulez faire (tableau de MN, etc.) en vous basant sur ce que vous considérez comme la seule solution au problème mais vous n'avez toujours pas expliqué le problème lui-même, comment le système de trading est censé décider quels ordres fermer et lesquels garder. Comment cela fonctionnerait-il si l'on voulait trader manuellement, peut-être existe-t-il un système de trading disponible publiquement qui soit suffisamment similaire à celui-ci pour expliquer le concept, pour rendre clair le type de système dont il s'agit ?

Par exemple, "habituellement" (très souvent) on essaie de fermer les ordres qui remplissent certaines conditions qui peuvent être déterminées à partir de l'ordre lui-même, par exemple "l'ordre le plus ancien", "x pips de profit", "break even", "x pips de perte", etc. et le numéro magique est seulement utilisé pour distinguer les propres trades et les trades de EA complètement différents.

Pourrait-on trader (continuer à trader) ce système manuellement si l'on regardait simplement le graphique avec les ordres déjà ouverts et *sans* que des identifiants y soient inscrits ?

Qu'y a-t-il dans votre système pour que vous ayez besoin d'un seul ID d'un seul ordre uniquement pour décider si l'ordre doit être fermé ? Et pourquoi ne pouvez-vous pas utiliser le numéro de ticket lui-même si chaque ordre est unique de toute façon ?

En savoir plus sur ce sujet permettrait de prendre du recul et de voir l'ensemble sous un angle différent et peut-être de trouver une solution beaucoup plus élégante et plus facile.


"Mais cela ne garantit-il pas que vous n' aurez jamais deux commandes avec le même numéro unique"

Oui, il est possible d'avoir 2 ou plusieurs commandes avec un numéro unique. Faites l'incrément après les commandes groupées

 

Jon cette fonction émet des numéros uniques

//+------------------------------------------------------------------+
//| Function..: SequenceNumber                                       |
//| Purpose...: Generate a sequential number.                        |
//| Returns...: dSeqNum - next sequence number.                      |
//| Notes.....: MT4 keeps the value of the global variable at the    |
//|             client terminal for 4 weeks since the last access.   |                        
//|             Use SequenceNumber() to generate a unique identity   |
//|             for each order (and passed via parameter <magic>     |
//|             number, or converted to a string and passed via the  |
//|             parameter <comment> to the OrderSend() function) as  |
//|             the trade servers of some brokers do modify the      |
//|             ticket number of a pending order when it changes to  |
//|             a market order.                                      |
//|             The same sequence number could, for example, be used |
//|             to identify the two positions of a straddle order.   |
//|             ******************************************************
//|             * If the expert has to close partial lots, then MT4  *
//|             * retains in the new order the contents of the       *
//|             * OrderMagicNumber() but loses OrderComment().       *
//|             ******************************************************
//| Sample....: string sNumber=DoubleToStr(SequenceNumber(),0);      |
//|             if(OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point,   |
//|                          Ask+25*Point,sNumber,16384,0,Green) > 0)|
//|                OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point,   |
//|                          Ask+65*Point,sNumber,16384,0,Green);    |
//+------------------------------------------------------------------+
double SequenceNumber() {
  double dSeqNum=1, d;
  string sName="SequenceNumber";

  while(GlobalVariableCheck("Semaphore")) d+=0;
  GlobalVariableSet("Semaphore",1);
  if(GlobalVariableCheck(sName)) dSeqNum=GlobalVariableGet(sName)+1;
  GlobalVariableSet(sName,dSeqNum);
  GlobalVariableDel("Semaphore");
  return(dSeqNum);
}
Raison: