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

 
Roman Sharanov:

a continuación en el archivo de clase

¿Este método devuelve un error? Si es así, defínalo en la sección privada. Puedes hacerlo en su totalidad:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class newC
  {
private:
   int      m_var;
   double   varSqrt(void)           const { return ::MathSqrt(this.m_var); }
public:
                     newC(int var);
                    ~newC();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::newC(int var)
  {
      this.m_var = var;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::~newC()
  {
  }
//+------------------------------------------------------------------+

O puedes sacarlo:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class newC
  {
private:
   int      m_var;
   double   varSqrt(void) const;
public:
                     newC(int var);
                    ~newC();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::newC(int var)
  {
      this.m_var = var;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::~newC()
  {
  }
//+------------------------------------------------------------------+
double newC::varSqrt(void) const
  {
   return ::MathSqrt(this.m_var);
  }
//+------------------------------------------------------------------+
 
neverness:

Bueno, si es una tontería, está probada por la experiencia.

¡¡¡No son sólo "tonterías teóricas" !!!

Exactamente.

Utilizo todo tipo de matrices en los indicadores de forma segura. Y como un amortiguador, y dinámico, y estático.

Pero no todo te funciona y la experiencia te dice, perdón, alguna tontería.

 
Artyom Trishkin:

¿Este método devuelve un error? Si es así, defínalo en la sección privada. Se puede definir como un todo:

Y puedes sacarlo:

O simplemente puedes referirte al miembro privado de la clase como this.m_var dentro de la clase.
 
neverness:

Bueno, si es una tontería, está probada por la experiencia.

¡¡¡No son sólo "tonterías teóricas" !!!

Nadie te impide utilizar una matriz dinámica en tus cálculos.

Pero... El procesador está ocupado durante los cálculos y no habrá escritura en el array dinámico.

Así, cualquier dato que entre en un array dinámico durante los cálculos se ignora automáticamente. (A veces ponen protección, y los escriben en un buffer).

Espero que esto esté claro.

Por eso, todos los datos de las matrices dinámicas se reparten en matrices estáticas, para que no se pierdan datos mientras el procesador trabaja.

¡¡¡Y por eso todos los cálculos deben realizarse en matrices estáticas !!!

Esto es un disparate feroz, digno de entrar en los anales del foro.

 
Artyom Trishkin:

Ese es el único.

Utilizo fácilmente cualquier tipo de arrays en los indicadores. Y como un amortiguador, y dinámico, y estático.

Pero no te funciona y la experiencia te dice, lo siento, alguna tontería.

Bien.

Hagamos un experimento.

Tomemos una matriz dinámica vinculada con datos de ticks y utilicemos el procesador en esta matriz durante un par de horas.

¿Y ver lo que escribimos en esa matriz durante ese tiempo?

¿Le gusta esta formulación de la pregunta? (Sin un amortiguador, por supuesto).

 
neverness:

Muy bien.

Hagamos un experimento.

Tomemos una matriz dinámica asociada a los datos de los ticks, y ocupemos el procesador de esa matriz durante un par de horas.

¿Y ver lo que escribimos en esa matriz durante ese tiempo?

¿Le gusta esta formulación de la pregunta? (Sin el buffer, por supuesto).

Hazlo. Entonces pon el código aquí.

 
Artyom Trishkin:

¿Este método devuelve un error? Si es así, defínalo en la sección privada. Se puede definir como un todo:

Y puedes sacarlo:

Sí, así es como debe ser, gracias.

 
Artyom Trishkin:

Hazlo. Entonces pon el código aquí.

Por supuesto.

Ya lo veremos más adelante.

 

Otra pregunta.

Tengo una estructura en una clase.

¿Cómo puedo devolverlo por petición a un código externo que trabaja con esta clase?

 
Roman Sharanov:

Otra pregunta.

Tengo una estructura en una clase.

¿Cómo puedo devolverlo por petición a un código externo que trabaja con esta clase?

sólo describiendo la propia estructura en el nivel de visibilidad de la variable global

entonces declara la variable de estructura en la clase

y en tu código externo, puedes declarar la misma variable, pero ten en cuenta que si declaras dicha variable dentro de OnTick(), cada llamada a OnTick() iniciará un constructor de estructura, aunque no la hayas creado - en MQL, no hay diferencia entre clases y estructuras, lo único que recuerdo, el constructor con el parámetro de las estructuras creadas mediante new no será pasado por el compilador

así que... En la POO clásica no se suele ir más allá de la clase pasando los elementos internos (campos de la clase), todo se suele realizar mediante consultas a la clase Get() ... Set()... bueno, es cuestión de gustos

SZ: .... utilice la herencia, los herederos tienen clases comunes, mire el código fuente de las clases de la entrega MT (carpeta include)