Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1320

 
pivomoe:

После обновления до  версии  2981 стала появляться ошибка в строке

Подскажите чем можно заменить эту строку.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

Ilyas, 2021.05.28 18:18

Мы расширяем инициализирующие последовательности "{ ... }", в ближайшем билде будет разрешено использовать любое выражение, а не только константное.

Вместо с этим изменением, появится и граничение на использование констант для перечислений (как для обычного выражения): если константа не входит в перечисление, то будет выдана соответствующая ошибка.

Анализ существующих кодов показал, что часто неправильно используется последовательность из одного нуля - "{0}"

Например так:

MqlTradeRequest request={0};


Такая запись означает, выставить значение ноль для первого поля структуры и обнулить остальные поля.

Для приведённой выше строки кода, по новым правилам, будет выдана ошибка, т.к. первое поле имеет тип ENUM_TRADE_REQUEST_ACTIONS, перечисление, в котором отсутствует значение "0"

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Правильно будет так:

MqlTradeRequest request={};

 
Спасибо.
 
Kira27:

Вот я и пишу  --  от какого класса наследовать свой класс?, чтоб использовать эти методы их стандартной библиотеки

Да что же с моим вопросом не так то?))))

 

Вот код, что не так?  

//+------------------------------------------------------------------+
//|                                            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 не высвечивается как подключеный
}
//+------------------------------------------------------------------+

В состав класса входит 


Сам  class Test_Nasledovania : public CObject  наследник базового класса CObject всей стандартной библиотеки.   В чём прикол???  Подскажите пожалуйста)

 
Kira27:

Вот код, что не так?  

В состав класса входит 


Сам  class Test_Nasledovania : public CObject  наследник базового класса CObject всей стандартной библиотеки.   В чём прикол???  Подскажите пожалуйста)

Кроме подключения торгового класса, нужно ещё и создать объект этого торгового класса и потом уже обращаться к методам класса через созданный объект

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

Да что же с моим вопросом не так то?))))

Потому, что в справке всё наследование всех этих классов чёрным по белому написано.

 
Vladimir Karputov:

Кроме подключения торгового класса, нужно ещё и создать объект этого торгового класса и потом уже обращаться к методам класса через созданный объект

Про использование методов классов, в советниках и скрипртах само собой разумеется создание объектов.  Но вопрос про использование методов базового класса, в нутри класса наследника. Там то зачем объекты создавать?

 
Kira27:

Про использование методов классов, в советниках и скрипртах само собой разумеется создание объектов.  Но вопрос про использование методов базового класса, в нутри класса наследника. Там то зачем объекты создавать?

Вы унаследовали свой класс от CObject:

class Test_Nasledovania : public CObject

Простите, а какие методы вы ожидали увидеть?

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

Вот пример использования методов базового класса внутри наследника без использования объекта

#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
}
//+------------------------------------------------------------------+

Я же хочу использовать так все методы входящие в состав 

От какого класса наследовать свой, чтоб использовать методы всех этих классов, внутри своего класса без создания объектов?   Если такое вообще возможно?)))

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

Вы унаследовали свой класс от CObject:

Простите, а какие методы вы ожидали увидеть?

Тут соглассен)), тупанул)), базовый класс всех этих методов, не дает возможности использовать методы классов его наследников)))

Причина обращения: