Autoaprendizaje del lenguaje MQL5 desde cero - página 48

 
Si el propósito inmediato es implementar un simple trailing stop, debe continuar escribiendo el script añadiendo los bucles for y while.

No estoy seguro de que el guión "paciencia suficiente" tenga una extensión lógica. Probablemente sea mejor pasar a una nueva idea que requiera tener:

1. Un árbol de condiciones if-else.
2. Funciones de cálculo.
3. Ciclos.

Dado que tendremos que trabajar en el campo del trading algorítmico, sería más conveniente que el script estuviera relacionado con la estrategia de trading. Piensa en ello.

 
Para entender mejor los bucles:

Un bucle permite pasar una sección de código cerrada en su cuerpo una y otra vez. Los resultados de cada pase serán diferentes de los resultados de otros pases, porque los valores de las variables/funciones llamadas pueden ser diferentes en cada pase. El número de iteraciones del bucle lo determina el programador, el valor de la variable o la función - depende del código específico.
 
MrBrooklin:

Alexei, ¿estás bromeando? Sí, ¡me gustaría aprender lo básico primero!

Respetuosamente, Vladimir.


No mucho. A juzgar por la dinámica y su base, la teoría y la práctica, es su perfil de principio a fin. Así que por qué no... Ahora no, pero después... Cuando le cojas el tranquillo y te pongas al día con el código.
 
Реter Konow:
Si su objetivo inmediato es implementar un simple trailing stop, continúe escribiendo el script añadiendo los bucles for y while.

No estoy seguro de que el guión "paciencia suficiente" tenga una extensión lógica. Probablemente sea mejor pasar a una nueva idea que requiera tener:

1. Un árbol de condiciones if-else.
2. Funciones de cálculo.
3. Ciclos.

Dado que tendremos que trabajar en el campo del trading algorítmico, sería más conveniente que el script estuviera relacionado con la estrategia de trading. Piensa en ello.

Gracias, Peter, por apoyar mi intención de equipar el script New7.mq5 con trailing stops, especialmente ahora, cuando he empezado a estudiar los ciclos. Por cierto, ya he probado la función Sleep en el script. Se recomienda utilizar esta función al escribir el trailing stop. ¿Por dónde empiezo? Probablemente, sería mejor describir todo el algoritmo de trailing stop en palabras primero, y luego proceder a escribir el código?

Sinceramente, Vladimir.

 
Aleksey Masterov:

No mucho. A juzgar por la dinámica y su base y teoría y práctica, es su perfil de principio a fin. Así que por qué no... no ahora, sino después... Cuando le cojas el tranquillo y te tutees.

Gracias, Alexey, por tu fe en mí. ¡Todo lo que tengo que hacer es seguir con el buen trabajo!

Sinceramente, Vladimir.

 
MrBrooklin:

Gracias, Peter, por apoyar mi deseo de equipar el script New7.mq5 con trailing stops, especialmente ahora, cuando he empezado a estudiar los ciclos. Por cierto, ya he probado la función Sleep en el script. Se recomienda utilizar esta función al escribir el trailing stop. ¿Por dónde empiezo? Probablemente, sería mejor describir todo el algoritmo de trailing stop en palabras primero, y luego proceder a escribir el código?

Sinceramente, Vladimir.

Objetivamente hablando, un simple trailing stop no puede ser escrito en el script. Me explico: los trailing stops no existen por sí mismos, en el "vacío", están "atados" a una posición abierta, que, a su vez, está "atada" a una estrategia, y la estrategia se implementa sólo en un EA.

El problema y la complejidad del trailing en el script radica en que hay que recoger la información sobre las posiciones abiertas y sus órdenes en el bucle, y luego seleccionar la orden requerida en el símbolo requerido y calcular su modificación. Es complicado y confuso, pero para un EA todo es mucho más fácil. En primer lugar, ya sabrás qué orden modificar, y en segundo lugar, sabrás cuándo modificar, porque llega el evento OnTick.

Entonces, pones una "orden pendiente" en el script, entonces se dispara, se abre una posición y puedes seguir el stop... Lo que necesitas para esto:

1. Para hacer un bucle de la secuencia de comandos.
2. Escriba la función de fijación del evento de cambio de precio en el símbolo de texto.
3. función de escritura de la modificación de la orden de parada.
4. Escriba la condición de descarga de la secuencia de comandos (salida del ciclo sin bucles) en el cierre de la posición.

He esbozado el esquema del guión de forma aproximada, pero tendré que pensarlo más seriamente.

P.D. La función Sleep se utiliza para retrasar la ejecución del código cuando es necesario. Por ejemplo, cuando se hace una petición al servidor o se espera un evento. En un script de arrastre esta función será definitivamente necesaria.
 
Реter Konow:
Los programadores tienen miedo de utilizar variables globales por los errores que se producen al cambiar sus valores. Se crea una situación en la que un error es difícil de localizar porque cada función puede cambiarlos. Por supuesto, sólo deben existir aquellas variables en el ámbito global que todas las funciones del programa deben ver. No puede ser de otra manera.

Siempre me ha gustado utilizar variables globales, porque proporcionan un rápido crecimiento de la funcionalidad, y el programa se convierte en una enorme y activa obra. A menudo me han criticado por la forma en que escribo el código, pero por eso es una obra de construcción: se limpia después de hacer el trabajo básico de construcción, y cuando la casa está construida, se puede empezar a alicatar, pintar y limpiar. Hasta entonces, la prioridad es montar el encofrado y verter el hormigón).

Sin embargo, los programadores piensan de forma diferente. Limpiarán" y "fregarán" su código, aunque sean dos líneas y media. Se fregará el código aunque tenga dos líneas y media, pero brillará como una moneda nueva). Esta actitud ante el código se justifica por la profesión de la que viven, pero desde el punto de vista creativo, son rígidos y poco desarrollados. Así es...

Mi consejo: aprende a escribir correctamente, pero a veces permítete alejarte de las reglas y experimentar para obtener una experiencia más variada. Te ayudará a aprender y lo harás más rápido.

Se ha observado que una vez que se empieza a muletear, es difícil parar, y como consecuencia, el código del proyecto se convierte en lo que llaman dre... código.

Déjeme explicarle:

  1. Usted tiene un proyecto con una solución intermedia de trabajo y el número de características implementadas cuenta=0.
  2. Nuestra tarea es implementar la función ++count.
  3. Para añadir las características que necesitamos:
    • escribir los métodos del árbol de objetos y conectar todas estas cosas a los manejadores de eventos con la lógica (tiempo estimado 3 horas *cuenta; cuenta=0).
    • escribir una muletilla en forma de variable global y utilizarla en varios métodos, donde la necesitemos (tiempo estimado 15 min. *contar.).
  4. Error de autonumeración (se trata de un informe de error para las metacomillas).
  5. Naturalmente, hemos elegido una muleta (es realmente difícil hacernos trabajar en este caso)
  6. si (lo hicimos) goto 2
  7. Si no, todo se va a la mierda, gritando help-mi y leyendo comentarios hilarantes de que está mal hacer eso.

Espero que hayas prestado atención al hecho de que el contador de características implementadas, aumenta el tiempo de implementación de la siguiente característica, pero cuando se implementa correctamente, se pone a cero.

Es una idea muy exagerada, pero así es como funciona en la vida real.

Lo que quiero decir es que si no reescribes el proyecto después de implementar todas las características, pasará a producción como un spoiler ilegible. Y luego, el ciclo de vida de cualquier proyecto lleva a un dolor de cabeza para la dirección: o poner a todo el equipo a refactorizar globalmente todo lo que se hiló (y los competidores no duermen, ellos, malvados, escriben nuevas características), o seguir escribiendo muletillas y parchando bugs, filtrando a raudales.

 
Реter Konow:
Objetivamente hablando, un simple trailing stop no funcionará en el script. Me explico: los trailing stops no existen por sí mismos, en el "vacío", están "ligados" a una posición abierta, que a su vez está "ligada" a la estrategia, y la estrategia se implementa sólo en un Asesor Experto.

