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

 
Alexey Viktorov:
Artem, tu as tort. Le tableau déclaré au niveau global est visible dans toutes les parties du programme et il n'est pas nécessaire de le passer de quelque part. Il suffit de le remplir à un endroit du programme, de le trier à un autre, et de le lire au troisième, peu importe.

La même fonction peut trier et/ou rechercher avec succès des données dans différents tableaux. N'est-ce pas ? Et si c'est le cas, il est préférable de transmettre le tableau par référence - pour l'avenir. Et lorsque vous appelez la fonction, il n'y a pas de mal à voir avec quel tableau elle fonctionnera.

Je fais juste ces considérations. Où ai-je tort ?

 
Artyom Trishkin:

La même fonction peut trier et/ou rechercher avec succès des données dans différents tableaux. N'est-ce pas ? Et si c'est le cas, il est préférable de transmettre le tableau par référence - pour l'avenir. Et lorsque vous appelez la fonction, vous devez également être en mesure de voir le tableau avec lequel elle va fonctionner.

Je n'ai raison que sur ce point. Où est le mal ?

Je l'ai. Vos conseils sont destinés aux programmeurs de lego. Vous ne faites pas cette perversion vous-même.

Il reste donc une erreur, à savoir que le tableau doit être déclaré globalement.

Je suis heureux que nous nous comprenions.

 
Alexey Viktorov:

Je l'ai. Vos conseils sont pour les programmeurs de lego. Vous ne faites pas de telles perversions vous-même.

Il ne reste plus qu'une chose à faire, à savoir que le tableau doit être déclaré globalement.

Heureux que nous nous comprenions.

Ce que je veux dire dans ce contexte est ceci :

  1. Nous devons obtenir le moins de boucles possible par tic.
  2. Nous voulons avoir un tableau constant avec les données des ordres et positions du marché et un tableau avec les données des ordres et positions supprimés/fermés.
  3. Si nous avons le tableau localement dans une fonction, l'appeler à plusieurs reprises nécessite de le remplir à nouveau. Je suggère qu'il ne soit rempli qu'une seule fois à chaque nouveau tick - ainsi le tableau est global, sinon nous le perdrions en quittant la fonction.
  4. Pour y trouver quelque chose (dans le tableau), nous avons besoin d'un tableau rempli et de fonctions qui renverront les données trouvées. Dans les fonctions, nous pouvons déclarer des tableaux auxiliaires pour les calculs nécessaires.

Pour cette raison, il serait préférable d'avoir des tableaux globaux - pour les ordres et les positions fermés et ouverts. À chaque nouveau tick, nous transmettons une fois la quantité nécessaire d'ordres/positions, en remplissant deux tableaux avec eux. Et ensuite, nous obtenons d'eux toutes les données nécessaires sur le même tic-tac. Notez que non seulement le dernier ordre/position fermé/ouvert et toutes ses données sont calculés, mais aussi tous les ticks parents et enfants de toutes les positions sont recherchés en cas de clôture partielle. Ainsi, à tout moment, je peux voir de quel ticket provient telle ou telle position, si elle a été partiellement fermée plus d'une fois - tout cela fonctionne déjà dans une classe qui tourne dans un timer. J'ai besoin de nombreuses autres données avec un petit nombre total de cycles. La profondeur d'historique requise pour les tableaux est définie pour le testeur.

Et ainsi de suite...

 
Artyom Trishkin:

Dans ce contexte, mon point de vue est le suivant :

  1. Nous devons obtenir le moins de cycles possible par tic.
  2. Nous avons besoin d'avoir un tableau constant avec les données des ordres et des positions sur le marché et un tableau avec les données des ordres et des positions supprimés/fermés.
  3. Si nous avons le tableau localement dans une fonction, l'appeler à plusieurs reprises nécessite de le remplir à nouveau. Je suggère qu'il ne soit rempli qu'une seule fois à chaque nouveau tick - ainsi le tableau est global, sinon nous le perdrions en quittant la fonction.
  4. Pour y trouver quelque chose (dans le tableau), nous avons besoin d'un tableau rempli et de fonctions qui renverront les données trouvées. Dans les fonctions, nous pouvons déclarer des tableaux auxiliaires pour les calculs nécessaires.

