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

 
Igor Makanu:

l'allocation de mémoire sera dans l'exemple 1 et dans l'exemple 2

L'exemple 2 est à la fois une déclaration et une initialisation, l'exemple 1 uniquement une déclaration.

Déjà plus clair aurait pu être écrit à ce sujet dans l'aide. Je l'ai déclaré tout de suite car j'ai des calculs statiques dans les classes et je n'ai pas besoin de créer un objet via l'opérateur new.

Dites-moi, je veux faire une telle chose, cela signifie que je veux déclarer une classe, puis déclarer un tableau et stocker dans le tableau un pointeur vers la classe, est-ce possible de le faire ou non ?

 
Seric29:

Dites-moi je veux faire une telle chose, donc je veux déclarer une classe puis déclarer un tableau et stocker dans le tableau un pointeur vers la classe, est-ce possible de le faire ou non ?

encore et encore.... Une classe est avant tout un type de données, comme int, double...

vous voulez un tableau de ce type de données ? - déclarer un tableau, si le tableau est dynamique, alors le redimensionner, puis initialiser CHAQUE ELEMENT avec les données nécessaires - vous avez besoin de pointeurs, alors les initialiser avec des pointeurs vers une classe, vous avez besoin d'instances d'une classe, alors chaque élément du tableau ne sera pas un pointeur mais un objet lui-même

c'est l'essence même de la POO, toute classe est avant tout un type de données utilisateur.... je ne sais pas quoi dire à ce sujet, mais la méthodologie est la même qu'avec un type de données ordinaire, et ce que vous écrirez à l'intérieur de la classe est une affaire personnelle, mais l'initialisation d'une nouvelle instance commencera toujours par un constructeur, et quel constructeur il y a - par défaut, avec des paramètres ou sans paramètres, il vous donne le choix de la façon d'initialiser l'objet...... ugh, mais lisez quand même des livres, il n'y a aucun moyen de le faire avec des questions ici.

 
Igor Makanu:

Habituellement, ils déterminent les ordres supérieurs/inférieurs les plus éloignés par leurs prix ouverts, puis ajoutent une certaine valeur et obtiennent un nouveau prix auquel ils surveillent le moment où le prix franchit cette condition de niveau et placent un nouvel ordre ou placent immédiatement une grille d'ordres en attente visant le nombre maximum d'ordres et suivent ensuite cette grille.

Je vous remercie de votre intérêt, mais je voulais parler de la grille en pointillés sur le graphique.


Les niveaux horizontaux se déplacent lorsque je fais défiler le graphique sans échelle fixe et ils se déplacent dansmt4 et mt5 un peu différemment. Peut-être que quelqu'un sait comment il est calculé, afin que je n'aie pas à deviner avec les indentations et les reliures, etc.

 
Andrey Sokolov:

Merci de ne pas nous laisser passer, mais je ne parle pas de cela, je parle de la grille en pointillés sur le graphique.


Pouvez-vous me dire comment les niveaux horizontaux sont calculés pour la grille dans mt4 et dans mt5 ? Si l'échelle n'est pas fixe, ils se déplacent lorsque je fais défiler le graphique, et ils se déplacent dansmt4 et dans mt5 un peu différemment. Peut-être que quelqu'un sait comment c'est calculé pour que je n'aie pas à deviner avec les indentations et les reliures et autres.

Il divise simplement la fenêtre en parties égales, en fonction de la résolution de l'écran.

Je divise verticalement en 15 parties dans MT4 et MT5.

 
Igor Makanu:

encore et encore.... Une classe est avant tout un type de données, comme int, double...

vous voulez un tableau de données de ce type ? - déclarer un tableau, si le tableau est dynamique, alors le redimensionner, puis initialiser CHAQUE ELEMENT avec les données nécessaires - vous avez besoin de pointeurs, alors les initialiser avec des pointeurs vers la classe, vous avez besoin d'instances de classe, alors chaque élément du tableau ne sera pas un pointeur, mais l'objet lui-même