El problema y la complejidad de implementar el trailing en el script es que hay que recoger la información sobre las posiciones abiertas y sus órdenes en el bucle, y luego seleccionar la orden correcta en el símbolo correcto y calcular cómo modificarla. Es complicado y confuso, pero para un EA todo es mucho más fácil. En primer lugar, ya sabrás qué orden modificar, y en segundo lugar, sabrás cuándo modificar, porque viene el evento OnTick.

Entonces, pones una "orden pendiente" en el script, entonces se dispara, se abre una posición y puedes seguir el stop... Lo que necesitas para esto:

1. Quiero hacer un bucle de la secuencia de comandos.
2. La función de fijación del evento de cambio de precio en el símbolo.
3. Función de escritura de la modificación de la orden de stop.
4. Escriba la condición de descarga del script (salida del bucle) al cerrar la posición.

He esbozado el esquema del guión de forma aproximada, pero tendré que pensarlo más seriamente.

P.D. La función Sleep se utiliza para retrasar la ejecución del código cuando es necesario. Por ejemplo, cuando se hace una petición al servidor o se espera un evento. En un script de arrastre esta función será definitivamente necesaria.

Peter, ¿creamos un código de seguimiento en el script? ¡Perfecto! Ahora tomo lo que has enumerado como secciones básicas y empiezo a describirlas con palabras, para que quede claro cómo debo escribir después las funciones, los bucles, etc. ¿Es esto correcto?

Saludos, Vladimir.

 
MrBrooklin:

Peter, ¿creamos el código de seguimiento en el script? ¡Genial! Lo que has enumerado lo tomo ahora como secciones básicas y empiezo a describirlas con palabras, para que quede claro cómo escribir después funciones, bucles, etc. ¿Es esto correcto?

Saludos, Vladimir.

Sí, correcto.
 
Vladimir Simakov:

Existe la observación de que una vez que se empieza a crujir, es difícil parar, y como consecuencia, el código del proyecto se convierte en lo que se conoce como d.c.

Déjeme explicarle:

  1. Usted tiene un proyecto con una solución intermedia de trabajo y el número de características implementadas cuenta=0.
  2. Nuestra tarea es implementar la función ++count.
  3. Para añadir las características que necesitamos:
    • escribir los métodos del árbol de objetos y conectar todas estas cosas a los manejadores de eventos con la lógica (tiempo estimado 3 horas *cuenta; cuenta=0).
    • escribir una muletilla en forma de variable global y utilizarla en varios métodos, donde la necesitemos (tiempo estimado 15 min. *contar.).
  4. Error de autonumeración (se trata de un informe de error para las metacomillas).
  5. Naturalmente, hemos elegido una muleta (es realmente difícil hacernos trabajar en este caso)
  6. si (lo hicimos) goto 2
  7. Si no, todo se va a la mierda, gritando help-mi y leyendo comentarios hilarantes de que está mal hacer eso.

Espero que hayas prestado atención al hecho de que el contador de características implementadas, aumenta el tiempo de implementación de la siguiente característica, pero cuando se implementa correctamente, se pone a cero.

Es una idea muy exagerada, pero así es como funciona en la vida real.

Lo que quiero decir es que si no reescribes el proyecto después de implementar todas las características, pasará a producción como un spoiler ilegible. Y luego, el ciclo de vida de cualquier proyecto conlleva un dolor de cabeza para la dirección: o poner a todo el equipo a refactorizar globalmente todo aquello que han hilado (y los competidores no duermen, ellos, malvados hijos de puta, escriben nuevas funcionalidades), o seguir escribiendo muletillas y parcheando bugs, filtrando a raudales.

Aunque este mensaje va dirigido principalmente a Peter, te pido que lo escribas sin argot, para poder entender bien tus mensajes, en un lenguaje accesible para el alumno de 1º de la escuela de programación, ya que el tema es para principiantes desde cero.

Saludos, Vladimir.

Razón de la queja: