Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 323

 

Estoy tratando de entender mi contador y reescribirlo en clases, pero todavía no puedo dar salida a las funciones paralelas de trabajo. Creo que m_pause debería declararse de otra manera. ¿Cómo debe hacerse correctamente?


#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:

Estoy tratando de entender mi contador y reescribirlo en clases, pero todavía no puedo dar salida a las funciones paralelas de trabajo. Creo que m_pause debería declararse de otra manera. ¿Cómo debe hacerse correctamente?


Tienes que comprobarlo en el temporizador.

Y debería haber dos objetos CCounter - cada uno para un contador diferente.

 
Artyom Trishkin:

Hay que comprobar el temporizador.

Gracias, pero no entiendo por qué el temporizador tiene que comprobarlo. Por cada tick el Asesor Experto accede al CCounter y cuenta los ticks "count++".

 
Nauris Zukas:

Gracias, pero no entiendo por qué hay que comprobar el temporizador. Por cada tick, el EA accede al CCounter y cuenta los ticks "count++".

Así que no está en el temporizador...

 
Artyom Trishkin:

Y debe haber dos objetos CCounter - cada uno para su contador.

No estoy seguro de lo que quieres decir con "dos objetos CCounter". He leído el artículo https://www.mql5.com/ru/articles/351, dice "Una vez cargada, la clase se convierte en un objeto". ¿Significa que tendré que hacer copias de las clases para cada contador? Así que resulta que las mismas copias con diferentes nombres que puedo hacer sin clases? El objetivo era deshacerse de la copia mediante clases, porque necesito más de un centenar de ellas. Me dijeron que es posible hacerlo con una clase, así que empecé a trastear con las clases. ¿O qué estoy diciendo sobre "dos objetos CCounter"?

Vitaly Muzichenko 2017.09.26 15:43 RU
Nauris Zukas:

Atascado, me parece, en un lugar tan simple. ¿Qué hacer con global int chekcount=0; int count=0; en caso de que quiera ejecutar varias funciones counter() en paralelo?

Sólo tienes que utilizar una clase o hacer copias de las funciones con nombres diferentes.

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

No estoy seguro de lo que quieres decir con "dos objetos CCounter". He leído el artículo https://www.mql5.com/ru/articles/351, dice "Una vez cargada, la clase se convierte en un objeto". ¿Significa que tendré que hacer copias de las clases para cada contador? Así que resulta que las mismas copias con diferentes nombres que puedo hacer sin clases? El objetivo era deshacerse de la copia mediante clases, porque necesito más de un centenar de ellas. Me dijeron que es posible hacerlo con una clase, así que empecé a trastear con las clases. ¿O qué estoy diciendo sobre "dos objetos CCounter"?

Vitaly Muzichenko 2017.09.26 15:43 RU

Utilice sólo una clase, o haga copias de las funciones con nombres diferentes.

Sólo tienes que crear tantos objetos de clase como necesites. Y utiliza cada uno de ellos para su recuento.
CArrayObj es para ti
 
Artyom Trishkin:
Sólo tienes que crear tantos objetos de clase como necesites. Y utiliza cada uno de ellos para su recuento.
CArrayObj para ayudarle

Gracias, leeré lo que es este CArrayObj y trataré de entenderlo. :)

 

¿Cómo puedo crear una matriz unidimensional con los precios de todas las órdenes abiertas? Esta es probablemente una pregunta muy simple para usted, pero por favor asesore)

 
vikzip:

¿Cómo puedo crear una matriz unidimensional con los precios de todas las órdenes abiertas?

Recorre todas las órdenes en un bucle y escribe los precios abiertos en el array.

 
Alexey Viktorov:

Recorre todos los pedidos en el bucle y escribe los precios de apertura en el array.


Gracias.