Preguntas sobre POO en MQL5 - página 60

 
Igor Makanu:

¡Hola de nuevo!


esta pregunta, hay un enum , necesitamos o un array enum o una lista enum o un contenedor enum - algo donde almacenar 7 enum , pero el apetito crece, tal vez 70 enum


¿Dónde?

Tanto el array como la lista y el contenedor se pueden hacer dependiendo de la tarea. Según entiendo, lo más probable es que necesites simplificar la escritura del código, entonces puedes dividir los enums en grupos y combinarlos en estructuras para los parámetros de cada objeto.

Si hablamos de la fase de ejecución, creo que es una práctica normal utilizar enums sólo cuando se especifican valores/pares. Y para almacenarlos, utiliza un tipo de base simple.

 
Aleksey Mavrin:

Puedes hacer un array, una lista y un contenedor, dependiendo de la tarea. Según entiendo, probablemente necesites simplificar la escritura del código, entonces puedes dividir los enums en grupos y combinarlos en estructuras para los parámetros de cada objeto.

Si hablamos de la fase de ejecución, creo que es una práctica normal utilizar enums sólo cuando se especifican valores/pares. Y para almacenarlos, utiliza un tipo de base simple.

lo hice al principio, me alejé de él por alguna razón, parece que había problemas con la inicialización de dichos campos, o más bien con las variantes de autocompletar de enum en ME en alguna build, tal vez debido a que parte del código en el otro inyector era.... vamos a estudiar esta opción.


Navegando por internet, quiero algo Sharp como esto... algunas propiedades (((.

 public class COrder
    {
        public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
        public enum E_VOLUME { FIXED, INC, DEC }
        public E_MOTION OrderMotionType { get; set; }
        public E_VOLUME OrderVolumeType { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var current = new COrder { OrderMotionType = COrder.E_MOTION.HIGHER, OrderVolumeType = COrder.E_VOLUME.FIXED };
            
        }
    }
 
Igor Makanu:

lo hice al principio, por alguna razón lo abandoné, parece que había problemas con la inicialización de dichos campos, o más bien con el autocompletado de variantes de enum en ME en alguna build, probablemente porque parte del código en otro inyector era.... vamos a estudiar esta opción.


Navegando por internet, quiero algo Sharp como esto... algún tipo de propiedades (((

¿Cuál es el problema?

Si es uno a uno, entonces:

class COrder
{
public:
   enum E_MOTION { HIGHER, LOWER, ZIGZAG };
   enum E_VOLUME { FIXED, INC, DEC };
   E_MOTION orderMotionType;
   E_VOLUME orderVolumeType;
   COrder(E_MOTION _motion, E_VOLUME _volume):orderMotionType(_motion),orderVolumeType(_volume){}
};

void OnStart(){
   COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);
 } 

Esto es si no quieres poner la enumeración en un ámbito global.

 
Vladimir Simakov:

Esto es si no quieres poner la enumeración en el ámbito global.

hmm...

No sabía cómo hacerlo:

 COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);

Gracias.

 

¿Quién tiene una solución elegante para cargar objetos simples en JSON?

Necesito un ejemplo de ese código para MQL:

public class COrder
    {
        public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
        public enum E_VOLUME { FIXED, INC, DEC }

        public bool IsRunning { get; set; }
        public int OpenPrice { get; set; }
        public int ClosePrice { get; set; }
        public E_VOLUME OrderVolumeType { get; set; }
        public E_MOTION OrderMotionType { get; set; }
        
    }

    class Program
    {
        static void Main(string[] args)
        {
            var current = new COrder {
                IsRunning = false, 
                OpenPrice = 1200,
                ClosePrice = 1300,
                OrderMotionType = COrder.E_MOTION.ZIGZAG, 
                OrderVolumeType = COrder.E_VOLUME.FIXED };

            string json = JsonSerializer.Serialize<COrder>(current);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }

{"IsRunning":false,"OpenPrice":1200,"ClosePrice":1300,"OrderVolumeType":0,"OrderMotionType":2}

El serializador MQL está disponibleen https://www.mql5.com/ru/code/13663

pero no entiendo la estructura del recorrido correcto de los campos

 
Igor Makanu:

Pero no tengo ni idea de cómo recorrer correctamente los campos del objeto

Las macros lo son todo).
 
Alexey Navoykov:
las macros lo son todo)

Uh-huh... Intentaré preguntar de nuevo:

¡AYÚDENME A AYUDAR A UN EXAMINADOR! ¡POR FAVOR!

 
Igor Makanu:

Uh-huh... Intentaré preguntar de nuevo:

¡AYUDA Y NECESITA UN EJEMPLO! ¡Por favor!

Bueno, si la pregunta se refiere específicamente a evitar los campos, es algo así:

#define SERIALIZE5(object, m1, m2, m3, m4, m5)  /* your code */

...

SERIALIZE5(current, IsRunning, OpenPrice, ClosePrice, OrderVolumeType, OrderMotionType);

Puedes elaborar el cuerpo de la macro por ti mismo).

 
Alexey Navoykov:

Bueno, si la pregunta es específicamente sobre el cruce de campos, es más o menos así:

Y puedes elaborar el cuerpo de la macro por ti mismo).

¡Bien, eso es algo!

Gracias.

 
Por otro lado, para la serialización, probablemente sea mejor especificar los nombres de texto de los campos explícitamente, para poder renombrarlos posteriormente en el código sin preocuparse de que los archivos guardados dejen de funcionar.