Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 323

 

Sto cercando di capire il mio contatore e riscriverlo in classi, ma non riesco ancora a produrre le funzioni parallele funzionanti. Penso che m_pausa debba essere dichiarata in modo diverso. Come deve essere fatto correttamente?


#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:

Sto cercando di capire il mio contatore e riscriverlo in classi, ma non riesco ancora a produrre le funzioni parallele funzionanti. Penso che m_pausa debba essere dichiarata in modo diverso. Come deve essere fatto correttamente?


Dovete controllarlo nel timer.

E ci dovrebbero essere due oggetti CCounter - ognuno per il suo contatore.

 
Artyom Trishkin:

Il timer deve essere controllato.

Grazie, ma non capisco perché il timer deve controllare? Per ogni tick l'Expert Advisor accede al CCounter e conta i tick "count++".

 
Nauris Zukas:

Grazie, ma non capisco perché il timer deve essere controllato? Per ogni tick, l'EA accede al CCounter e conta i tick "count++".

Quindi non è nel timer...

 
Artyom Trishkin:

E ci devono essere due oggetti CCounter - ognuno per il suo contatore.

Non sono sicuro di cosa intendi per "due oggetti CCounter". Ho letto l'articolo https://www.mql5.com/ru/articles/351, dice "Una volta caricata, la classe diventa un oggetto". Significa che dovrò fare delle copie delle classi per ogni banco? Quindi risultano le stesse copie con nomi diversi che posso fare a meno delle classi? L'obiettivo era quello di sbarazzarsi di copiare usando le classi, perché ne ho bisogno di più di un centinaio. Mi è stato detto che è possibile farlo con una classe, così ho iniziato a pasticciare con le classi. O cosa sto dicendo dei "due oggetti CCounter"?

Vitaly Muzichenko 2017.09.26 15:43 RU
Nauris Zukas:

Bloccato, mi sembra, in un posto così semplice. Cosa fare con l' int globale chekcount=0; int count=0; nel caso in cui io voglia eseguire diverse funzioni counter() in parallelo?

Basta usare una classe o fare copie di funzioni con nomi diversi.

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

Non sono sicuro di cosa intendi per "due oggetti CCounter". Ho letto l'articolo https://www.mql5.com/ru/articles/351, dice "Una volta caricata, la classe diventa un oggetto". Significa che dovrò fare delle copie delle classi per ogni banco? Quindi risultano le stesse copie con nomi diversi che posso fare a meno delle classi? L'obiettivo era quello di sbarazzarsi di copiare usando le classi, perché ne ho bisogno di più di un centinaio. Mi è stato detto che è possibile farlo con una classe, così ho iniziato a pasticciare con le classi. O cosa sto dicendo dei "due oggetti CCounter"?

Vitaly Muzichenko 2017.09.26 15:43 RU

Usare solo una classe, o fare copie di funzioni con nomi diversi.

Basta creare tanti oggetti di classe quanti ne servono. E usa ognuno di essi per il tuo conteggio.
CArrayObj è per voi
 
Artyom Trishkin:
Basta creare tanti oggetti di classe quanti ne servono. E usa ognuno di essi per il tuo conteggio.
CArrayObj per aiutarvi

Grazie, leggerò cosa è questo CArrayObj e cercherò di capirlo. :)

 

Come posso creare un array unidimensionale dei prezzi di tutti gli ordini aperti? Questa è probabilmente una domanda molto semplice per te, ma per favore consiglia)

 
vikzip:

Come posso creare un array unidimensionale dei prezzi di tutti gli ordini aperti?

Passa attraverso tutti gli ordini in un ciclo e scrive i prezzi aperti nell'array.

 
Alexey Viktorov:

Passa attraverso tutti gli ordini nel ciclo e scrive i prezzi di apertura nell'array.


Grazie!