Pour cette raison, il serait préférable d'avoir des tableaux globaux - pour les ordres et les positions fermés et ouverts. À chaque nouveau tick, nous transmettons une fois la quantité nécessaire d'ordres/positions, en remplissant deux tableaux avec eux. Et ensuite, nous obtenons d'eux toutes les données nécessaires sur le même tic-tac. Notez que non seulement le dernier ordre/position fermé/ouvert et toutes ses données sont calculés, mais aussi tous les ticks parents et enfants de toutes les positions sont recherchés en cas de clôture partielle. Ainsi, à tout moment, je peux voir quel ticket provient de telle ou telle position, s'il a été fermé partiellement plus d'une fois - tout cela fonctionne déjà dans une classe qui s'exécute dans un timer. J'ai besoin de nombreuses autres données avec un petit nombre total de cycles. Pour le testeur, la profondeur d'historique souhaitée est définie pour les tableaux.

Et ainsi de suite...

Donc, nous ne nous comprenons pas bien.

Si le tableau est global, pourquoi le passer dans une fonction par référence s'il est déjà visible dans cette fonction ?

 
Alexey Viktorov:

Alors on ne se comprend pas bien.

Si le tableau est global, pourquoi le passer dans une fonction par référence, s'il est déjà visible dans cette fonction ?

Surcharge de fonctions - cette notion existe ;)

Si vous devez effectuer les mêmes actions avec différents tableaux dans une seule fonction, alors...

Cependant - nous discutons de différents cas particuliers...

 
Artyom Trishkin:

Surcharge de fonctions - ce concept existe ;)

Si vous devez effectuer les mêmes actions avec différents tableaux dans une seule fonction, alors...

Cependant - nous discutons de différents cas particuliers...

Eh bien, Dieu merci, j'ai compris votre pensée. Mais ils sont très similaires aux conseils donnés aux programmeurs de lego.
 
Alexey Viktorov:
Eh bien, Dieu merci, je comprends ce que tu penses. Mais ils ressemblent beaucoup à des conseils aux programmeurs de lego.

Il serait très étrange d'avoir en stock un grand nombre de fonctions fonctionnant à 100% et de les réécrire à chaque fois. Ce n'est pas un conseil pour construire des maisons en dés. Il est conseillé d'accumuler vos propres bibliothèques de fonctions et classes. Et qu'y a-t-il de mal à ce qu'une fonction gère plusieurs tableaux en fonction de celui qui lui est passé par référence ? Et qu'est-ce qui ne va pas avec les modèles de fonctions ?

Si vous avez du code pour trier un tableau, pourquoi écrire une fonction distincte pour chaque type de tableau ? Vous pouvez simplement surcharger et trier n'importe quel type. Comment pensez-vous que ArraySort() fonctionne ? Vous y passez différents types de tableaux, et à la sortie vous recevez le tableau trié qui a été passé - ou les méta quotas sont aussi des lego-codeurs ou quoi ?

 
Artyom Trishkin:

Il serait très étrange d'avoir en stock un grand nombre de fonctions fonctionnant à 100% et de les réécrire à chaque fois. Ce n'est pas un conseil pour construire des maisons avec des cubes. Il est conseillé d'accumuler vos propres bibliothèques de fonctions et classes. Et qu'y a-t-il de mal à ce qu'une fonction gère plusieurs tableaux en fonction de celui qui lui est passé par référence ? Et qu'est-ce qui ne va pas avec les modèles de fonctions ?

S'il existe un code pour trier un tableau, pourquoi devrions-nous écrire une fonction distincte pour chaque type de tableau ? Vous pouvez simplement faire une surcharge et trier n'importe quel type. Comment pensez-vous que ArraySort() fonctionne ? Vous passez différents types de tableaux ici, et la sortie est un tableau trié, que vous avez passé - ou des métaquotes aussi des lego-codeurs, ou quoi ?

L'essentiel est de ne pas en arriver là.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Простой советник. Проверка размера бара. Покупка/продажа
Простой советник. Проверка размера бара. Покупка/продажа
  • www.mql5.com
Что должен делать советник: на каждом тике проверять размер бара как только размер бара станет равным или превысит заданный размер то: если свеча б...
 
Alexey Viktorov:

L'essentiel est de ne pas en arriver là.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Ça ne sert à rien là-bas. Il y a un contrôle pour vérifier et ensuite un contrôle pour voir si c'est bon. C'est toujours de travers. Ce n'est pas le cas - c'est là que les professeurs sont nécessaires.
 

il existe une variable

int Niveau = 0 ;

Pendant que le programme est en cours, il est en constante évolution. Aidez-moi à écrire une condition : si le niveau n'a PAS changé, ne faites rien, si le niveau a changé (peu importe s'il a changé plus ou moins), effectuez une action { opérateur }.

Raison: