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

 

J'essaie de comprendre mon compteur et de le réécrire en classes, mais je n'arrive toujours pas à sortir les fonctions parallèles qui fonctionnent. Je pense que m_pause devrait être déclaré différemment. Comment le faire correctement ?


#ifdef __MQL4__
#endif 
//+------------------------------------------------------------------+
//| Счётчик                                                          |
//+------------------------------------------------------------------+
class CCounter
  {
private:
   //--- Шаг счётчика
   int               count;
   //--- Счётчик 
   int               chekcount;
   //---      
   int               m_pause;

public:
   //--- Проверяет прохождение указанного временного интервала 
   int               CheckCounter(const int pause);

   void ZeroCounter(void){count=0;chekcount=0;}
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CCounter::CheckCounter(const int pause)
  {
   m_pause=pause;
   count++;
   Print(" Class    count= ",count);
   Print(" Class    pause= ",pause);
   Print(" Class    m_pause= ",m_pause);

   if(count>=chekcount+m_pause)
     {
      chekcount=count;
     }
   return(chekcount);
  }
//+------------------------------------------------------------------+
#include <Test_Class_Tmier_libr_1.mqh>
CCounter TC;

void OnTick()
  {
Print("0 TC.CheckCounter(10)= ",TC.CheckCounter(10));   
Print("1 TC.CheckCounter(15)= ",TC.CheckCounter(15));
}

 
Nauris Zukas:

J'essaie de comprendre mon compteur et de le réécrire en classes, mais je n'arrive toujours pas à sortir les fonctions parallèles qui fonctionnent. Je pense que m_pause devrait être déclaré différemment. Comment le faire correctement ?


Vous devez le vérifier dans la minuterie.

Et il devrait y avoir deux objets CCounter - chacun pour un compteur différent.

 
Artyom Trishkin:

La minuterie doit être vérifiée.

Merci, mais je ne comprends pas pourquoi la minuterie doit vérifier ? Pour chaque tick, l'Expert Advisor accède au CCounter et compte les ticks "count++".

 
Nauris Zukas:

Merci, mais je ne comprends pas pourquoi il faut vérifier la minuterie ? Pour chaque tick, l'EA accède au CCounter et compte les ticks "count++".

Donc ce n'est pas dans la minuterie...

 
Artyom Trishkin:

Et il doit y avoir deux objets CCounter - chacun pour son compteur.

Je ne suis pas sûr de ce que vous entendez par "deux objets CCounter". J'ai lu l'article https://www.mql5.com/ru/article s/351, il est dit "Une fois chargée, la classe devient un objet". Cela signifie-t-il que je devrai faire des copies des cours pour chaque compteur ? Il s'agit donc des mêmes copies avec des noms différents que je peux faire sans cours ? Le but était de se débarrasser de la copie en utilisant des classes, car j'en ai besoin de plus d'une centaine. On m'a dit qu'il était possible de le faire avec une classe, alors j'ai commencé à m'amuser avec des classes. Ou qu'est-ce que je dis de "deux objets CCounter" ?

Vitaly Muzichenko 2017.09.26 15:43 RU
Nauris Zukas:

Coincé, comme il me semble, dans un endroit si simple. Que faire avec global int chekcount=0 ; int count=0 ; dans le cas où je veux exécuter plusieurs fonctions counter() en parallèle ?

Il suffit d'utiliser une classe ou de faire des copies de fonctions avec des noms différents.

Основы объектно-ориентированного программирования
Основы объектно-ориентированного программирования
  • 2011.12.06
  • Dmitry Fedoseev
  • www.mql5.com
На самом деле все намного проще. Чтобы пользоваться ООП вовсе не нужно знать, что означают эти слова - можно просто использовать предоставляемые ООП возможности, даже не зная как они называются. Но все же, надеюсь, в процессе прочтения статьи все желающие не только научатся использовать ООП в достаточной мере, но и разъяснят себе значения этих...
 
Nauris Zukas:

Je ne suis pas sûr de ce que vous entendez par "deux objets CCounter". J'ai lu l'article https://www.mql5.com/ru/article s/351, il est dit "Une fois chargée, la classe devient un objet". Cela signifie-t-il que je devrai faire des copies des cours pour chaque compteur ? Il s'agit donc des mêmes copies avec des noms différents que je peux faire sans cours ? Le but était de se débarrasser de la copie en utilisant des classes, car j'en ai besoin de plus d'une centaine. On m'a dit qu'il était possible de le faire avec une classe, alors j'ai commencé à m'amuser avec des classes. Ou qu'est-ce que je dis de "deux objets CCounter" ?

Vitaly Muzichenko 2017.09.26 15:43 RU

Utilisez uniquement une classe, ou faites des copies de fonctions avec des noms différents.

Il suffit de créer autant d'objets de classe que nécessaire. Et utilisez chacun d'eux pour votre comptage.
CArrayObj est pour vous
 
Artyom Trishkin:
Il suffit de créer autant d'objets de classe que nécessaire. Et utilisez chacun d'eux pour votre comptage.
CArrayObj pour vous aider

Merci, je vais lire ce qu'est ce CArrayObj et essayer de le comprendre. :)

 

Comment créer un tableau unidimensionnel des prix de tous les ordres ouverts ? Il s'agit probablement d'une question très simple pour vous, mais veuillez me conseiller).

 
vikzip:

Comment créer un tableau unidimensionnel des prix de tous les ordres ouverts ?

Passez en revue tous les ordres dans une boucle et écrivez les prix ouverts dans le tableau.

 
Alexey Viktorov:

Passez en revue tous les ordres dans la boucle et écrivez les prix d'ouverture dans le tableau.


Merci !