新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1566

 
Mikhail Tkachev:

如果你有一个三行的EA,那么你当然不需要OOP)。

但是,如果我不得不用一只胳膊和三条腿创造哥布林,然后用一条腿和三条胳膊--那么,是的,这就是OOP会真正帮助我的地方。虽然...我也不知道。

把它放在这里有什么意义呢?

而且,你有多少条 "线 "一点也不重要。;)
 
Mikhail Tkachev:

只有int或double?
如果该变量是一个类的对象,怎么办?
如果事先不知道这些对象的数量[在执行OnInit()之前]呢?
如果构造函数的参数事先是未知的[在OnInit()之前]呢?

你给了一个很好的链接和关于类的声明的例子。

在任何情况下,全局的都在OnInit()之前声明;其他的在每次需要的时候声明

 
MakarFX:

在任何情况下,全局的都在OnInit()之前声明,其他的则在每次需要时声明。

这在理论上是清楚的。
在实践中,经过:

NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。

见之前的'NB_M1'声明

专家的工作就像NB_M1是全局的(并且正确地初始化了),尽管它被一个局部声明所隐藏并且在OnInit()中被初始化为局部。

按照想法,它根本就不应该工作。

 
Mikhail Tkachev:

在理论上,这是有道理的。
在实践中,经过:

NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。

见之前的'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
        {....}
    ......
}
原因: