Características del lenguaje mql5, sutilezas y técnicas - página 182

 
Konstantin Nikitin:

Por ejemplo, borro todos los objetos de mi VDS. No quiero sobrecargar la agenda. Y no hay necesidad de ellos allí. Utilizo los globales. Así que todo depende de la situación.

Mira, no me gustan por una razón:

  1. Es una cuestión de atomicidad de las operaciones con ellos. Los docs no dicen nada al respecto, aunque de hecho es un objeto y las operaciones con ellos no son atómicas, y la lectura/escritura del propio doble en x86 son, si no me equivoco, dos instrucciones.
  2. La accesibilidad de las variables fuera del programa.
Si el punto 1 es más bien una queja sobre la calidad de la documentación, el punto 2 es serio.
 
Vladimir Simakov:

Mira, hay una razón por la que no me gustan:

  1. La cuestión de la atomicidad de las operaciones con ellos. Los docs no dicen nada al respecto, aunque, de hecho, es un objeto y las operaciones con ellos no son atómicas, y la lectura/escritura del propio doble en x86 son, si no me equivoco, dos instrucciones.
  2. La accesibilidad de las variables fuera del programa.
Si el punto 1 es más bien una queja sobre la calidad de la documentación, el punto 2 es serio.

Bueno, no es necesario leerlo. Puedes utilizar GlobalVariableCheck para comprobar si la variable está o no. Puedes hacer lo mismo con los objetos.
Así que sólo hay que crear/comprobar/borrar una variable.

 

Vladimir Simakov:

2. Disponibilidad de variables fuera del programa.

no hay problema, todas las funciones que trabajan con variables globales tienen un valor de retorno - el resultado de la operación

hay una herramienta de sincronizaciónhttps://www.mql5.com/ru/docs/globals/globalvariablesetoncondition , no es gran cosa, pero usa lo que te ofrecen

Pero el gran inconveniente es el tipo de datos - sólo doble , no me gusta doble , incluso si sólo ulong podría ser utilizado, y la organización de nombre / valor ---> cadena / doble provoca un deseo de intercambiar - para escribir los datos en la cadena y la clave en el doble - más para una operación puede ser escrito / leído

pero habiendo estimado todas estas "cosas" Puede escribirlos en archivos binarios, es decir, libertad total y sin incertidumbres.

probablemente hay que saber trabajar con ellos

@fxsaber mostró ejemplos de trabajo con cualquier tipohttps://www.mql5.com/ru/forum/320395/page6#comment_12910394

 
Konstantin Nikitin:

Bueno, no hace falta leer. Puede utilizar simplemente GlobalVariableCheck para comprobar si la variable existe o no. Se hace lo mismo con los objetos.
Por lo tanto, sólo hay que crear/comprobar/borrar la variable.

Sí, un conflicto de nombres trivial y la cadena en el otro robot

GlobalVariableDel(yourValueName);

perderá su depósito))))

Di que el nombre será único, que el otro robot nunca estará allí, que el niño/esposa/amigo/borracho nunca se acercará a la terminal de batalla)) De acuerdo, pero la probabilidad no es cero, lo que significa que el código se vuelve poco fiable.

 
Vladimir Simakov:

Es un conflicto de nombres trivial y la línea del otro robot

le quitará su depósito)))

Dirás que el nombre será único, que el otro robot nunca estará allí, que el niño/esposa/amigo/borracho mismo nunca se acercará a la terminal de batalla))) De acuerdo, pero la probabilidad no es cero, lo que significa que el código se vuelve poco fiable.

Mentira y fantasía

Un EA en dinero SIEMPRE se ejecuta desde un terminal independiente, en su propio VDS (o incluso servidor) y nadie se mete con él.

 
Maxim Kuznetsov:

Mentira y fantasía

Un EA en el dinero SIEMPRE se ejecuta desde un terminal independiente, en su propio VDS (o incluso servidor) y nadie se mete con él.

¿Cómo que SIEMPRE? Hoy - siempre, mañana puedes calcular de manera diferente. Y no todo el mundo parece estar de acuerdo contigo.

Señalé el peligro real de utilizar las variables globales de la terminal. Esto no es ni bueno ni malo: es algo que nos han dado los desarrolladores, sólo tenemos que ser conscientes de ello y tenerlo en cuenta.

La misma cadena

GlobalVariablesDeleteAll();

...hecho en cualquier script y oops...

 

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

Peculiaridades de mql5, consejos y trucos

Vladimir Simakov, 2020.05.24 17:02

La misma cadena

GlobalVariablesDeleteAll();

...hecho en cualquier script y oops.

Lo mismo ocurre con los objetos gráficos.

ObjectsDeleteAll(...


Sólo los recursos de la EA no pueden ser modificados por otros programas.

 

Colegas, por favor ayúdenme a hacer una macro, si es posible.

Necesito declarar dinámicamente un array bidimensional. Y también hay que cambiar la segunda dimensión. Esto es algo así como este bucle:

for(int would_be_size2=0;would_be_size2<5;would_be_size2++)
    {
     double d_array[][would_be_size2];
     int size2=ArrayRange(d_array,1);
    }

Por supuesto, el compilador se opondrá a esto:

'[' - invalid index value       t7.mq5  20      22

Me gustaría ver una macro como la siguiente:

#define  CREATE_MARRAY(type,arr_name,size2) (type arr_name[][##size2])

En lugar de una línea:

double d_array[][would_be_size2];

Gracias.

 
Denis Kirichenko:

Colegas, por favor ayúdenme a hacer una macro, si es posible.

Necesito declarar dinámicamente un array bidimensional. Y también hay que cambiar la segunda dimensión. Esto es algo así como este bucle:

Por supuesto, el compilador se opondrá a esto:

Me gustaría ver una macro como la siguiente:

En lugar de una línea:

Gracias.

Pero la creación de un array de tamaño suficiente (máximo) fuera del bucle se ve obstaculizada por la política ? :-)

El enfoque anterior (recrear el array en el bucle cada vez) no gana nada en términos de velocidad o consumo de memoria.

 
Denis Kirichenko:

Me gustaría ver una macro similar a esta:

No funcionará.