Fonction qui renvoie 2 résultats ? - page 4

 

gordon: It doesn't imply anything, but specifically in both C and C++ arrays are passed by reference as well (technically a pointer to the array's first element is passed, that pointer is passed by value).

Merci. J'ai aussi besoin de rafraîchir mes connaissances sur les pointeurs.

Matutin : Très intéressant ! Malheureusement, l'EA a besoin de paramètres, et parfois beaucoup, donc nous ne pouvons pas les éviter et devons faire attention pour toutes les raisons mentionnées dans https://www.mql4.com/go?http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

Pourquoi ne pas écrire dans un fichier et chaque EA peut les lire.

gordon : Cette discussion concerne les variables définies sur la portée globale (déclarées en dehors de la fonction spéciale start(), init(), deinit()) et non les GV's... Ne mélangez pas les deux.

Je dis toujours variables à portée globale & GlobalVariables pour éviter toute confusion. MT4 et MT5 peuvent faire mieux en utilisant une terminologie différente pour ces variables.

 
gordon:
Pourquoi résoudre un problème qui n'existe pas ? Pourquoi réinventer la roue ? Pourquoi inventer un code peu clair qui ne fonctionnerait que dans des cas limités ?


Eh bien parce que j'ai écrit une fonction qui fonctionne de cette façon, elle a plusieurs moyennes mobiles dans un tableau de 1 à 7, si l'une d'elles est traversée par une ligne de signal, elle prend l'index du tableau*1000 + la direction (0 pour la hausse, 1 pour la baisse) *100, ce qui renvoie un numéro d'identification unique pour chaque ordre qui contient trois informations.

Par exemple, un signal d'ouverture d'ordre avec le numéro 3100 est créé lorsque la troisième MA a été franchie à la baisse, le signal numéro 2000 est créé si la deuxième MA est franchie à la hausse.

Cela signifie que ma fonction de franchissement de ligne peut envoyer ce nombre à ma fonction d'ouverture d'ordres, car il contient maintenant 3 informations. Premièrement, il est lui-même le nombre magique, deuxièmement, ordertype = signal%1000/100 le résultat est un un ou un zéro décide si cela doit être un ordre de vente ou d'achat.

ensuite, le nombre magique contient des informations sur la ligne MA qui a été franchie pour générer l'ordre en premier lieu. int MA=nombre magique/1000 resultat est une valeur de 1 à 7 qui correspond à l'index du tableau original des moyennes mobiles.

troisièmement, le numéro magique est un identifiant unique pour chaque ordre et empêche l'ouverture de plusieurs ordres en raison de signaux répétés, car deux ordres avec le même numéro magique ne sont pas autorisés.

plus tard dans le programme, si je veux effectuer une opération basée sur le type d'ordre, je fais type=(magicnumber%1000)/100 ; si le résultat est 1, il s'agit d'un ordre de vente, s'il est zéro, il s'agit d'un ordre d'achat, si je veux savoir quelle ligne de MA a créé cet ordre, je fais int MA=magicnumber/1000 évidemment, l'internaute laisse tomber toute virgule flottante et me donne l'index original de MA de 1 à 7.

J'ai pensé que c'était une bonne façon de créer plus d'une information récupérable et utilisable à partir d'un seul retour de fonction.

 
SDC:

Eh bien parce que [...]

C'est génial, mais encore une fois - pourquoi ne pas simplement le faire de la manière directe, universelle, claire et bien acceptée. Pourquoi se donner tant de mal ? Ne pensez-vous pas que c'est plus simple ?

int  a,b;
void MyFunc( int& a, int& b )
   {
   //... function result should be 'passed' to a and b
 

Je ne sais pas, je suppose que cela aurait aussi fonctionné, cela m'a juste semblé être une bonne idée à l'époque, c'était principalement parce que je travaillais sur un EA pour gérer plusieurs stratégies de trading différentes en même temps, j'ai donc mis au point ce système pour gérer les ordres par numéros magiques en fonction des critères de trading auxquels ils appartenaient. Par exemple, vous pouvez clôturer tous les ordres de vente ouverts par un croisement de moyenne mobile de 55 périodes indépendamment de tous les autres ordres parce que 55 MA est l'indice 3, les numéros magiques de ces ordres seraient basés sur 3000 puis j'ai réalisé que je pouvais aller plus loin et incorporer le type d'ordre aussi, donc les ordres de vente sur cette ligne MA ont le numéro magique 3100 3101 3102 etc... cela signifie que vous pouvez identifier tous les ordres ouverts par ce critère de trading, ou tous les ordres d'achat ouverts par ce critère de trading ou tous les ordres de vente ouverts par n'importe quel critère de trading etc... tout cela par le numéro magique spécial

Raison: