Discusión sobre el artículo "Cómo escribir una profundidad de mercado de scalping usando como base la biblioteca 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." 

La clase CNode no almacena el tipo de la primitiva básica. CEIChart lo hace mediante el miembro m_obj_type.

Gracias Vasiliy

 

En las nuevas builds del terminal (aproximadamente desde la versión 2170) apareció un problema con las fuentes del artículo ("Escribiendo el cristal de un scalper").
En particular, el archivo principal"MarketBook.mq5" genera errores críticos durante la compilación:

' Evento' - token inesperado, probablemente falta el tipo MBookBtn.mqh 57 12

Evento ' - función ya definida y tiene un tipo diferente MBookBtn.mqh 57 12

¿Podría decirme qué está mal y cómo solucionarlo?


PD: ahora comprobado"MarketBook.mq5" de un viejo artículo de 2015. Resultó que el mismo tipo de errores se producen con ese proyecto:

' Mostrar' - token inesperado, probablemente falta el tipoMBookFon.mqh 47 11
'Mostrar' - función ya definida y tiene un tipo diferente MBookFon.mqh 47 11

 
avento:

En las nuevas builds del terminal (aproximadamente desde la versión 2170) apareció un problema con las fuentes del artículo ("Escribiendo el cristal de un scalper").
En particular, el archivo principal"MarketBook.mq5" genera errores críticos durante la compilación:

' Evento' - token inesperado, probablemente falta el tipo MBookBtn.mqh 57 12

Evento ' - función ya definida y tiene un tipo diferente MBookBtn.mqh 57 12

¿Podría decirme qué está mal y cómo solucionarlo?


El lenguaje está evolucionando y los requisitos son cada vez más estrictos.

Veamos el archivo "MBookBtn.mqh", la declaración de la clase CMBookBtn - la función Evento se declara como void

//+------------------------------------------------------------------+
//|| La clase representa el botón en la parte superior del gráfico, que, cuando se hace clic en ||.
//| Se muestra un panel con un gráfico de tick y una tabla de órdenes. |||
//| Pulsando de nuevo el botón se oculta el panel.
//+------------------------------------------------------------------+
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);
  };

y ahora miramos la propia función en la clase:

función ya definida y tiene un tipo diferente

el segundo error dice "'Event' - function already defined and has different type MBookBtn.mqh 57 12" - es decir, la función fue declarada con tipo void y aquí está sin especificar el tipo.


Cura:

//+------------------------------------------------------------------+
//|| Interceptar el clic del ratón sobre nuestro botón. Si el botón después de |
//| clic en el estado pulsado - mostrar el panel. Si en el estado ||
//| empujar hacia abajo - ocultar el panel|
//+------------------------------------------------------------------+
void  CMBookBtn::Event(int id,long lparam,double dparam,string sparam)
  {

- simplemente añade void antes de la función en el cuerpo de la clase.


Ahora compile el ... Indicadores\MarketBookArticle\MarketBook.mq5 - no hay errores y ejecutarlo: el vaso funciona.

 
Lucas:
Todo el código, cuando lo copio y pego para compilar, da error al compilar. ¿Alguien sabe alguna solución?

Lucas, si el error está relacionado con un token inesperado en la clase CMBookBtn, la llamada a la función CMBookBtn::Event debe ir precedida de void.


Eso es lo que teníamos por el momento.

 
Vladimir Karputov, ¡muchas gracias por una respuesta tan completa!
 

Hola Vasiliy, gracias por su hermoso artículo. Soy nuevo en el mundo MQL5 y me enfrento a un reto con el fin de tratar de ejecutar el código localmente. Creo que es un problema muy tonto, pero no estoy siendo capaz de resolverlo

Cuando intento compilar tu código desde MarketBook.mq5 obtengo el error que puedes ver a continuación.

¿Puede ayudarme a resolver este problema?

 
Este es el error al que me enfrento. ¿Puede ayudarme?
Archivos adjuntos:
Error.jpg  365 kb
 

Hola.

¿Pueden decirme si es posible fijar - recordar la hora del índice encontrado en la clase MarketBook.mqh?

void Calculation(void)
   {
      // PARA EL LADO ASK
      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 EL LADO DE LA 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;
   }

En este método encontramos el índice de precios en el que se encuentra el volumen máximo en los lados Ask y Bid.

También quiero saber a qué hora terminal obtuvimos este índice.


La estructura de la pila

struct MqlBookInfo 
  { 
   ENUM_BOOK_TYPE   type;            // tipo de solicitud de la enumeración ENUM_BOOK_TYPE 
   double           price;           // precio 
   long             volume;          // volumen 
   double           volume_real;     // volumen con mayor precisión 
  };


nos da 4 parámetros, pero no hay tiempo en ella.


¿Quién puede guiarme cómo recordar el tiempo del índice encontrado?

 
Konstantin Seredkin:

Hola.

¿Podría decirme, por favor, es posible fijar - recordar la hora del índice encontrado en la clase MarketBook.mqh ?

En este método encontramos el índice de precios en el que se encuentra el volumen máximo en el lado Ask y Bid.

También quiero saber a qué hora terminal obtuvimos este índice.


La estructura del vaso


nos da 4 parámetros, pero no tiene tiempo.


¿Alguien puede indicarme cómo recordar la hora del índice encontrado?

heredar la estructura y añadirle un campo adicional al que se le añadirá la hora del tick al rellenarlo

 
Konstantin Seredkin:

Hola.

¿Podría decirme, por favor, es posible fijar - recordar la hora del índice encontrado en la clase MarketBook.mqh ?

En este método encontramos el índice de precios en el que se encuentra el volumen máximo en el lado Ask y Bid.

También quiero saber a qué hora terminal obtuvimos este índice.

La estructura del vaso

nos da 4 parámetros, pero no hay tiempo en ella.

¿Quién nos puede apuntar en la dirección de cómo recordar el tiempo del índice encontrado

No hay tiempo, porque la hora de llegada de la cotización en MQL5 no se puede aprender. Lo máximo que se puede hacer es recordar la hora en el momento de llegada del evento OnBookEvent, así que recuérdalo. Recordar la hora de encontrar los máximos de la pila tampoco tiene sentido, necesitas la hora de llegada de la pila de precios, no la hora de encontrar su índice máximo.