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

 
Igor Makanu:

laasignación de memoria será en el ejemplo 1 y en el ejemplo 2

el ejemplo 2 es tanto la declaración como la inicialización, el ejemplo 1 sólo la declaración

Ya más claro podría haber escrito sobre ello en la ayuda. Lo declaré enseguida porque tengo cálculos estáticos en las clases y no necesito crear el objeto mediante el operador new.

Dime, quiero hacer tal cosa, es decir, quiero declarar una clase, luego declarar un array y almacenar en el array un puntero a la clase, ¿es posible hacerlo o no?

 
Seric29:

Dime que quiero hacer tal cosa, por lo que quiero declarar una clase y luego declarar una matriz y almacenar en la matriz un puntero a la clase, ¿es posible hacer o no?

una y otra vez.... Una clase es ante todo un tipo de datos, como int, double...

¿quieres un array de este tipo de datos? - declarar un array, si el array es dinámico, entonces redimensionarlo, entonces inicializar CADA ELEMENTO con los datos necesarios - necesitas punteros, entonces inicializarlos con punteros a una clase, necesitas instancias de una clase, entonces cada elemento del array no será un puntero sino un objeto en sí mismo

esa es la esencia de la POO, cualquier clase es ante todo un tipo de datos de usuario.... No sé qué decir al respecto, pero la metodología es la misma que con un tipo de datos normal, y lo que escribirás dentro de la clase es una cuestión personal, pero la inicialización de una nueva instancia siempre comenzará con un constructor, y qué constructor hay - por defecto, con parámetros o sin parámetros te da a elegir cómo inicializar el objeto...... ugh, pero sigue leyendo libros, no hay manera de hacerlo con preguntas aquí

 
Igor Makanu:

Por lo general, determinan las órdenes superiores/inferiores más externas por sus precios abiertos, luego añaden algún valor y obtienen un nuevo precio al que, o bien vigilan cuando el precio rompe esta condición de nivel y colocan una nueva orden, o bien colocan inmediatamente una cuadrícula de órdenes pendientes con el objetivo de alcanzar el número máximo de órdenes y luego rastrean esta cuadrícula.

Le agradezco su interés, pero me refería a la cuadrícula de puntos del gráfico.


¿Puede indicar cómo se calculan los niveles horizontales para una cuadrícula en mt4 y en mt5? Se desplazan cuando desplazo el gráfico sin una escala fija y se desplazan enmt4 y mt5 de forma un poco diferente. Tal vez alguien sepa cómo se calcula, para no tener que adivinar con sangrías y encuadres y demás.

 
Andrey Sokolov:

Gracias por no pasarnos, pero no me refiero a eso, sino a la cuadrícula de puntos del gráfico.


¿Me podéis decir cómo se calculan los niveles horizontales de la rejilla en mt4 y en mt5? Si la escala no es fija, se desplazan cuando desplazo el gráfico, y se desplazan enmt4 y en mt5 de forma un poco diferente. Tal vez alguien sepa cómo se calcula para no tener que adivinar con sangrías, fijaciones y demás.

Simplemente divide la ventana en partes iguales, depende de la resolución de la pantalla.

Estoy dividiendo verticalmente en 15 partes tanto en MT4 como en MT5

 
Igor Makanu:

una y otra vez.... Una clase es ante todo un tipo de datos, como int, double...

¿Quieres una matriz de datos de ese tipo? - declarar un array, si el array es dinámico, entonces redimensionarlo, entonces inicializar CADA ELEMENTO con los datos necesarios - necesitas punteros, entonces inicializarlos con punteros a la clase, necesitas instancias de la clase, entonces cada elemento del array no será un puntero, sino el propio objeto

esa es la esencia de la POO, cualquier clase es ante todo un tipo de datos de usuario.... No sé qué decir al respecto, pero la metodología es la misma que con un tipo de datos normal, y lo que escribirás dentro de la clase es una cuestión personal, pero la inicialización de una nueva instancia siempre comenzará con un constructor, y qué constructor -por defecto, con parámetros o sin parámetros- puedes elegir cómo inicializar el objeto...... ugh, pero sigue leyendo libros, no hay manera de hacerlo de esta manera

Si, me di cuenta que no es posible porque cuando se crea un array, el programa necesita especificar el tipo, y como quiero guardar un puntero de diferentes clases en un array, no funcionará porque el array no puede ser de diferente tipo o misceláneo en mql, en s++ lo hacía, pero no con objetos tan complejos. Así que mi idea no funcionará aquí.

 
Seric29:

Sí, me he dado cuenta de que no es posible porque cuando creas un array, el programa te exige que especifiques el tipo, y como quiero guardar un puntero de diferentes clases en un array, no funcionará porque el array no puede ser de diferentes tipos o variedades en mql, en C++ lo hacía, pero no con objetos tan complejos. Así que mi idea no funcionará aquí.

Todo está hecho. Hereda sus objetos de la clase base y crea un array con el tipo de la clase base. Y todos los objetos heredados pueden estar en el array.
 
Artyom Trishkin:
Todo está hecho. Hereda sus objetos de la clase base y crea un array con el tipo de la clase base. Y todos los objetos heredados pueden estar en el array.

Y mostrar el ejemplo más simple y primitivo, donde hay 2 clases entonces la herencia y cómo poner referencias a cada clase en una matriz de 2 elementos(0 primera clase 1 segunda)?

 
Andrey Sokolov:

Makar, ¿por qué escribes algo que es claramente falso? Al desplazar el gráfico puedes cambiar el desplazamiento de las líneas horizontales de la cuadrícula, y se desplazande forma ligeramente diferente enmt4 y en mt5.

No lo hacen.

Sólo se desplazan cuando hay una ventana indicadora, en todos los demás casos no lo hacen.

 
Seric29:

¿Y mostrar el ejemplo más simple y primitivo donde hay 2 clases más herencia y cómo poner referencias a cada clase en un array de 2 elementos(0 primera clase 1 segunda)?

class CBase{
protected:
   int v;
   public:
                  CBase(): v(0)  {            }
           int    getV()         { return(v); }
   virtual int    calc() = 0;
};

class A:public CBase
{
   public:
   virtual int calc() {return(--v);} //декремент 
};

class B:public CBase
{
   public:
   virtual int calc() {return(++v);} //инкремент
};

//+------------------------------------------------------------------+
void OnStart()
{
// 2 указателя которые инициализируем экземплярами обьектов  A и B
   CBase *arr_base[2];
   arr_base[0] = new A;
   arr_base[1] = new B;
// вызовем 10 раз метод calc() для каждого обьекта   
   for(int j=ArraySize(arr_base)-1; j>=0; j--)
   {
      for(int i=0; i<10; i++)
         {
            arr_base[j].calc();
         }
   }
   
   Print("A.v = ",arr_base[0].getV());
   Print("B.v = ",arr_base[1].getV());
//удалим обьекты   
   for(int j=ArraySize(arr_base)-1; j>=0; j--)
   {
      delete arr_base[j];
   }   
}
//+------------------------------------------------------------------+

2020.03.22 21:21:38.544 tst (EURUSD,H1) A.v = -10

2020.03.22 21:21:38.544 tst (EURUSD,H1) B.v = 10

 
Igor Makanu:

2020.03.22 21:21:38.544 tst (EURUSD,H1) A.v = -10

2020.03.22 21:21:38.544 tst (EURUSD,H1) B.v = 10

Gracias. Y las funciones deben ser virtuales simple no puede, ya voy a experimentar a mí mismo.

Razón de la queja: