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

 
Mikhail Tkachev:

Wenn Sie einen EA mit drei Zeilen haben, dann brauchen Sie natürlich kein OOP).

Aber wenn ich einen Goblin mit einem Arm und drei Beinen und dann mit einem Bein und drei Armen erstellen müsste - dann, ja, dann würde mir OOP wirklich helfen. Obwohl... Ich weiß es auch nicht.

Was ist der Sinn, dass es hier steht?

Und es spielt überhaupt keine Rolle, wie viele "Linien" Sie haben. ;)
 
Mikhail Tkachev:

Nur int oder double?
Was ist, wenn die Variable ein Objekt einer Klasse ist?
Und wenn die Anzahl dieser Objekte vorher nicht bekannt ist [vor der Ausführung von OnInit()]?
Und wenn die Parameter der Konstruktoren im Voraus [vor OnInit()] unbekannt sind?

Sie haben einen guten Link und ein Beispiel für die Deklaration von Klassen angegeben.

In jedem Fall werden die globalen vor OnInit() deklariert; die anderen werden jedes Mal deklariert, wenn sie benötigt werden

 
MakarFX:

In jedem Fall werden die Globalen vor OnInit() deklariert, die anderen werden jedes Mal deklariert, wenn sie benötigt werden

In der Theorie ist das klar.
In der Praxis, nach :

Deklaration von 'NB_M1' versteckt globale Variable -> pro Zeile in OnInit()

siehe vorherige Erklärung von 'NB_M1'

arbeitet der Experte so, als wäre NB_M1 global (und korrekt initialisiert), obwohl er durch eine lokale Deklaration verborgen und in OnInit() als lokal initialisiert ist.

Von der Idee her sollte es gar nicht funktionieren.

 
Mikhail Tkachev:

Theoretisch ist das sinnvoll.
In der Praxis, nach :

Deklaration von 'NB_M1' versteckt globale Variable -> pro Zeile in OnInit()

siehe vorherige Erklärung von 'NB_M1'

arbeitet der Experte so, als wäre NB_M1 global (und korrekt initialisiert), obwohl er durch die lokale Deklaration in OnInit() verborgen ist.

Von der Idee her sollte es gar nicht funktionieren.

Was ist NB_M1? Vielleicht ist sie bereits in der Bibliothek deklariert? Und das ganz ohne Code, wie Taube mit Blinden)
 
Сергей Таболин:


Und es spielt keine Rolle, wie viele "Strings" Sie haben. ;)

Wenn man hundert oder zwei Zeilen Code hat, weil man mit diesem anfangen will, dann vergisst, wofür das da ist, dann dieses hinzufügt, dann kommt natürlich (?) der Gedanke auf: "Wie soll man das organisieren?" Oder nicht).

 
MakarFX:
Was ist NB_M1? Vielleicht ist sie bereits in der Bibliothek deklariert? Und ohne jeglichen Code ist es wie taub und blind)

NB_M1 ist ein Objekt der Klasse CIsNewBar, das den Beginn eines neuen Balkens für jedes Zeichen definiert. Nein, sie ist nicht in der Bibliothek deklariert.
Code im ersten Beitrag: https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

 
Mikhail Tkachev:

NB_M1 ist ein Objekt der Klasse CIsNewBar, das den Beginn eines neuen Balkens für jedes Zeichen definiert. Nein, sie ist nicht in der Bibliothek deklariert.
Der Code im ersten Beitrag: https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

NB_M1 wird also innerhalb der Klasse deklariert und kann dort aufgerufen werden

Können wir einen Blick auf den Code dieser Klasse werfen?

 
NB_M1 ist ein Objekt dieser Klasse. Wie kann man sie einbauen?
//+------------------------------------------------------------------+
//|                                                     IsNewBar.mqh |
//|                               Copyright © 2011, Nikolay Kositsin |
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+ 
#property copyright "2011,   Nikolay Kositsin"
#property link      "farria@mail.redcom.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//|  Алгоритм определения момента появления нового бара              |
//| Для каждого таймфрейма каждого символа нужно создавать объект    |
//+------------------------------------------------------------------+  
#include <Object.mqh>

class CIsNewBar:public CObject // Сделан наследником класса для возможности работы с классом CArrayObj (из библиотеки)
// class CIsNewBar   // Первоначальная редакция
  {
   //----
public:

      //---- функция определения момента появления нового бара
   bool IsNewBar()
     {
      //---- получим время появления текущего бара
      datetime TNew=datetime(SeriesInfoInteger(m_Symbol,m_TimeFrame,SERIES_LASTBAR_DATE));

      if(TNew!=m_TOld && TNew) // проверка на появление нового бара
        {
         m_TOld=TNew;
         return(true); // появился новый бар!
        }
      //----
      return(false); // новых баров пока нет!
     };

   //---- конструктор класса    
                     CIsNewBar(const string &pSymbol, const ENUM_TIMEFRAMES pTimeFrame){
                        m_Symbol=pSymbol; m_TimeFrame=pTimeFrame;
                        m_TOld=-1;};

protected:
   datetime          m_TOld;        // Время хранится 
   ENUM_TIMEFRAMES   m_TimeFrame;   //    для каждого таймфрейма
   string            m_Symbol;      //    каждого символа

   //---- 
  };
//+------------------------------------------------------------------+
 
Mikhail Tkachev:
NB_M1 ist ein Objekt dieser Klasse. Wie kann man sie einbauen?
Wozu dient die Variable NB_M1?
 
Mikhail Tkachev:
NB_M1 ist ein Objekt dieser Klasse. Wie kann man sie einbauen?

Ich denke, so sollte es sein.

bool NB_M1;
int OnInit()
{
}

void OnTick()
{
   NB_M1=new CIsNewBar(_Symbol,PERIOD_M1);  // Эта строка потом будет в цикле для разных символов
   if (NB_M1)  // (1) Если появился новый бар M1
        {....}
    ......
}
Grund der Beschwerde: