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

 

Hay una cuestión de este formato: Hay este código

int P=3;

if(P==5){entonces es necesario entrar en la biblioteca y calcular algo}

En esta situación P=3, es decir, la condición es falsa. La pregunta es: ¿el compilador entrará en la biblioteca y ejecutará el código sin hacer nada o leerá el código en el archivo actual? Te explicaré por qué lo preguntaba. Pues bien, supongamos que escribimos la siguiente condición de formato

int Y=4;

if(Y==4){hacer algo} else{hacer algo más}. En esta situación obtenemos la siguiente imagen Y==4, la primera podemos decir, que el operador de prioridad se ejecutó, pero el bloque else{hacer algo más} también será comprobado y computado (sólo computado y siempre), pero no ejecutado, porque la prioridad es una expresión if(Y==4). En otras palabras, independientemente del resultado de la verdad, la máquina realiza todos los cálculos, es decir, gasta energía en los cálculos independientemente de si el operador secundario se ejecuta o no. Si utilizo programas y bibliotecas grandes, y el compilador cada vez que excava el código de la biblioteca, eventualmente ralentizará el programa. ¿Qué tan efectivo será el uso de las bibliotecas en este caso, debo utilizar el propio código mql4 lo más conciso posible para que el rendimiento del robot sea alto? ¿Quién tiene alguna idea sobre este tema?

 
Pavel Soin:

Hola.

Digamos que tengo 2 indicadores, el primero tiene 4 buffers, el segundo tiene 2. Los pongo en un gráfico y abro la ventana de datos (CTRL+D). La lista contiene 6 buffers de 0 a 5. ¿Cómo puedo leer el valor del buffer 5, por ejemplo, de esta lista en MQL? No es conveniente utilizar iCustom por el indicador requerido. Es más conveniente utilizar esta lista. Sé que lo hacen, pero ¿cómo?

¿Puede alguien ayudarme?

 
Seric29:

Hay una cuestión de este formato: Hay este código

int P=3;

if(P==5){entonces es necesario entrar en la biblioteca y calcular algo}

En esta situación P=3, es decir, la condición es falsa. La pregunta es: ¿el compilador entrará en la biblioteca y ejecutará el código sin hacer nada o leerá el código en el archivo actual? Te explicaré por qué lo preguntaba. Pues bien, supongamos que escribimos la siguiente condición de formato

int Y=4;

if(Y==4){hacer algo} else{hacer algo más}. En esta situación obtenemos la siguiente imagen Y==4, la primera podemos decir, que el operador de prioridad se ejecutó, pero el bloque else{hacer algo más} también será comprobado y computado (sólo computado y siempre), pero no ejecutado, porque la prioridad es una expresión if(Y==4). En otras palabras, independientemente del resultado de la verdad, la máquina realiza todos los cálculos, es decir, gasta energía en los cálculos independientemente de si el operador secundario se ejecuta o no. Si utilizo programas y librerías grandes, y el compilador cada vez excava el código de la librería, al final ralentizará el programa. ¿Cómo de efectivo será el uso de las librerías en este caso, debería utilizar el propio código mql4 lo más conciso posible para que el rendimiento del robot sea alto? ¿Quién tiene alguna idea sobre este tema?

El depurador integrado de MetaEditor responde muy bien a estas preguntas. Deberías escribir un script con condiciones similares y ejecutarlo paso a paso en el depurador. Verás que el programa no entrará en el lugar donde no tiene nada que hacer. Además, tal condición

int P = 3, Y = 4;
if(P == 5 && Y == 4)

Después de comprobar que P != 3 no se comprobará nada más.

 
Buenas tardes. ¿Puedes decirme qué hacer para mantener todos los elementos gráficos en el gráfico durante el fin de semana?
 
Lomonosov1991:
Buenas tardes. ¿Puedes decirme qué hacer para mantener todos los elementos gráficos en el gráfico durante el fin de semana?
No los borre
 
Alexey Viktorov:

El depurador incorporado en el MetaEditor responde muy bien a estas preguntas. Escribe un script con condiciones similares y ejecútalo paso a paso en el depurador. Verás como el programa no entra en el lugar donde no tiene nada que hacer. Además, esta condición

Después de comprobar que P != 3 no se comprobará nada más.

He aquí un ejemplo

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 en este caso es 8, pero el compilador jura el número grande, que quiero poner en una variable, pero no pondré este número en una variable porque pp=8 es correcto, pero por alguna razón el compilador empieza a escarbar en lo que escribí y comprueba si puede ser, por lo que concluimos que es el compilador el que comprueba y cuenta, bueno, esto es ciertamente un error grosero, podríamos hacer un error menos grave, pero el compilador seguirá comprobando si puede ser o no. No quiero escribir ese tipo de cosas en él, pero el compilador comprobará lo que se supone que debe hacer, pero no lo hará y contará. Traté de trabajar con el depurador MQL4 leí las instrucciones aquíhttps://www.metatrader5.com/ru/metaeditor/help/development/debug pero ni siquiera vi una pestaña activa "comprobar contra la historia", aunque las instrucciones sugieren que debe estar activo.

 
Seric29:

He aquí un ejemplo

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 en este caso es 8, pero el compilador jura el número grande que quiero poner en una variable, pero no voy a poner este número en una variable porque pp=8 es correcto, pero por alguna razón el compilador se pone a escarbar lo que escribí y comprueba si puede ser, por lo que concluimos que es el compilador el que comprueba y suma todo, por supuesto esto es un error burdo, podríamos hacer un error menos grave, pero el compilador seguirá comprobando si puede ser o no. No quiero escribir ese tipo de cosas en él, pero el compilador comprobará lo que se supone que debe hacer, pero no lo hará y contará. Intenté trabajar con el depurador MQL4 leí las instrucciones desde aquíhttps://www.metatrader5.com/ru/metaeditor/help/development/debug pero la pestaña "comprobar contra el historial" ni siquiera está activa, aunque las instrucciones sugieren que debería estarlo. Intenté comprobar con datos reales pero en este caso los valores de las variables no se muestran, no vi nada, sólo me pregunto qué está pasando.

El compilador comprueba los valores válidos en tiempo de compilación, pero no en tiempo de ejecución. Lee sobre los tipos de variables y dentro de qué rangos están permitidos los valores de esas variables. Si el compilador no comprobara estos rangos, podría perder valores en el momento de la ejecución del código y obtener resultados erróneos de los cálculos. Así que este comportamiento es bueno para el programador. El compilador siempre nos advertirá de la posible pérdida de precisión.

Y el depurador de MT4 no funciona con datos históricos. Es una prerrogativa del probador de MT5. Pero de todos modos no tiene sentido depurar los scripts en el historial, y puedes observar lo que sugiero en el probador de MT4. Basta con establecer un punto de interrupción al principio del código y luego observar la secuencia de ejecución y los valores de las variables paso a paso.

 
¿Crees que está bien discutir sobre trozos de código descompilado?
Al menos deberían cambiar el nombre de las variables. No es tan descarado...
 
Artyom Trishkin:
¿Crees que está bien discutir sobre trozos de código descompilado?

Al menos deberían cambiar el nombre de las variables. Si no, es demasiado descarado...

Este EA está disponible en línea en formato MQL4. Trio Dancer. Lo estoy rehaciendo para mí.

 
Lomonosov1991:

Este asesor está disponible en línea. Trio Dancer. Sólo lo estoy modificando para mí.

¿Y qué? Hay lugares donde compran y venden artículos robados.
Este foro no está en esa categoría.
Fue pirateado (robado al autor) hace tiempo y ahora lo está haciendo por sí mismo. Por favor, no lo hagas en este sitio. Aquí tenemos ética.
Razón de la queja: