Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1320

 
pivomoe:

Nach dem Upgrade auf Version 2981 erscheint ein Fehler in der Zeile

Bitte teilen Sie mir mit, wie ich diese Leitung ersetzen kann.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Eigenheiten von mql5, Tipps und Tricks

Ilyas, 2021.05.28 18:18

Wir erweitern unsere Initialisierungssequenzen "{ ... In der nächsten Version werden wir die Verwendung beliebiger Ausdrücke erlauben, nicht nur konstanter.

Anstelle dieser Änderung wird es eine Einschränkung bei der Verwendung von Konstanten für Aufzählungen geben (wie bei einem gewöhnlichen Ausdruck): Wenn die Konstante nicht zur Aufzählung gehört, wird der entsprechende Fehler ausgegeben.

Die Analyse bestehender Codes hat gezeigt, dass die einzelne Nullfolge "{0}" häufig falsch verwendet wird.

Zum Beispiel so:

MqlTradeRequest request={0};


Eine solche Notation bedeutet, dass für das erste Feld der Struktur der Wert Null gesetzt wird und die übrigen Felder auf Null gesetzt werden.

Für die obige Codezeile ergibt sich nach den neuen Regeln ein Fehler, da das erste Feld den Typ ENUM_TRADE_REQUEST_ACTIONS hat, eine Aufzählung, die nicht den Wert "0" hat.

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Der richtige Weg wäre:

MqlTradeRequest request={};

 
Ich danke Ihnen.
 
Kira27:

Also ich schreibe -- von welcher Klasse sollte ich meine Klasse erben, um diese Methoden aus ihrer Standardbibliothek zu verwenden?

Was ist an meiner Frage falsch? ))))

 

Hier ist der Code, was ist los?

//+------------------------------------------------------------------+
//|                                            Test_Nasledovania.mqh |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Object.mqh>
#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Test_Nasledovania : public CObject
  {
private:

public:
                     Test_Nasledovania();
                    ~Test_Nasledovania();

   void              test();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::Test_Nasledovania()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::~Test_Nasledovania()
  {
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void      Test_Nasledovania::test()
{
Buy  -- Метод Buy не высвечивается как подключеный
}
//+------------------------------------------------------------------+

Die Klasse umfasst


Die Klasse Test_Nasledovania : public CObject selbst ist ein Erbe der Basisklasse CObject der gesamten Standardbibliothek).

 
Kira27:

Hier ist der Code, was ist los?

Die Klasse umfasst


Die Klasse Test_Nasledovania : public CObject selbst ist ein Erbe der Basisklasse CObject der gesamten Standardbibliothek).

Neben der Anbindung der Handelsklasse müssen Sie auch ein Objekt der Handelsklasse erstellen und dann über das erstellte Objekt auf die Methoden der Klasse verweisen

***
#include <Trade\Trade.mqh>
//---
CTrade         m_trade;                      // object of CTrade class
***
void OnTick()
  {
   m_trade.Buy(***
  }
 
Kira27:

Was ist an meiner Frage falsch? ))))

Denn in der Hilfe ist die gesamte Vererbung all dieser Klassen schwarz auf weiß beschrieben.

 
Vladimir Karputov:

Zusätzlich zur Anbindung einer Handelsklasse müssen Sie auch ein Objekt dieser Handelsklasse erstellen und dann über das erstellte Objekt auf die Methoden der Klasse verweisen

Die Frage nach der Verwendung von Klassenmethoden in Expert Advisors und Skripten bezieht sich natürlich auf die Erstellung von Objekten, aber die Frage bezieht sich auf die Verwendung von Methoden einer Basisklasse in einer Nachfolgeklasse. Warum müssen wir dort Objekte erstellen?

 
Kira27:

Was die Verwendung von Methoden von Klassen in Expert Advisors und Skripten betrifft, so ist es selbstverständlich, dass wir Objekte erstellen. Aber die Frage bezieht sich auf die Verwendung von Methoden einer Basisklasse innerhalb einer Nachfolgeklasse. Warum müssen Sie dort Objekte erstellen?

Sie haben Ihre Klasse von CObject geerbt:

class Test_Nasledovania : public CObject

Entschuldigung, aber welche Methoden haben Sie denn erwartet?

Документация по MQL5: Стандартная библиотека / Базовый класс CObject
Документация по MQL5: Стандартная библиотека / Базовый класс CObject
  • www.mql5.com
Базовый класс CObject - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Hier ein Beispiel für die Verwendung von Methoden einer Basisklasse innerhalb einer geerbten Klasse ohne Verwendung eines Objekts

#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//#include <Object.mqh>
#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Test_Nasledovania : public CTrade
  {
private:

public:
                     Test_Nasledovania();
                    ~Test_Nasledovania();

   void              test();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::Test_Nasledovania()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::~Test_Nasledovania()
  {
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void      Test_Nasledovania::test()
{
Buy
}
//+------------------------------------------------------------------+

Ich möchte also alle Methoden verwenden, die in

Von welcher Klasse sollte ich meine Klasse erben, so dass ich die Methoden all dieser Klassen in meiner Klasse verwenden kann, ohne Objekte zu erstellen? Wenn das überhaupt möglich ist)))

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Artyom Trishkin:

Sie haben Ihre Klasse von CObject geerbt:

Entschuldigung, welche Methoden haben Sie denn erwartet?

Ich stimme zu))), ich war dumm))), die Basisklasse von all diesen Methoden, nicht zulassen, dass Methoden von Klassen seiner Nachkommen zu verwenden)))