Любые вопросы новичков по 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 как-то по другому должно объявляться . Как правильно надо делать?


В таймере нужно проверять.

И должно быть два объекта CCounter - каждый на свой счётчик.

 
Artyom Trishkin:

В таймере нужно проверять.

Спасибо, но не понял почему в таймере нужно проверять? На каждый тик эксперт обращается к CCounter и подсчитывает тики "count++".

 
Nauris Zukas:

Спасибо, но не понял почему в таймере нужно проверять? На каждый тик эксперт обращается к CCounter и подсчитывает тики "count++".

Значит не в таймере...

 
Artyom Trishkin:

И должно быть два объекта CCounter - каждый на свой счётчик.

Не понял что вы имели в виду "два объекта CCounter". Почитал статью https://www.mql5.com/ru/articles/351 , там написано "После загрузки класс становится объектом". Это получается мне надо будет делать копии классов для каждого счётчика? Так получается те же копии с разными именами что я могу и в без классов сделать? Цель была избавится от копирование используя классы, поскольку мне таких понадобится боле ста. Мне написали что это возможно сделать использовав класс, поэтому я и начал возится с классами. Или я что-то насчет "два объекта CCounter" не понял?

Vitaly Muzichenko 2017.09.26 15:43   RU
Nauris Zukas:

Застрял, как мне кажется, на таком простом месте. Как быть с глобальными int chekcount=0; int count=0; в том случае если я хочу параллельно запускать несколько counter() функций?

Только использовать класс, ну или делать копии функций с разными именами.

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

Не понял что вы имели в виду "два объекта CCounter". Почитал статью https://www.mql5.com/ru/articles/351 , там написано "После загрузки класс становится объектом". Это получается мне надо будет делать копии классов для каждого счётчика? Так получается те же копии с разными именами что я могу и в без классов сделать? Цель была избавится от копирование используя классы, поскольку мне таких понадобится боле ста. Мне написали что это возможно сделать использовав класс, поэтому я и начал возится с классами. Или я что-то насчет "два объекта CCounter" не понял?

Vitaly Muzichenko 2017.09.26 15:43   RU

Только использовать класс, ну или делать копии функций с разными именами.

Просто создайте столько объектов класса, сколько нужно. И используйте каждый для своего подсчёта.
CArrayObj вам в помощь
 
Artyom Trishkin:
Просто создайте столько объектов класса, сколько нужно. И используйте каждый для своего подсчёта.
CArrayObj вам в помощь

Спасибо, почитаю что это за зверь CArrayObj и попытаюсь разобраться. :)

 

Как создать одномерный массив из цен всех открытых ордеров? Для вас это вероятно очень простой вопрос, но подскажите пожалуйста)

 
vikzip:

Как создать одномерный массив из цен всех открытых ордеров?

Перебрать в цикле все ордера и в массив записать цены открытия.

 
Alexey Viktorov:

Перебрать в цикле все ордера и в массив записать цены открытия.


Спасибо!

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