Diskussion zum Artikel "Wir schreiben eine Scalping-Markttiefe aufgrund der graphischen Bibliothek CGraphic" - Seite 4

 
"Each such class has a common parent, the CNode class, which performs only one function, i.e. stores the type of the basic primitive. 
Its only protected constructor requires type specification during element creation." 

Die Klasse CNode speichert den Typ des Basisprimitivs nicht, CEIChart tut dies über das Mitglied m_obj_type.

Danke Vasiliy

 

In neuen Builds des Terminals (etwa seit Version 2170) ist ein Problem mit den Quellen des Artikels ("Writing a scalper's glass") aufgetreten.
Insbesondere die Hauptdatei"MarketBook.mq5" erzeugt beim Kompilieren kritische Fehler:

' Event' - unerwartetes Token, wahrscheinlich fehlt der Typ? MBookBtn.mqh 57 12

Event ' - Funktion ist bereits definiert und hat einen anderen Typ MBookBtn.mqh 57 12

Könnten Sie mir bitte sagen, was falsch ist und wie man es beheben kann?


P.S. Ich habe jetzt"MarketBook.mq5" aus einem alten Artikel von 2015 überprüft. Es stellte sich heraus, dass die gleiche Art von Fehlern mit diesem Projekt auftreten:

'Show' - unerwartetes Token, wahrscheinlich fehlt der Typ? MBookFon.mqh 47 11
'Show' - Funktion bereits definiert und hat anderen Typ MBookFon.mqh 47 11

 
avento:

In neuen Builds des Terminals (etwa seit Version 2170) ist ein Problem mit den Quellen des Artikels ("Writing a scalper's glass") aufgetreten.
Insbesondere die Hauptdatei"MarketBook.mq5" erzeugt kritische Fehler beim Kompilieren:

' Event' - unerwartetes Token, wahrscheinlich fehlt der Typ? MBookBtn.mqh 57 12

Event ' - Funktion ist bereits definiert und hat einen anderen Typ MBookBtn.mqh 57 12

Könnten Sie mir bitte sagen, was falsch ist und wie man es beheben kann?


Die Sprache entwickelt sich weiter und die Anforderungen werden immer strenger.

Schauen wir uns die Datei "MBookBtn.mqh" an, die Deklaration der Klasse CMBookBtn - die Funktion Event ist als void deklariert

//+------------------------------------------------------------------+
//|| Die Klasse repräsentiert die Schaltfläche am oberen Rand des Diagramms, die, wenn sie angeklickt |
//| Es wird ein Panel mit einem Tick-Chart und einer Tabelle mit Aufträgen angezeigt.
//| Ein erneutes Drücken der Taste blendet das Panel aus.
//+------------------------------------------------------------------+
class CMBookBtn : public CElButton
  {
private:

   CMBookArea        m_book_area;
   bool              m_showed_book;
public:
                     CMBookBtn();
   void              SetMarketBookSymbol(string symbol);
   void              Refresh();
   void              Event(int id,long lparam,double dparam,string sparam);
   void              Clear(void);
   virtual void      OnShow(void);
  };

und nun schauen wir uns die Funktion selbst in der Klasse an:

Funktion bereits definiert und hat einen anderen Typ

der zweite Fehler sagt "'Event' - function already defined and has different type MBookBtn.mqh 57 12" - das heißt, die Funktion wurde mit dem Typ void deklariert und hier ist sie ohne Angabe des Typs.


Heilung:

