Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 323

 

Estou tentando descobrir meu contador e reescrevê-lo em classes, mas ainda não consigo produzir as funções paralelas de trabalho. Acho que a m_pause deve ser declarada de forma diferente. Como deve ser feito corretamente?


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

Estou tentando descobrir meu contador e reescrevê-lo em classes, mas ainda não consigo produzir as funções paralelas de trabalho. Acho que a m_pause deve ser declarada de forma diferente. Como deve ser feito corretamente?


Você precisa verificá-lo no temporizador.

E deveria haver dois objetos CCounter - cada um para um contador diferente.

 
Artyom Trishkin:

O temporizador tem que ser verificado.

Obrigado, mas não entendo porque o temporizador precisa verificar? Para cada tique, o Expert Advisor acessa o CCounter e conta os tiquetaques "count++".

 
Nauris Zukas:

Obrigado, mas não entendo porque o temporizador precisa ser verificado? Para cada tic tac, a EA acessa o CCounter e conta os ticks "count++".

Portanto, não está no temporizador...

 
Artyom Trishkin:

E deve haver dois objetos CCounter - cada um para seu contador.

Não tenho certeza do que você quer dizer com "dois objetos CCounter". Li o artigo https://www.mql5.com/ru/articles/351, que diz: "Uma vez carregada, a classe se torna um objeto". Isso significa que terei que fazer cópias das aulas para cada balcão? Então, acontece as mesmas cópias com nomes diferentes que eu posso fazer sem aulas? O objetivo era se livrar da cópia usando classes, porque preciso de mais de uma centena delas. Disseram-me que é possível fazê-lo com uma aula, então comecei a brincar com as aulas. Ou o que eu estou dizendo sobre "dois objetos CCounter"?

Vitaly Muzichenko 2017.09.26 15:43 RU
Nauris Zukas:

Preso, me parece, em um lugar tão simples. O que fazer com int chekcount global=0; int count=0; no caso de eu querer executar várias funções de contador() em paralelo?

Basta usar uma classe ou fazer cópias de funções com nomes diferentes.

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

Não tenho certeza do que você quer dizer com "dois objetos CCounter". Li o artigo https://www.mql5.com/ru/articles/351, que diz: "Uma vez carregada, a classe se torna um objeto". Isso significa que eu tenho que fazer cópias das aulas para cada balcão? Então, acontece as mesmas cópias com nomes diferentes que eu posso fazer sem aulas? O objetivo era se livrar da cópia usando classes, porque preciso de mais de uma centena delas. Disseram-me que é possível fazê-lo com uma aula, então comecei a brincar com as aulas. Ou o que eu estou dizendo sobre "dois objetos CCounter"?

Vitaly Muzichenko 2017.09.26 15:43 RU

Basta usar uma classe, ou fazer cópias de funções com nomes diferentes.

Basta criar tantos objetos de classe quantos forem necessários. E use cada um deles para sua contagem.
O CArrayObj é para você
 
Artyom Trishkin:
Basta criar tantos objetos de classe quantos forem necessários. E use cada um deles para sua contagem.
CArrayObj para ajudar você

Obrigado, vou ler o que é este CArrayObj e tentar descobrir o que é. :)

 

Como posso criar uma matriz unidimensional dos preços de todos os pedidos abertos? Esta é provavelmente uma pergunta muito simples para você, mas por favor informe)

 
vikzip:

Como posso criar uma matriz unidimensional dos preços de todos os pedidos abertos?

Percorra todos os pedidos em loop e escreva os preços em aberto na matriz.

 
Alexey Viktorov:

Percorra todos os pedidos do loop e escreva os preços de abertura na matriz.


Obrigado!