Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 282

 

amavladi:


Quiero entender la mecánica de los bucles para poder escribir un EA complejo. El operador "return" me lanza a un nuevo "start" No siempre lo necesito.

Gracias por la respuesta de todos modos.

De nada. La cuestión es que si quieres entender la "mecánica" con la ayuda de "terceros", entonces tienes que formular el problema a esos mismos "terceros", es decir, describir lo que te gustaría obtener del algoritmo, no lo que has obtenido.

"El bucle hace un bucle" no es un problema, porque si no hay nada en el bucle excepto el operador continue, entonces está obligado a hacer un bucle hasta que la condición del bucle se vuelva falsa.

Es decir, no hay que hacer preguntas tontas como: "qué no funciona en el código que no funciona". Después de todo, hasta un erizo borracho sabe que el código que no funciona no funciona porque no funciona. Pero nadie sin poderes telepáticos, excepto el autor del código, puede entender lo que debería haber funcionado en el código de trabajo.

 
amavladi:

¡AYUDA!

Estoy buscando gente buena en este sitio, por favor aconséjeme de mis errores. Acabo de empezar a aprender MQL4y escribí un simple Asesor Experto que abre una orden y luego la cierra con un pequeñotakeprofit.Intenté comprobarlo en el probador de estrategias y descubrí que mi bucle de sentencias for y while se pone en bucle si se escribe así:

//--------------------------------------------------------------------

   while (Ask<=Level)

   { RefreshRates();

     continue;

   }         

Pues aquí todo parece ser sencillo.

El probador de estrategias genera un tick, llama a start() y espera hasta que esta función termine para generar el siguiente tick.

Así que, si quieres que tu robot no se quede colgado en el probador, aléjate de una construcción así. En su caso, el precio Ask no cambiará hasta que salga de start().

Y cuando se reciba la orden de retorno, el inicio de la función terminará, y el probador entenderá que se debe generar el siguiente tick.

Además, no en el probador de estrategias, sino en el modo real, su código funcionará como espera, porque RefreshRates actualizará el precio Ask.

Tu código funciona bien, pero para el probador de estrategias entra en un bucle infinito.

El uso de la devolución ayudará en este caso. Cuando ganes más experiencia te librarás de esas construcciones. Buena suerte.

 
Reshetov:


Es decir, no hay que hacer preguntas tontas como "qué no funciona en el código que no funciona". Al fin y al cabo, hasta un erizo borracho sabe que el código que no funciona no funciona porque no funciona. Pero nadie sin poderes telepáticos, excepto el autor del código, puede entender lo que debería haber funcionado en el código de trabajo.

El código funciona, sólo que siempre hay matices que los novatos desconocen...
 
Reshetov:

De nada. La cuestión es que si quieres entender la "mecánica" con la ayuda de "terceros", entonces tienes que formular el problema a esos mismos "terceros", es decir, describir lo que te gustaría obtener del algoritmo, no lo que has obtenido.

"El bucle hace un bucle" no es un problema, porque si no hay nada en el bucle más que el operador continue, está destinado a hacer un bucle hasta que la condición del bucle se vuelva falsa.

Es decir, no hay que hacer preguntas tontas como: "qué no funciona en el código que no funciona". Después de todo, hasta un erizo borracho sabe que el código que no funciona no funciona porque no funciona. Pero nadie sin poderes telepáticos, excepto el autor del código, puede entender lo que debería haber funcionado en el código de trabajo.

No me gusta que la gente eche pestes de los novatos. Sólo escribe de forma humana como - la pregunta está mal/inexacta/mal redactada, o - un error aquí o allá. Recuérdate a ti mismo cuando empezaste a aprender a hacer algo, también, más de una vez probablemente hiciste una pregunta estúpida. ¿Y la metáfora del erizo borracho aporta alguna solución positiva al problema? Sólo es agradable sentirse fresco en el brillo de tu propia grandeza frente a un recién llegado.
 
paladin800:
No me gusta que a los novatos se les eche tierra encima.

Un cerdo encuentra suciedad en todas partes © Proverbio popular

¿Dónde encontraste la tierra? Si lo encuentras, pregunta a un moderador.

paladin800:
¿Aporta la metáfora del erizo borracho algo positivo al problema?

Pide a la administración que añada a las normas la prohibición de las metáforas y los erizos.

 
Reshetov:

Un cerdo encuentra suciedad en todas partes © Proverbio popular

¿Dónde encontraste la tierra? Si lo encuentras, acude a un moderador.

Pide a la administración que añada a las normas la prohibición de las metáforas y los erizos.

Y por qué los moderadores y administradores... Es una cuestión de crianza, de ética profesional, de tacto, de tolerancia, de humanidad al fin y al cabo... ...los administradores no pueden ayudar.

Y si no entiendes bien el problema, mejor no des consejos... A veces es mejor masticar... Aunque presumir a costa de los demás es su derecho...

 
elugovoy:

Todo es cuestión de educación, de ética profesional, de tacto, de tolerancia, de humanidad al fin y al cabo...

El jardín de infancia y el instituto de mujeres de la nobleza, todo en uno.

Entonces, ¿por qué no nos saltamos las cosas personales y seguimos respondiendo a las preguntas de los novatos? De lo contrario, nos encontramos con una especie de fluxión de los partidarios de los enfoques humanitarios en un tema puramente técnico.

 
Me gustaría dar las gracias a Evgeniy Lugovoy (tiene grandes habilidades telepáticas). Ha respondido a mi pregunta sobre los problemas del ciclo real y del tester al cien por cien. Esa misma tarde leí el artículo "Testing and Optimizing Expert Advisors " en el enlace http://articles.En la misma tarde, me encontré con el artículo "Probando y optimizando el EA" por el enlace . mql4.com/es/824 (esto es para los novatos como yo) y me di cuenta de que el probador crea un movimiento de precio real discretamente y da nuevas cotizaciones sólo en la siguiente iteración del EA, así que reescribí el código para la prueba, utilizando una serie de declaraciones IF, donde antes había bucles de operadores. A los principiantes como yo les aconsejo que se familiaricen con las "Funciones comunes" de MQL4 (enlace http://docs.mql4.com/ru/common) en detalle. Me sorprendió descubrir la diferencia en el funcionamiento de una y otra función en el terminal real y en el probador de estrategias, por ejemplo Sleep() en el probador no se retrasa como debería y opera sólo en el terminal real.Y por último, para los temerarios (como yo) amantes de los bucles infinitos condicionales int start() { double Nivel=1300; while (Ask<=Nivel) Las dos últimas líneas del código, a pesar de su inocencia, después de ejecutarlo en un terminal en una ventana de dinero real, siempre y cuando el precio llegue a 1300, tomará una enorme cantidad de tiempo de CPU (en mi 25 % de 2 núcleos).Mi amigo me sugirió que si no se puede abandonar el bucle, es necesario insertar Sleep ( int 100), es decir, dar un intervalo de 100 a 200 milisegundos para aliviar el procesador.int inicio() { double Nivel=1300; while (Ask<=Nivel) { Sleep( int 100) continue; }
P.S. Para los admiradores "terceros" de las expresiones: erizo borracho, screwball, fluderasty, etc. (aunque estamos en un tema puramente técnico), permítanme dar una pequeña referencia a Fiódor Mijáilovich Dostoievski, que en su novela "El idiota" a través del príncipe Myshkin dice una cosa muy extraña: "¡La belleza salvará al mundo! Y a ti Eugenio, te ruego que saludes a Moldavia, aunque vivo en otro país, pero nací en Kishinev.
 
amavladi:

No hay ninguna cosa telepática )))) Creo que todo el mundo ha cometido los mismos errores cuando quiere "pillar" un precio para, por ejemplo, un arrastre... incluyéndome a mí hace unos 6 años.

Por cierto, el tema es para novatos y no es "estrictamente técnico".

Voy a saludar.

Buena suerte.

 
elugovoy:

No hay nada de telepatía )))) Creo que todo el mundo ha cometido los mismos errores cuando quiere "pillar" un precio para, por ejemplo, un arrastre... incluyéndome a mí hace unos 6 años.

Por cierto, el tema es para novatos y no es "estrictamente técnico".

Voy a saludar.

Buena suerte.

Sobre la telepatía y lo "puramente técnico" - estoy a favor del Sr.Reshetov: ))).

Buena suerte para ti también.