Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1917

 
Valeriy Yastremskiy #:

Ce n'est pas le sujet de la question. La fonction de Dimitri ne renvoie pas un argument par référence. Pourquoi utiliser un argument par référence ? Oui, les zones locales pourront déclarer une variable en elles-mêmes et obtenir une réponse à la variable après l'appel de la fonction.

Et c'est tout ? ??

Si une variable est déclarée globalement, il ne doit pas y avoir de variables portant le même nom. Si une fonction est appelée à partir de plusieurs fonctions, comme dans votre exemple, vous pouvez l'oublier et déclarer une variable avec le même nom dans chaque fonction. C'est pratique...

 
Valeriy Yastremskiy #:

Ce n'est pas le sujet de la question. La fonction de Dimitri ne renvoie pas un argument par référence. Pourquoi utiliser un argument par référence ? Oui, les zones locales pourront déclarer une variable en elles-mêmes et obtenir une réponse à la variable après l'appel de la fonction.

Et c'est tout ? ??

1. Ainsi, la fonction interne peut modifier et renvoyer toute variable qui lui est passée, et non une variable globale spécifique.

2. Pour que la fonction ne copie pas une variable de grande taille dans la fonction - un tableau, une structure, une chaîne de texte...

 
Alexey Viktorov #:

Si une variable est déclarée globalement, il ne doit pas y avoir de variables portant le même nom. Si vous appelez une fonction à partir de plusieurs fonctions, comme dans votre exemple, vous pouvez la laisser tranquille et déclarer une variable avec le même nom dans chaque fonction. C'est pratique...

C'est-à-dire que c'est seulement une question de localisation de l'utilisation pour les zones locales avec les mêmes noms d'arguments par référence. Eh bien, pas beaucoup, mais il y a quelque chose. Je pensais qu'il y avait plus que ça.

 
JRandomTrader #:

1. Ainsi, la fonction interne peut modifier et renvoyer toute variable qui lui est passée, et non une variable globale spécifique.

2. Ne pas copier dans une fonction une variable de grande taille - un tableau, une structure, une chaîne de texte...

La question portait sur autre chose. Dans le troisième exemple, votre 1ère réponse. 2й. Je ne pense pas qu'il s'agisse de pouvoir modifier des champs ou des éléments d'entité. Dans la plupart des cas, ils ne sont pas constants, donc l'argument de la référence est évident pour la plupart des cas. MAIS si l'entité est constante, alors... mais les développeurs ont décidé de ne pas s'embêter.

 
Valeriy Yastremskiy #:

C'est-à-dire qu'il s'agit seulement de localiser l'utilisation pour les zones locales avec les mêmes noms d'arguments par référence. Eh bien, pas beaucoup, mais il y a quelque chose. Je pensais qu'il y avait plus que ça.

Ce sont juste les choses avec lesquelles je suis à l'aise. Il y a sûrement d'autres avantages, comme la redondance de la mémoire ou autre chose. Pourquoi ne pas demander directement à Fedoseev ?
 
Alexey Viktorov #:
C'est juste ce que je connais, ce qui est confortable pour moi. Il y a sûrement d'autres avantages, comme la redondance de la mémoire ou autre. Pourquoi ne pas demander directement à Fedoseev ?

Un niveau de perception différent))) Peut-être que je pèche moi-même, les choses évidentes sont très difficiles à transmettre aux autres)))).

 
Valeriy Yastremskiy #:

Il est possible de faire avec un seul argument x en déclarant r dans la portée globale.

On peut se passer de tout argument en déclarant x dans la portée globale. De plus, il est possible de ne pas retourner le résultat, mais de l'écrire dans une variable globale. Mais cela entraînera une confusion dans le code, la nécessité de se souvenir de ce qui est stocké et où, et avec l'augmentation du code du programme, cela transformera la vie du programmeur en enfer.
 
Bon après-midi. Pouvez-vous me dire ce qui manque ? Mon objectif est de conclure les toutes premières transactions avec un volume minimal. Je ne sélectionne actuellement que les ordres dont le volume est de 0,01.
     for(int i=0; i<OrdersTotal(); i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
       if(OrderLots()==0.01){ 
     OrderClose(OrderTicket(),0.01,OrderType()==OP_BUY?Bid:Ask,3,clrWhite);return;}}}    }

Si ce n'est pas à partir de 0,01, je dois alors sélectionner des ordres à partir de 0,02 et ainsi de suite. Comment ce point doit-il être rédigé ?

 
Rustam Bikbulatov volume minimal. Mon EA ne sélectionne actuellement que les ordres dont le volume est de 0,01.

Si ce n'est pas à partir de 0,01, je dois alors sélectionner des ordres à partir de 0,02 et ainsi de suite. Comment écrire ce point ?

if(OrderLots()==0.01)

Vous ne le voyez vraiment pas vous-même ?

"Comment vérifier ce point ?" - vous devez calculer la valeur minimale du lot 0,01.

Peut-être que le glissement devrait être spécifié en points, c'est-à-dire 3*Point() et non 3

 
Rustam Bikbulatov volume minimal. Mon robot ne sélectionne actuellement que les ordres dont le volume est de 0,01.

Si ce n'est pas à partir de 0,01, je dois alors sélectionner des ordres à partir de 0,02 et ainsi de suite. Comment écrire ce point ?

Vous avez besoin de 2 cycles : vous devez obtenir le volume minimum dans le premier et le fermer dans le second. Et vous devez également tenir compte du fait que lorsque vous fermez les ordres, ils sont décalés d'une position, vous devez donc faire un cycle de la position maximale à 0.