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

 
Igor Makanu:

DieSpeicherzuweisung erfolgt in Beispiel 1 und in Beispiel 2

Beispiel 2 ist sowohl Deklaration als auch Initialisierung, Beispiel 1 nur Deklaration

Schon deutlicher hätte man darüber in der Hilfe schreiben können. Ich habe es sofort deklariert, weil ich statische Berechnungen in Klassen habe und kein Objekt mit dem Operator new erstellen muss.

Sagen Sie mir, ich möchte so etwas zu tun, es bedeutet, ich möchte eine Klasse zu deklarieren, dann deklarieren Sie ein Array und speichern Sie in das Array einen Zeiger auf die Klasse, ist es möglich zu tun oder nicht?

 
Seric29:

Sagen Sie mir, ich möchte so etwas tun, also möchte ich eine Klasse deklarieren, dann deklarieren Sie ein Array und speichern Sie in das Array einen Zeiger auf die Klasse, ist es möglich zu tun oder nicht?

wieder und wieder.... Eine Klasse ist in erster Linie ein Datentyp, wie int, double...

Sie wollen ein Array dieses Datentyps? - ein Array deklarieren, wenn das Array dynamisch ist, dann die Größe ändern, dann JEDES ELEMENT mit den notwendigen Daten initialisieren - Sie brauchen Zeiger, dann initialisieren Sie sie mit Zeigern auf eine Klasse, Sie brauchen Instanzen einer Klasse, dann wird jedes Element des Arrays kein Zeiger sein, sondern selbst ein Objekt

das ist das Wesen von OOP, jede Klasse ist zunächst einmal ein Benutzerdatentyp.... ich weiß nicht, wie viel darüber zu sagen, aber die Methodik ist die gleiche wie bei einem normalen Datentyp, und was Sie innerhalb der Klasse schreiben werden, ist eine persönliche Angelegenheit, aber die Initialisierung einer neuen Instanz wird immer mit einem Konstruktor beginnen, und was Konstruktor gibt es - standardmäßig, mit Parametern oder ohne Parameter gibt es Ihnen eine Wahl, wie das Objekt zu initialisieren...... ugh, aber immer noch Bücher lesen, es gibt keine Möglichkeit, es mit Fragen hier zu tun

 
Igor Makanu:

In der Regel bestimmen sie die äußersten oberen/unteren Aufträge anhand ihrer offenen Preise, fügen dann einen Wert hinzu und erhalten einen neuen Preis, bei dem sie entweder beobachten, wann der Preis diese Bedingung durchbricht, und einen neuen Auftrag erteilen oder sofort ein Raster von ausstehenden Aufträgen erstellen, das auf die maximale Anzahl von Aufträgen abzielt, und dieses Raster dann verfolgen.

Ich danke Ihnen für Ihr Interesse, aber ich meinte das gepunktete Raster auf dem Diagramm.


Können Sie mir bitte sagen, wie die horizontalen Ebenen für ein Raster in mt4 und mt5 berechnet werden? Sie verschieben sich, wenn ich den Chart ohne feste Skala scrolle, und sie verschieben sich inmt4 und mt5 ein wenig anders. Vielleicht weiß jemand, wie das berechnet wird, so dass ich nicht mit Einrückungen und Bindungen usw. raten muss.

 
Andrey Sokolov:

Danke, dass Sie nicht an uns vorbeigegangen sind, aber ich spreche nicht davon, sondern von dem gepunkteten Raster auf der Karte.


Können Sie mir bitte sagen, wie die horizontalen Ebenen für das Raster in mt4 und in mt5 berechnet werden? Wenn die Skala nicht fixiert ist, verschieben sie sich, wenn ich den Chart scrolle, und sie verschieben sich inmt4 und in mt5 ein bisschen anders. Vielleicht weiß jemand, wie es berechnet wird, damit ich nicht mit Einrückungen und Bindungen und so weiter raten muss.

