Preguntas sobre POO en MQL5 - página 42

 
Igor Makanu:

...

llama a todo en métodos privados, pero ¿hay una "mentalidad Jedi" para librarse de CheckPointer(m_order)==POINTER_INVALID en el código fuente

...

Es más probable que esto no sea un truco, el algoritmo debe ser tal, que esta parte del código no se ejecuta si no hay orden.

O tal vez se pretendía que fuera así. Pero probablemente, si hay un puntero, no significa que haya una orden, así que tenemos que comprobar si hay una orden.

 
Igor Makanu:

y si la memoria no me falla, a principios de año era posible desmarcar NULL en el registro y obtener 0 allí, ahora da un error

Cambios

Foro sobre trading, sistemas de trading automatizados y comprobador de estrategias

Bichos, errores, preguntas

Kirill Belousov, 2017.12.14 21:34

Print(NULL); // 'NULL' - expression of 'void' type is illegal
Alert(NULL); // 'NULL' - expression of 'void' type is illegal

Es hora de retirarse

 
A100:

Cambios

Sí, efectivamente, pero me acordé de cómo lo hacía en MT4, así es como di de baja los punteros:

class A {};

A *a;
void OnStart()
{  Print("1 : ",a);
   a= new A;
   Print("2 : ",a);
   a = NULL;
   Print("3 : ",a);

delete a;
}

2019.09.17 07:52:40.855 tst (EURUSD,H1) 1 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 2 : 1048576

2019.09.17 07:52:40.856 tst (EURUSD,H1) 3 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 objetos no borrados restantes

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 objeto de tipo A izquierdo

2019.09.17 07:52:40.856 tst (EURUSD,H1) 24 bytes de memoria filtrada

Dmitry Fedoseev:

Probablemente no sea así, el algoritmo debe ser tal que esta parte del código no se ejecute si no hay orden.

O tal vez sea esa la intención. Pero es poco probable, si hay un puntero, no significa que haya una orden, así que tenemos que comprobar la existencia de una orden.

Dependiendo del problema, ya he escrito en código cómo crear un "objeto de orden" que por sí mismo miraría lo que hay en el mercado - buscaría una orden en el diseñador usando un magik, si la encontrara la recogería, abriría una orden a un precio, el tipo de orden por sí mismo cuenta (mercado o pendiente), normalización de lotes, reintentaría abrir una orden si las recotizaciones estuvieran en un tick anterior, después de una colocación exitosa de la orden en el siguiente tick, colocaría un sl y así sucesivamente... todo esto se hace por sí mismo sin ninguna intervención del "objeto de la orden".

Y si la orden se ha cerrado, en cierto modo sigue ahí para la estrategia - en última instancia, la estrategia está interesada en el beneficio de la orden (actual o ya cerrada - ¡no importa!) y en elestado de la propia orden (aún no colocada, activa o ya cerrada)


todo funciona según lo previsto, tal vez usted tiene razón en alguna parte, pero por ahora el código todavía se está probando, los punteros deben ser comprobados, más tarde podemos probar sin esta comprobación ... aunque la lógica de trabajo implica las siguientes acciones si no hay tal objeto.... en principio no queda mucho para rehacer todo a las órdenes virtuales, todavía tengo que pensar ))))

 
Igor Makanu:

Quería escribir lo que solía tener en lugar de

fue así:

pero recuerda cómo comprobar las sustituciones de macros en MQL

2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1

2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID = 0

2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0


y si la memoria no me falla, a principios de año era posible desimprimir NULL en el registro y obtener 0 allí , ahora aparece un error

Es decir, el comportamiento NULL como si no debe cambiar en el futuro, pero lo que se sustituye allí en lugar de NULL no está claro, probablemente si esta situación se comprueba ahora, como se escribeif(CheckPointer(m_order)==POINTER_INVALID)) ) es por así decirlo el código correcto))

No dude en solicitarlo. Con un 98% de confianza NULL en el código fuente es algo como #define NULL nullptr
 
Vladimir Simakov:

Y luego está esto, para el azúcar:

La primera prueba simple muestra

void OnStart()
{
    A * const a = new A;
    DELETE(a); //Error: 'a' - constant cannot be modified
}

que no es azúcar, sino un... sustancia más líquida

 
A100:

La primera prueba simple muestra

que no es azúcar, sino un... sustancia más líquida.

Porque no está ahí). NULL no es ni aquí ni allá. Debe utilizar la función CheckPointer(). El puntero no necesita ser puesto a cero por sí mismo - después de borrarlo se convierte en POINTER_INVALID por sí mismo.

 
Dmitry Fedoseev:

Porque no es ahí donde estás)) NULL no es ni aquí ni allá. Debe utilizar la función CheckPointer(). No es necesario poner a cero el puntero por sí mismo, se convierte en POINTER_INVALID por sí mismo después de la eliminación.

Estoy completamente de acuerdo. Si lees a los administradores, suele sonar así: "Escribe tus códigos correctamente

El MQL en general siempre es duro, nueva construcción, nuevos problemas, empiezas a averiguar si lo he utilizado mal, aquí tienes y fírmalo ))))

 
A100:

La primera prueba simple muestra

que no es azúcar, sino un... sustancia más líquida

Buen hombre. ¿Dónde están las estadísticas de su trabajo como autónomo, sus productos en el mercado, sus publicaciones relativas a la programación? ¿O está tratando de abrirle los ojos a alguien sobre el tema de los punteros constantes, o de mostrar sus conocimientos sobre el tema de los tipos de sustancias...? En el futuro, por favor, tenga en cuenta el contexto de los ejemplos, en lugar de intentar reproducir un error del compilador.
 
Vladimir Simakov:
Querido hombre. ¿Dónde están las estadísticas de sus trabajos independientes, productos en el mercado, publicaciones relacionadas con la programación? ¿O está tratando de abrirle los ojos a alguien sobre el tema de los punteros constantes, o de mostrar sus conocimientos sobre el tema de los tipos de sustancias...? En el futuro, por favor, tenga en cuenta el contexto de los ejemplos, en lugar de intentar reproducir un error del compilador.

Tengo un contexto simple: Si el código (en este caso una macro) está escrito con un error, creo que es posible reportarlo (y dar un ejemplo para probarlo). Y en este contexto no me queda claro qué tienen que verlas estadísticas

 
A100:

Y en este contexto no me queda claro qué tienen que ver las estadísticas.

Hazlo sencillo y la gente acudirá a ti.

;)

SZZY: Sus mensajes son casi siempre una buena idea, pero la presentación del material, bueno, no del todo con buenas intenciones, por supuesto su negocio, pero imho, quieren ayudar - ayudar, quieren ser inteligentes, bueno, a menudo resulta así

Depende de ti, pero aumentar tu autoestima con recursos online - .... Me da pereza seguir escribiendo.