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

 
Seric29:

Se pasa un puntero a una función como parámetro. Veo que nadie ha descubierto cómo hacer esto con las clases. Tampoco me queda claro por qué hay que devolver un puntero a una clase.

Aquí hay muestras interesantes, pero no son relevantes para mi pregunta.

También he visto algo parecido en la guía, pero ya he cerrado estos sitios porque me duelen las manos y tengo trabajo.

¿Por qué debería jugar con una tarea tan sencilla? Puedes simplemente obtener los datos necesarios a través de un objeto de clase

Estoy familiarizado con las referencias, los punteros y los punteros de función, pero rara vez los utilizo en la práctica. Y en general, creo que son necesarios sólo para el ahorro de memoria - y Asesores Expertos con indicadores no son juegos, por lo que podemos manejar con variables comunes y objetos de clase enel ámbito global

 
Alexandr Sokolov:

¿Por qué llegar tan lejos con una tarea tan sencilla? Puede simplemente obtener los datos requeridos a través de un objeto de clase

Estoy familiarizado con las referencias, los punteros y los punteros a funciones, pero rara vez los utilizo. A mi entender, son necesarios sólo para el ahorro de memoria, los Asesores Expertos con indicadores no son juegos, por lo tanto, podemos utilizar variables ordinarias y objetos de clase en el ámbito global.

No quiero complicarme en una tarea sencilla, y por supuesto, modifico mis programas donde antes se llamaba a la función, escribo una expresión aritmética para simplificar los cálculos o cambio a una función sobrecargada simplificada, por lo que quiero trasladar el programa a las clases. Pero como escribiste arriba y rara vez las usas, y ahora la pregunta es las clases están ahí pero crear punteros a funciones de esta clase es imposible, por qué se necesita este tipo de programación, si haces una no puedes hacer la otra, no es programación sino el diablo sabe qué.

 
Seric29:

No quiero complicarme en una tarea sencilla y, por supuesto, modifico mis programas donde antes se llamaba a una función, escribo una expresión aritmética para simplificar los cálculos o cambio a una función sobrecargada simplificada, por lo que quiero traducir el programa a clases. Pero como escribiste arriba y rara vez las usas, y ahora la pregunta es las clases están ahí pero crear punteros a funciones de esta clase es imposible, por qué se necesita este tipo de programación, si haces una no puedes hacer la otra, no es programación sino el diablo sabe qué.

Una clase es una plantilla de algún objeto, y para utilizar la funcionalidad que está en esta plantilla - primero debe crear un objeto.

En esencia, el nombre de la clase actúa como un tipo de datos, como int, double, string, etc., pero con una funcionalidad ampliada. No se puede declarar una variable sin especificar su tipo.

Y además de eso, puedes simplemente separar la función de la clase y puede ser usada en la clase y por separado de la clase sin crear un objeto

 

¿Puede haber alguna otra razón por la que el indicador no funcione, excepto que su archivo haya sido eliminado de la carpeta correspondiente? (el indicador está compilado y funciona en un terminal, pero no en otro)


 
Alexandr Sokolov:

La clase es una plantilla de algún objeto, y para utilizar la funcionalidad que está en esta plantilla - usted tiene que crear un objeto primero.

De hecho, el nombre de la clase actúa como un tipo de datos, como int, double, string, etc., pero con una funcionalidad ampliada. No se puede declarar una variable sin especificar su tipo.

Y además de eso, puedes simplemente separar la función de la clase y puede ser usada en la clase y por separado de la clase sin crear un objeto

A menos que. Bueno es que las clases son un tema complicado, y hay toneladas de ejemplos en el libro de referencia sobre el paso, sobre la creación de enlaces y punteros, creo que es posible (al menos en c++ es posible pero mql4 no tiene nada que ver con c++), hay que entender como funciona. La ayuda mostró estos ejemplos son muy complicados y sobrecargados, en vez de tomar una clase y mostrar un ejemplo sencillo lo sobrecargaron con cálculos e información extra y no puedo entender lo que quieren decir, cerré todos estos enlaces por cansancio y fatiga. Ok, entonces voy a sacar funciones de la clase.

 
Alexandr Sokolov:

¿Puede haber alguna otra razón por la que el indicador no funcione, excepto que su archivo haya sido eliminado de la carpeta correspondiente? (el indicador está compilado y funciona en un terminal pero no en otro)


¿Del mercado?

 
Alexandr Sokolov:

¿Puede haber alguna otra razón por la que el indicador no funcione, excepto que su archivo haya sido eliminado de la carpeta correspondiente? (el indicador está compilado y funciona en un terminal, pero no funciona en otro)


ver mensajes en el terminal y en los registros del Asesor Experto

su captura de pantalla sólo muestra que este indicador no tiene código fuente

 
Alexandr Sokolov:

¿Puede haber alguna otra razón por la que el indicador no funcione, excepto que su archivo haya sido eliminado de la carpeta correspondiente? (el indicador está compilado y funciona en un terminal, pero no en otro)


Tal vez necesite bibliotecas adicionales
 
Сергей Таболин:

¿Del mercado?

No

Igor Makanu:

ver mensajes en el terminal y en los registros del Asesor Experto

Su captura de pantalla sólo muestra que este indicador no tiene fuente

Gracias

MakarFX:
Tal vez necesite bibliotecas adicionales

Exactamente no, yo lo escribí - yo sabría

 

Por favor, dígame por qué el compilador genera una advertencia en el siguiente código de script de prueba MQL4:

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

Una advertencia en la línea 27 sobre la incompatibilidad de tipos de datos. Ambas variables tienen el mismo tipo int. A continuación se muestra una captura de pantalla de la compilación del script.

Si sustituyo la línea 27 por

sig[j+1].age=(int)t;

la advertencia no aparece.

¿Cuál es el truco?