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

 

自分のカウンターを把握してクラスで書き換えているのですが、やはり動作する並列関数が出力できません。m_pauseは別の宣言にした方がいいと思います。どうすれば正しくできるのか?


#ifdef __MQL4__
#endif 
//+------------------------------------------------------------------+
//| Счётчик                                                          |
//+------------------------------------------------------------------+
class CCounter
  {
private:
   //--- Шаг счётчика
   int               count;
   //--- Счётчик 
   int               chekcount;
   //---      
   int               m_pause;

public:
   //--- Проверяет прохождение указанного временного интервала 
   int               CheckCounter(const int pause);

   void ZeroCounter(void){count=0;chekcount=0;}
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CCounter::CheckCounter(const int pause)
  {
   m_pause=pause;
   count++;
   Print(" Class    count= ",count);
   Print(" Class    pause= ",pause);
   Print(" Class    m_pause= ",m_pause);

   if(count>=chekcount+m_pause)
     {
      chekcount=count;
     }
   return(chekcount);
  }
//+------------------------------------------------------------------+
#include <Test_Class_Tmier_libr_1.mqh>
CCounter TC;

void OnTick()
  {
Print("0 TC.CheckCounter(10)= ",TC.CheckCounter(10));   
Print("1 TC.CheckCounter(15)= ",TC.CheckCounter(15));
}

 
Nauris Zukas:

自分のカウンターを把握してクラスで書き換えているのですが、やはり動作する並列関数が出力できません。m_pauseは別の宣言にした方がいいと思います。どうすれば正しくできるのか?


タイマーで確認する必要があります。

そして、2つのCCounterオブジェクトがあるはずです - それぞれが異なるカウンターのためのものです。

 
Artyom Trishkin:

タイマーを確認する必要があります。

ありがとうございます。しかし、なぜタイマーがチェックする必要があるのかが理解できません。エキスパートアドバイザーは、1ティック ごとにCCounterにアクセスし、「count++」でティックを数えます。

 
Nauris Zukas:

ありがとうございます。しかし、なぜタイマーを確認する必要があるのか理解できません。ティック ごとに、EAはCCounterにアクセスし、ティックを「count++」で数えます。

だから、タイマーには入っていない...。

 
Artyom Trishkin:

そして、2つのCCounterオブジェクトが必要です - それぞれがそのカウンターのためです。

2つのCounterオブジェクト」の意味がよくわからない。https://www.mql5.com/ru/articles/351 を読みましたが、「読み込まれると、クラスはオブジェクトになる」と書いてありますね。カウンターごとに授業のコピーを取らなければならないということでしょうか。つまり、クラスがなくてもできる、名前の違う同じコピーが判明したわけですね。100個以上必要なので、クラスを使ったコピーをなくすことが目的でした。クラスでも可能だと言われたので、クラスでいじり始めたんです。あるいは、「2つのCounterオブジェクト」について、私は何を言っているのだろうか。

Vitaly Muzichenko 2017.09.26 15:43 RU
ナウリス・ズーカス

そんな単純なところで、立ち往生しているように思える。複数のcounter()関数を 並列に実行したい場合、global int chekcount=0; int count=0; はどうすればいいのでしょうか?

クラスを使うか、違う名前の関数のコピーを作ればいいだけです。

Основы объектно-ориентированного программирования
Основы объектно-ориентированного программирования
  • 2011.12.06
  • Dmitry Fedoseev
  • www.mql5.com
На самом деле все намного проще. Чтобы пользоваться ООП вовсе не нужно знать, что означают эти слова - можно просто использовать предоставляемые ООП возможности, даже не зная как они называются. Но все же, надеюсь, в процессе прочтения статьи все желающие не только научатся использовать ООП в достаточной мере, но и разъяснят себе значения этих...
 
Nauris Zukas:

2つのCounterオブジェクト」の意味がよくわからない。https://www.mql5.com/ru/articles/351 を読みましたが、「読み込まれると、クラスはオブジェクトになる」と書いてありますね。カウンターごとに授業のコピーを取らなければならないということでしょうか。つまり、クラスがなくてもできる、名前の違う同じコピーが判明したわけですね。100個以上必要なので、クラスを使ったコピーをなくすことが目的でした。クラスでも可能だと言われたので、クラスでいじり始めたんです。あるいは、「2つのCounterオブジェクト」について、私は何を言っているのだろうか。

Vitaly Muzichenko 2017.09.26 15:43 RU

クラスのみを使用する、または異なる名前の関数のコピーを作成する。

必要な数だけクラスオブジェクトを作ればいいのです。そして、それぞれをカウントに使ってください。
CArrayObjはあなたのためにある
 
Artyom Trishkin:
必要な数だけクラスオブジェクトを作ればいいのです。そして、それぞれをカウントに使ってください。
CArrayObjを使用すると便利です

ありがとうございます!このCArrayObjが 何なのか、読んでみて考えてみます。:)

 

すべての未決済注文の価格の一次元配列を作成するにはどうすればよいですか?これは、おそらくあなたにとって非常に単純な質問ですが、アドバイスをお願いします)

 
vikzip:

すべての未決済注文の価格の一次元配列を作成するにはどうすればよいですか?

ループですべての注文を処理し、オープンプライスを 配列に書き込む。

 
Alexey Viktorov:

ループ内のすべての注文を処理し、始値を 配列に書き込む。


ありがとうございました。