//+------------------------------------------------------------------+
//|| Fangen Sie den Mausklick auf unsere Schaltfläche ab. Wenn die Schaltfläche nach |
//| Klick im gedrückten Zustand - zeigt das Panel an. Wenn im || Zustand
//| Nach unten drücken - das Panel ausblenden|
//+------------------------------------------------------------------+
void  CMBookBtn::Event(int id,long lparam,double dparam,string sparam)
  {

- Fügen Sie einfach void vor die Funktion im Klassenkörper ein.


Kompilieren Sie nun die ... Indicators\MarketBookArticle\MarketBook.mq5 - es gibt keine Fehler und führen Sie es aus: das Glas funktioniert.

 
Lucas:
Wenn ich den gesamten Code kopiere und einfüge, um ihn zu kompilieren, tritt beim Kompilieren ein Fehler auf. Kennt jemand eine Lösung?

Lucas, wenn der Fehler mit einem unerwarteten Token in der CMBookBtn-Klasse zusammenhängt, muss dem Aufruf der Funktion CMBookBtn::Event ein void vorangestellt werden.


Das ist, was wir im Moment hatten.

 
Vladimir Karputov, vielen Dank für diese ausführliche Antwort!
 

Hallo Vasiliy, vielen Dank für Ihren schönen Artikel. Ich bin neu in der MQL5-Welt und stehe vor einer Herausforderung, wenn ich versuche, deinen Code lokal auszuführen. Ich glaube, es ist ein sehr dummes Problem, aber ich bin nicht in der Lage, es zu lösen

Wenn ich versuche, Ihren Code von MarketBook.mq5 aus zu kompilieren, erhalte ich die unten abgebildete Fehlermeldung.

Können Sie mir bitte helfen, dieses Problem zu lösen?

 
Das ist der Fehler, der bei mir auftritt. Können Sie mir helfen?
Dateien:
Error.jpg  365 kb
 

Hallo.

Können Sie mir bitte sagen, ob es möglich ist, die Zeit des gefundenen Indexes in der Klasse MarketBook.mqh zu fixieren - zu speichern?

void Calculation(void)
   {
      // FÜR DIE ABFRAGESEITE
      int begin = (int)m_book.InfoGetInteger(MBOOK_LAST_ASK_INDEX);
      int end = (int)m_book.InfoGetInteger(MBOOK_BEST_ASK_INDEX);
      //m_ask_best_index
      for(int i = begin; i <= end && begin !=-1; i++)
      {
         if(m_book.MarketBook[i].volume > m_max_ask_volume)
         {
            m_max_ask_index = i;
            m_max_ask_volume = m_book.MarketBook[i].volume;
         }
         m_sum_ask_volume += m_book.MarketBook[i].volume;
      }
      // FÜR DIE ANGEBOTSSEITE
      begin = (int)m_book.InfoGetInteger(MBOOK_BEST_BID_INDEX);
      end = (int)m_book.InfoGetInteger(MBOOK_LAST_BID_INDEX);
      for(int i = begin; i <= end && begin != -1; i++)
      {
         if(m_book.MarketBook[i].volume > m_max_bid_volume)
         {
            m_max_bid_index = i;
            m_max_bid_volume = m_book.MarketBook[i].volume;
         }
         m_sum_bid_volume += m_book.MarketBook[i].volume;
      }
      m_calculation = true;
   }

In dieser Methode finden wir den Preisindex, auf dem sich das maximale Volumen auf der Ask- und Bid-Seite befindet.

Ich möchte auch wissen, zu welcher Endzeit wir diesen Index erhalten haben.


Die Struktur des Stacks

struct MqlBookInfo 
  { 
   ENUM_BOOK_TYPE   type;            // Anfragetyp aus der Aufzählung ENUM_BOOK_TYPE 
   double           price;           // Preis 
   long             volume;          // Volumen 
   double           volume_real;     // Volumen mit erhöhter Genauigkeit 
  };


gibt uns 4 Parameter, aber es gibt keine Zeit darin.


Wer kann mir sagen, wie ich mir die Zeit des gefundenen Index merken kann?

 
Konstantin Seredkin:

Hallo.

Könnten Sie mir bitte sagen, ob es möglich ist, die Zeit des gefundenen Index in der Klasse MarketBook.mqh zu speichern?

In dieser Methode finden wir den Preisindex, auf dem das maximale Volumen auf der Ask- und Bid-Seite steht.

Ich möchte auch wissen, zu welcher Endzeit wir diesen Index erhalten haben.


Aufbau des Glases


Gibt uns 4 Parameter, aber es hat keine Zeit.


Kann mir jemand einen Tipp geben, wie man sich die Zeit des gefundenen Index merken kann?

Übernehmen Sie die Struktur und fügen Sie ein zusätzliches Feld hinzu, dem Sie beim Ausfüllen die Tickzeit hinzufügen.

 
Konstantin Seredkin:

Hallo.

Könnten Sie mir bitte sagen, ob es möglich ist, die Zeit des gefundenen Index in der Klasse MarketBook.mqh zu speichern?

In dieser Methode finden wir den Preisindex, auf dem das maximale Volumen auf der Ask- und Bid-Seite steht.

Ich möchte auch wissen, zu welcher Endzeit wir diesen Index erhalten haben.

Die Struktur des Glases

gibt uns 4 Parameter, aber sie enthält keine Zeitangabe.

Wer kann uns in die Richtung, wie man die Zeit des gefundenen Index erinnern zeigen

Es gibt keine Zeit, denn der Zeitpunkt des Eintreffens des Kurses in MQL5 kann nicht erlernt werden. Das Maximum, was man tun kann, ist, sich die Zeit zum Zeitpunkt des Eintreffens des OnBookEvent-Ereignisses zu merken, also merken Sie sie sich. Das Erinnern an die Zeit des Auffindens der Spitzen des Stapels ist ebenfalls sinnlos, Sie brauchen die Zeit der Ankunft des Kursstapels, nicht die Zeit des Auffindens seines maximalen Index.