Es teilt das Fenster einfach in gleiche Teile, abhängig von der Bildschirmauflösung.

Ich teile vertikal in 15 Teile sowohl in MT4 als auch in MT5

 
Igor Makanu:

wieder und wieder.... Eine Klasse ist in erster Linie ein Datentyp, wie int, double...

Sie möchten ein Array mit Daten dieses Typs? - ein Array deklarieren, wenn das Array dynamisch ist, dann die Größe ändern, dann JEDES ELEMENT mit den notwendigen Daten initialisieren - Sie brauchen Zeiger, dann initialisieren Sie sie mit Zeigern auf die Klasse, Sie brauchen Klasseninstanzen, dann wird jedes Element des Arrays kein Zeiger sein, sondern das Objekt selbst

das ist das Wesen von OOP, jede Klasse ist zunächst einmal ein Benutzerdatentyp.... Ich weiß nicht, wie viel darüber zu sagen, aber die Methodik ist die gleiche wie bei einem regulären Datentyp, und was Sie innerhalb der Klasse schreiben werden, ist eine persönliche Angelegenheit, aber die Initialisierung einer neuen Instanz wird immer mit einem Konstruktor beginnen, und welcher Konstruktor - standardmäßig, mit Parametern oder ohne Parameter - Sie können wählen, wie das Objekt zu initialisieren...... ugh, aber immer noch Bücher lesen, gibt es keine Möglichkeit, es auf diese Weise zu tun

Ja, ich erkannte, dass dies nicht möglich ist, weil, wenn Sie ein Array erstellen, muss das Programm den Typ angeben, und weil ich einen Zeiger von verschiedenen Klassen in einem Array speichern möchte, wird es nicht funktionieren, weil das Array nicht verschiedenen Typ oder Verschiedenes in Mql sein kann, in S++ tat es, aber nicht mit solchen komplexen Objekten. Meine Idee wird hier also nicht funktionieren.

 
Seric29:

Ja, ich erkannte, dass dies nicht möglich ist, weil, wenn Sie ein Array zu erstellen, das Programm erfordert, dass Sie den Typ angeben, und weil ich einen Zeiger der verschiedenen Klassen in einem Array speichern möchten, wird es nicht funktionieren, weil das Array nicht von verschiedenen Typen oder Sorten in mql sein kann, in C++ tat es, aber nicht mit solchen komplexen Objekten. Meine Idee wird hier also nicht funktionieren.

Alles ist erledigt. Sie erben Ihre Objekte von der Basisklasse und erstellen ein Array mit dem Typ der Basisklasse. Und alle geerbten Objekte können in dem Array sein.
 
Artyom Trishkin:
Alles ist erledigt. Sie erben Ihre Objekte von der Basisklasse und erstellen ein Array mit dem Typ der Basisklasse. Und alle geerbten Objekte können sich in dem Array befinden.

Und zeigen die einfachste und primitivste Beispiel, wo es 2 Klassen dann Vererbung und wie man Verweise auf jede Klasse in einem Array von 2 Elementen (0 erste Klasse 1 2.) setzen?

 
Andrey Sokolov:

Makar, warum schreiben Sie etwas, das offensichtlich nicht stimmt? Beim Scrollen des Charts können Sie den Versatz der horizontalen Gitternetzlinien ändern, und diese verschieben sich inmt4 und mt5 leicht unterschiedlich.

Das tun sie nicht!

Sie verschieben sich nur, wenn ein Anzeigefenster vorhanden ist, in allen anderen Fällen nicht.

 
Seric29:

Und zeigen die einfachste und primitivste Beispiel, wo es 2 Klassen weitere Vererbung und wie man Verweise auf jede Klasse in einem Array von 2 Elementen (0 erste Klasse 1 2.) setzen?

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

Ich danke Ihnen. Und die Funktionen sollten virtuell einfach nicht sein, ich werde schon selbst experimentieren.