c'est l'essence même de la POO, toute classe est avant tout un type de données utilisateur.... je ne sais pas quoi dire à ce sujet, mais la méthodologie est la même qu'avec un type de données ordinaire, et ce que vous écrirez à l'intérieur de la classe est une affaire personnelle, mais l'initialisation d'une nouvelle instance commencera toujours par un constructeur, et quel constructeur - par défaut, avec paramètres ou sans paramètres - vous pouvez choisir comment initialiser l'objet...... ugh, mais lisez quand même les livres, il n'y a aucun moyen de le faire de cette façon.

Oui, je me suis rendu compte que ce n'est pas possible parce que lorsque vous créez un tableau, le programme doit spécifier le type, et parce que je veux enregistrer un pointeur de différentes classes dans un tableau, cela ne fonctionnera pas parce que le tableau ne peut pas être de type différent ou divers dans mql, dans s++ l'a fait, mais pas avec des objets aussi complexes. Donc mon idée ne fonctionnera pas ici.

 
Seric29:

Oui, je me suis rendu compte que ce n'est pas possible parce que lorsque vous créez un tableau, le programme vous demande de spécifier le type, et parce que je veux enregistrer un pointeur de différentes classes dans un tableau, cela ne fonctionnera pas parce que le tableau ne peut pas être de différents types ou variétés en mql, en C++ l'a fait, mais pas avec des objets aussi complexes. Donc mon idée ne fonctionnera pas ici.

Tout est fait. Vous héritez vos objets de la classe de base et créez un tableau avec le type de la classe de base. Et tous les objets hérités peuvent être dans le tableau.
 
Artyom Trishkin:
Tout est fait. Vous héritez vos objets de la classe de base et créez un tableau avec le type de la classe de base. Et tous les objets hérités peuvent être dans le tableau.

Et montrez l'exemple le plus simple et le plus primitif, où il y a 2 classes puis l'héritage et comment mettre les références à chaque classe dans un tableau de 2 éléments (0 première classe 1 2ème) ?

 
Andrey Sokolov:

Makar, pourquoi écrivez-vous quelque chose qui est clairement faux ? Lorsque vous faites défiler le graphique, vous pouvez modifier le décalage des lignes de la grille horizontale, et elles se déplacentlégèrement différemment dansmt4 et dans mt5.

Ils ne le font pas !

Ils ne se déplacent que lorsqu'il y a une fenêtre d'indication, dans tous les autres cas, ils ne le font pas.

 
Seric29:

Et montrez l'exemple le plus simple et le plus primitif où il y a 2 classes avec un héritage supplémentaire et comment mettre les références à chaque classe dans un tableau de 2 éléments (0 première classe 1 2ème) ?

class CBase{
protected:
   int v;
   public:
                  CBase(): v(0)  {            }
           int    getV()         { return(v); }
   virtual int    calc() = 0;
};

class A:public CBase
{
   public:
   virtual int calc() {return(--v);} //декремент 
};

class B:public CBase
{
   public:
   virtual int calc() {return(++v);} //инкремент
};

//+------------------------------------------------------------------+
void OnStart()
{
// 2 указателя которые инициализируем экземплярами обьектов  A и B
   CBase *arr_base[2];
   arr_base[0] = new A;
   arr_base[1] = new B;
// вызовем 10 раз метод calc() для каждого обьекта   
   for(int j=ArraySize(arr_base)-1; j>=0; j--)
   {
      for(int i=0; i<10; i++)
         {
            arr_base[j].calc();
         }
   }
   
   Print("A.v = ",arr_base[0].getV());
   Print("B.v = ",arr_base[1].getV());
//удалим обьекты   
   for(int j=ArraySize(arr_base)-1; j>=0; j--)
   {
      delete arr_base[j];
   }   
}
//+------------------------------------------------------------------+

2020.03.22 21:21:38.544 tst (EURUSD,H1) A.v = -10

2020.03.22 21:21:38.544 tst (EURUSD,H1) B.v = 10

 
Igor Makanu:

2020.03.22 21:21:38.544 tst (EURUSD,H1) A.v = -10

2020.03.22 21:21:38.544 tst (EURUSD,H1) B.v = 10

Merci. Et les fonctions devraient être virtuelles simple ne peut pas, je vais déjà expérimenter moi-même.

Raison: