Discussão do artigo "Escrevendo um livro de ofertas de scalping com base na biblioteca gráfica CGraphic" - página 4

 
"Each such class has a common parent, the CNode class, which performs only one function, i.e. stores the type of the basic primitive. 
Its only protected constructor requires type specification during element creation." 

A classe CNode não armazena o tipo da primitiva básica, mas o CEIChart o faz por meio do membro m_obj_type.

Obrigado, Vasiliy

 

Em novas compilações do terminal (aproximadamente desde a versão 2170), apareceu um problema com os códigos-fonte do artigo ("Writing a scalper's glass").
Em particular, o arquivo principal"MarketBook.mq5" gera erros críticos durante a compilação:

' Event' - token inesperado, provavelmente o tipo está faltando... MBookBtn.mqh 57 12

' Event' - função já definida e com tipo diferente MBookBtn.mqh 57 12

Você poderia me dizer o que está errado e como consertar?


P.S. agora verifiqueio "MarketBook.mq5" de um artigo antigo de 2015. Descobriu-se que o mesmo tipo de erro ocorre com esse projeto:

'Show' - token inesperado, provavelmente o tipo está faltando... MBookFon.mqh 47 11
'Show' - função já definida e com tipo diferente MBookFon.mqh 47 11

 
avento:

Em novas compilações do terminal (aproximadamente desde a versão 2170), apareceu um problema com os códigos-fonte do artigo ("Writing a scalper's glass").
Em particular, o arquivo principal"MarketBook.mq5" gera erros críticos durante a compilação:

' Event' - token inesperado, provavelmente o tipo está faltando... MBookBtn.mqh 57 12

' Event' - função já definida e com tipo diferente MBookBtn.mqh 57 12

Você poderia me dizer o que está errado e como consertar?


A linguagem está sendo desenvolvida e os requisitos estão ficando mais rigorosos.

Vejamos o arquivo "MBookBtn.mqh", a declaração da classe CMBookBtn - a função Event é declarada como void

//+------------------------------------------------------------------+
//|| A classe representa o botão na parte superior do gráfico que, quando clicado
//| É exibido um painel com um gráfico de ticks e uma tabela de ordens.
//| Pressionar o botão novamente oculta o painel.
//+------------------------------------------------------------------+
class CMBookBtn : public CElButton
  {
private:

   CMBookArea        m_book_area;
   bool              m_showed_book;
public:
                     CMBookBtn();
   void              SetMarketBookSymbol(string symbol);
   void              Refresh();
   void              Event(int id,long lparam,double dparam,string sparam);
   void              Clear(void);
   virtual void      OnShow(void);
  };

e agora vamos dar uma olhada na própria função na classe:

já definida e tem um tipo diferente

o segundo erro diz "'Event' - function already defined and has different type MBookBtn.mqh 57 12" - ou seja, a função foi declarada com o tipo void e aqui está sem especificar o tipo.


Cure:

