Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 323

 

Ich versuche, meinen Zähler herauszufinden und ihn in Klassen umzuschreiben, aber ich kann die funktionierenden parallelen Funktionen immer noch nicht ausgeben. Ich denke, m_pause sollte anders deklariert werden. Wie sollte es richtig gemacht werden?


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

Ich versuche, meinen Zähler herauszufinden und ihn in Klassen umzuschreiben, aber ich kann die funktionierenden parallelen Funktionen immer noch nicht ausgeben. Ich denke, m_pause sollte anders deklariert werden. Wie sollte es richtig gemacht werden?


Sie müssen es in der Zeitschaltuhr überprüfen.

Und es sollte zwei CCounter-Objekte geben - jedes für seinen eigenen Zähler.

 
Artyom Trishkin:

Der Timer muss überprüft werden.

Danke, aber ich verstehe nicht, warum die Zeitschaltuhr prüfen muss? Für jeden Tick greift der Expert Advisor auf den CCounter zu und zählt die Ticks "count++".

 
Nauris Zukas:

Danke, aber ich verstehe nicht, warum der Timer überprüft werden muss? Für jeden Tick greift der EA auf den CCounter zu und zählt die Ticks "count++".

Es ist also nicht in der Zeitschaltuhr...

 
Artyom Trishkin:

Und es muss zwei CCounter-Objekte geben - jedes für seinen Zähler.

Ich bin nicht sicher, was Sie mit "zwei CCounter-Objekte" meinen. Ich habe den Artikel https://www.mql5.com/ru/articles/351 gelesen, in dem es heißt: "Sobald die Klasse geladen ist, wird sie zu einem Objekt". Heißt das, dass ich für jeden Zähler Kopien der Klassen anfertigen muss? So stellt sich heraus, die gleichen Kopien mit verschiedenen Namen, die ich ohne Klassen tun können? Ziel war es, das Kopieren von Klassen loszuwerden, weil ich mehr als hundert davon brauche. Mir wurde gesagt, dass man das auch mit einer Klasse machen kann, also habe ich angefangen, mit Klassen herumzuspielen. Oder was sage ich über "zwei CCounter-Objekte"?

Vitaly Muzichenko 2017.09.26 15:43 RU
Nauris Zukas:

Ich habe den Eindruck, dass ich an einem so einfachen Ort festsitze. Was ist mit global int chekcount=0; int count=0; zu tun, wenn ich mehrere counter()-Funktionen parallel ausführen möchte?

Verwenden Sie einfach eine Klasse oder erstellen Sie Kopien von Funktionen mit anderen Namen.

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

Ich bin nicht sicher, was Sie mit "zwei CCounter-Objekte" meinen. Ich habe den Artikel https://www.mql5.com/ru/articles/351 gelesen, in dem es heißt: "Sobald die Klasse geladen ist, wird sie zu einem Objekt". Heißt das, dass ich für jeden Zähler Kopien der Klassen anfertigen muss? So stellt sich heraus, die gleichen Kopien mit verschiedenen Namen, die ich ohne Klassen tun können? Ziel war es, das Kopieren von Klassen loszuwerden, denn ich brauche mehr als hundert davon. Mir wurde gesagt, dass man das auch mit einer Klasse machen kann, also habe ich angefangen, mit Klassen herumzuspielen. Oder was sage ich über "zwei CCounter-Objekte"?

Vitaly Muzichenko 2017.09.26 15:43 RU

Verwenden Sie nur eine Klasse, oder erstellen Sie Kopien von Funktionen mit unterschiedlichen Namen.

Erstellen Sie einfach so viele Klassenobjekte, wie Sie benötigen. Und verwenden Sie jedes einzelne für Ihre Zählung.
CArrayObj ist für Sie
 
Artyom Trishkin:
Erstellen Sie einfach so viele Klassenobjekte, wie Sie benötigen. Und verwenden Sie jedes einzelne für Ihre Zählung.
CArrayObj als Hilfe für Sie

Vielen Dank, ich werde lesen, was dieses CArrayObj ist und versuchen, es herauszufinden. :)

 

Wie kann ich ein eindimensionales Array mit den Preisen aller offenen Aufträge erstellen? Dies ist wahrscheinlich eine sehr einfache Frage für Sie, aber bitte beraten Sie mich)

 
vikzip:

Wie kann ich ein eindimensionales Array mit den Preisen aller offenen Aufträge erstellen?

Gehen Sie alle Aufträge in einer Schleife durch und schreiben Sie die offenen Preise in das Array.

 
Alexey Viktorov:

Gehen Sie alle Aufträge in der Schleife durch und schreiben Sie die Eröffnungspreise in das Array.


Ich danke Ihnen!