MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1566

 
Mikhail Tkachev:

3行のEAであれば、当然OOPは不要です)。

でも、もしゴブリンを1本の腕と3本の脚で作り、さらに1本の脚と3本の腕で作らなければならないとしたら......そう、その時はOOPが本当に役に立つのです。とはいえ...私にもわかりません。

ここに置く意味はあるのか?

そして、「線」の数はまったく関係ないのです。;)
 
Mikhail Tkachev:

intのみ、doubleのみ?
変数がクラスのオブジェクトの 場合はどうでしょうか?
また、そのようなオブジェクトの数があらかじめ(OnInit()の実行前に)不明な場合は?
また、コンストラクタのパラメータがあらかじめ[OnInit()の前に]不明である場合は?

クラスの宣言について、良いリンクと例を示してくれました。

いずれにせよ、グローバルなものはOnInit()の前に宣言され、その他のものは必要な都度宣言されます。

 
MakarFX:

いずれにせよ、GlobalなものはOnInit()の前に宣言し、その他は必要な都度宣言します。

これは理論的には明らかです。
実際には、:

NB_M1' の宣言でグローバル変数を隠す → OnInit()の1行につき、です。

NB_M1'の以前の宣言を参照。

この場合、ローカル宣言で隠され、OnInit()でローカルとして初期化されても、エキスパートがNB_M1がグローバル(かつ正しく初期化)であるかのように動作します。

考えようによっては、まったく機能しないはずです。

 
Mikhail Tkachev:

理屈ではわかるのですが、これがなかなか難しい。
実際には、:

NB_M1' の宣言でグローバル変数を隠す → OnInit()の1行につき、です。

NB_M1'の以前の宣言を参照。

を実行すると、OnInit()のローカル宣言によって隠されていますが、NB_M1がグローバルであるかのように(そして正しく初期化されているように)エキスパートが動作します。

考えようによっては、まったく機能しないはずです。

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
        {....}
    ......
}