//+------------------------------------------------------------------+
//|| Intercepta o clique do mouse no nosso botão. Se o botão após |
//| clique no estado pressionado - mostra o painel. Se estiver no estado ||
//| empurrando para baixo - oculta o painel|
//+------------------------------------------------------------------+
void  CMBookBtn::Event(int id,long lparam,double dparam,string sparam)
  {

- basta adicionar void antes da função no corpo da classe.


Agora compile o ... Indicators\MarketBookArticle\MarketBook.mq5 - não há erros e execute-o: o vidro funciona.

 
Lucas:
O código inteiro, quando copio e colo para compilar, da erro na hora de compilar. Alguém sabe de alguma solução?

Lucas, se o erro estiver relacionado a unexpected token, da classe CMBookBtn, na chamada da função  CMBookBtn::Event deve ser precedida por void 


Era o  que tínha-mos para o momento.

 
Vladimir Karputov, muito obrigado por sua resposta tão completa!
 

Olá, Vasiliy, obrigado por seu belo artigo. Sou novo no mundo da MQL5 e estou enfrentando um desafio ao tentar executar seu código localmente. Acredito que seja um problema muito bobo, mas não estou conseguindo resolvê-lo

Quando tento compilar seu código a partir do MarketBook.mq5, recebo o erro que você pode ver abaixo.

Você pode me ajudar a resolver esse problema?

 
Este é o erro que estou enfrentando. Você pode me ajudar?
Arquivos anexados:
Error.jpg  365 kb
 

Olá.

Você pode me dizer se é possível fixar - lembrar a hora do índice encontrado na classe MarketBook.mqh?

void Calculation(void)
   {
      // PARA O LADO DA PERGUNTA
      int begin = (int)m_book.InfoGetInteger(MBOOK_LAST_ASK_INDEX);
      int end = (int)m_book.InfoGetInteger(MBOOK_BEST_ASK_INDEX);
      //m_ask_best_index
      for(int i = begin; i <= end && begin !=-1; i++)
      {
         if(m_book.MarketBook[i].volume > m_max_ask_volume)
         {
            m_max_ask_index = i;
            m_max_ask_volume = m_book.MarketBook[i].volume;
         }
         m_sum_ask_volume += m_book.MarketBook[i].volume;
      }
      // PARA O LADO DA OFERTA
      begin = (int)m_book.InfoGetInteger(MBOOK_BEST_BID_INDEX);
      end = (int)m_book.InfoGetInteger(MBOOK_LAST_BID_INDEX);
      for(int i = begin; i <= end && begin != -1; i++)
      {
         if(m_book.MarketBook[i].volume > m_max_bid_volume)
         {
            m_max_bid_index = i;
            m_max_bid_volume = m_book.MarketBook[i].volume;
         }
         m_sum_bid_volume += m_book.MarketBook[i].volume;
      }
      m_calculation = true;
   }

Nesse método, encontramos o índice de preços no qual está localizado o volume máximo nos lados Ask e Bid.

Também quero saber em que momento do terminal obtivemos esse índice.


A estrutura da pilha

struct MqlBookInfo 
  { 
   ENUM_BOOK_TYPE   type;            // tipo de solicitação da enumeração ENUM_BOOK_TYPE 
   double           price;           // preço 
   long             volume;          // volume 
   double           volume_real;     // volume com maior precisão 
  };


nos fornece 4 parâmetros, mas não há tempo neles.


Quem pode me orientar sobre como lembrar a hora do índice encontrado?

 
Konstantin Seredkin:

Olá.

Você poderia me dizer se é possível corrigir - lembrar a hora do índice encontrado na classe MarketBook.mqh?

Nesse método, encontramos o índice de preços no qual está o volume máximo no lado Ask e Bid.

Também gostaria de saber em que momento do terminal obtivemos esse índice.


Estrutura do copo


Fornece 4 parâmetros, mas não tem tempo.


Alguém pode me indicar como lembrar a hora do índice encontrado?

Herdar a estrutura e adicionar um campo adicional ao qual você adicionará a hora do tique ao preenchê-lo.

 
Konstantin Seredkin:

Olá.

Você poderia me dizer se é possível corrigir - lembrar a hora do índice encontrado na classe MarketBook.mqh?

Nesse método, encontramos o índice de preços no qual está o volume máximo no lado Ask e Bid.

Também gostaria de saber em que momento do terminal obtivemos esse índice.

A estrutura do copo

nos fornece 4 parâmetros, mas não há tempo nela.

Quem pode nos indicar como lembrar a hora do índice encontrado?

Não há tempo, porque o tempo de chegada da cotação em MQL5 não pode ser aprendido. O máximo que pode ser feito é lembrar a hora no momento da chegada do evento OnBookEvent, portanto, lembre-se disso. Lembrar a hora de encontrar os topos da pilha também é inútil, pois você precisa da hora de chegada da pilha de preços, não da hora de encontrar seu índice máximo.