Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1566

 
Mikhail Tkachev:

Если у вас советник из трех строк, то конечно ООП не нужно)

Вот кабы мне нужно было создать Гоблина с одной рукой и тремя ногами, а потом с одной ногой и тремя руками - то да, тут ООП бы меня реально выручил. Хотя... тоже не факт.

А тут то нафига оно нужно?

И совсем не важно сколько у Вас "строк". ;)
 
Mikhail Tkachev:

Только int или double?
А если переменная - объект класса?
А если количество таких объектов заранее [до выполнения OnInit()] неизвестно ?
А если параметры конструкторов заранее [до выполнения OnInit()] неизвестны?

Ты хорошую ссылку дал и там хороший пример по поводу объявления классов.

В любом случае Глобальные объявляются до OnInit(), остальные объявляются каждый раз по мере необходимости

 
MakarFX:

В любом случае Глобальные объявляются до OnInit(), остальные объявляются каждый раз по мере необходимости

В теории это понятно.
На практике, после :

declaration of 'NB_M1' hides global variable -> на строку в OnInit()

see previous declaration of 'NB_M1'

эксперт работает так, как бы NB_M1 была глобальной (и правильно инициализированной), хотя она и скрыта локальной декларацией и проинициализирована как локальная в OnInit().

По идее, оно не должно работать вообще.

 
Mikhail Tkachev:

В теории это понятно.
На практике, после :

declaration of 'NB_M1' hides global variable -> на строку в OnInit()

see previous declaration of 'NB_M1'

эксперт работает так, как бы NB_M1 была глобальной (и правильно инициализированной), хотя она и скрыта локальной декларацией в OnInit().

По идее, оно не должно работать вообще.

А что такое NB_M1? Возможно она уже объявлена в библиотеке? И вообще без кода, как глухой со слепым)
 
Сергей Таболин:


И совсем не важно сколько у Вас "строк". ;)

Когда у вас само собой наберется сотня-другая строк кода, потому что хочется прикрутить с начала это, а вот это уже забыл зачем, потом прикрутить ещё и это, то естественным образом (?) возникнет мысль: "А как бы это дело упорядочить?"  Или не возникнет)

 
MakarFX:
А что такое NB_M1? Возможно она уже объявлена в библиотеке? И вообще без кода, как глухой со слепым)

NB_M1  - объект класса CIsNewBar для определения начала нового бара для каждого символа. Нет, в библиотеке она не объявлена.
Код в первом сообщении : https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

 
Mikhail Tkachev:

NB_M1  - объект класса CIsNewBar для определения начала нового бара для каждого символа. Нет, в библиотеке она не объявлена.
Код в первом сообщении : https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

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

а можно взглянуть на код этого класса?

 
NB_M1 является объектом этого класса. Как же её внутрь засунуть ?
//+------------------------------------------------------------------+
//|                                                     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 является объектом этого класса. Как же её внутрь засунуть ?
зачем нужна эта переменная NB_M1 ?
 
Mikhail Tkachev:
NB_M1 является объектом этого класса. Как же её внутрь засунуть ?

думаю так надо

bool NB_M1;
int OnInit()
{
}

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