Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Igor, las ganas de aprender el lenguaje MQL5 no se pierden, al contrario, sólo aumentan. Estoy desgarrado, por qué soy tan tonto y no puedo entender cosas simples con este operador de bucle. Lo principal es que sin el operador de bucle el código funciona perfectamente, pero con el bucle es un completo desastre. De todos modos, llegaré al fondo del asunto. Sin embargo, tengo mucho menos tiempo para el autoaprendizaje desde que el periodo de cuarentena ha terminado y tengo raros momentos en el trabajo en los que puedo estudiar el idioma. La mayoría de las veces estudio el idioma por la tarde y a última hora de la noche.
Necesito resolver 2 tareas para finalmente llegar a escribir el código del Trailing Stop:
Vladimir, te estás metiendo en cosas raras. Te han dado una plantilla: https://www.mql5.com/ru/forum/352460/page58#comment_18726492 La has ignorado y has decidido seguir adelante con tu ingenio. Este camino es difícil y puede llevar años. En su camino, estudie C, C++, Rust, C#, polimorfismo, herencia, desreferenciación de punteros, conversión de tipos dinámicos: Comprueba o conduce. Debes tomar el camino más corto hacia el objetivo. Si quiere que se le ponga un final, escríbalo. No es necesario estudiar C y C++ para hacerlo. Todo esto como optativa si te apetece.
La situación del bucle for es ilustrativa. Es una construcción poderosa que debe aplicarse en el lugar adecuado. Tienes una red y un algoritmo auxiliar. Por eso no hay enumeración de posiciones, no hay magos, así que no tienes este bucle. Por supuesto, todo funcionará sin él, pero el bucle sólo te hace sentir como aceite. Pero te empeñas en utilizarlo, parece ser un fin en sí mismo: utilizar la mayor cantidad posible de todo y de todos, para tener algo en reserva.
Vladimir, te estás metiendo en un pequeño berenjenal. Te dieron una plantilla: https://www.mql5.com/ru/forum/352460/page58#comment_18726492 La ignoraste y decidiste seguir adelante con tu mente. Este camino es difícil y puede llevar años. En su camino, estudie C, C++, Rust, C#, polimorfismo, herencia, desreferenciación de punteros, conversión de tipos dinámicos: Comprueba o conduce. Debes tomar el camino más corto hacia el objetivo. Si quiere que se le ponga un final, escríbalo. No es necesario estudiar C y C++ para hacerlo. Todo esto como optativa si te apetece.
La situación del bucle for es ilustrativa. Es una construcción poderosa que debe aplicarse en el lugar adecuado. Tienes una red y un algoritmo auxiliar. Por eso no hay enumeración de posiciones, no hay magos, por lo que no se tiene este bucle. Naturalmente, todo funcionará sin él, pero el bucle sólo produce aceite. Pero usted se obstina en utilizarlo, por lo que parece ser un fin en sí mismo: puede utilizar la mayor cantidad posible de todo y de cualquier cosa que tenga en stock.
¡Hola Vasily!
Gracias por unirte oportunamente al tema y orientarme en el camino correcto como siempre. Ahora permítanme explicar todo en un orden:
Vasily, te agradezco enormemente la orientación y la crítica constructiva. También expreso mi agradecimiento a todos los participantes de este tema que me ayudan en mi autoestudio del lenguaje de programación MQL5 desde cero.
El autoaprendizaje continúa. Continuará.
Saludos, Vladimir.
¡Buenas tardes a todos!
Si quisiera añadir algo interesante, creo que la idea de "autoformación en MQL5 desde cero" no es del todo correcta. Si una persona es un 0 en programación, tiene que aprender a programar primero. Si el objetivo es aprender a programar en MQL desde cero, una persona debe primero aprender aprogramar en C, al menos lo más básico, y luego aprender a escribir en MQL, porque MQL es de hecho C, pero está especializado para una determinada tarea, una persona no entiende cómo funcionan los bucles, y ya tratando de escribir programas. Es como intentar aprender latín sin saber ruso...
Otra cosa es que C no es un lenguaje muy amigable para aprender a programar, es sencillo, pero es demasiado conciso, es difícil para un principiante leer y entender el código sin tener conocimientos básicos de algoritmos, tipos de datos, álgebra booleana... En C tres caracteres seguidos pueden significar varias cadenas en otro lenguaje.
¡Para aprender a programar simplemente desde cero, para la base, para aprender a hablar con un ordenador en un (no importa qué) lenguaje, yo recomendaría comenzar con Pascal, el libro más fácil para empezar con él (2-3 semanas a gusto), a continuación, C (allí después de Pascal max semana con diligencia, dominar la sintaxis, me refiero a las habilidades básicas del lenguaje!) y luego tomar lenguajes especializados como MQL, porque MQL es C, que tiene un pequeño giro y simplificación, ya que está diseñado para una sola tarea y el compilador sabe lo obvio. Y C a su vez es una especie de Pascal comprimido en RAR, pero Pascal es casi inglés =).
Ahora sobre los bucles:
Cuando aprendí a programar, me ayudó la analogía con las sumas en álgebra, donde se especifica el valor inicial de n, el valor final de n y la fórmula con ese n a calcular.
Hola Andrey! Estoy completamente de acuerdo contigo sobre la base. No lo tengo y nunca lo he tenido. Pero, como dice el refrán, Moscú no se construyó de una vez. Gracias por sus consejos y sugerencias.
Saludos, Vladimir.
Sí, estoy de acuerdo: ¡sus códigos también son buenos! Te estás alterando por nada. Tómate tu tiempo para ordenar el código sin prisas y ya está. Todo es elemental aquí - seleccionar y arrastrar: (cuánto más fácil - sólo su tema de elegir la posición NEED... :-))
Además, incluir archivos - significa que están en su código como funciones también y eso es todo.
Gracias, Roman, por los códigos y los enlaces. ¡Estoy tratando los códigos con calma y seguramente no me apresuro a ninguna parte!
Sinceramente, Vladimir.
Buen día y buen humor a todos!
Sigo estudiando el lenguaje de programación MQL5 . Hoy, como prometí, estoy publicando para que todos vean el código de la plantilla del Asesor Experto diseñada para escribir un punto final. Debido al hecho de que el código de la plantilla de EA resultó ser bastante engorroso, tuvimos que reducir los comentarios tanto como fuera posible. La versión completa del Asesor Experto con comentarios detallados sobre cada línea de código, en una presentación accesible para un estudiante de 1.° grado de una escuela de programación, se publicará más adelante en forma de archivo con el nombre de trabajo Trailing_Stop.mq5 para que para no producir otro "footcloth" en el sitio.
Antes de publicar el código, el EA se probó en el probador de estrategias . No se han identificado problemas. El EA utiliza un sistema de contabilidad de posición de compensación. Este sistema de contabilidad implica que en un momento solo puede haber una posición abierta en la cuenta para el mismo símbolo (instrumento financiero).
Por el momento, el EA tiene la capacidad de:
Además, el EA tiene una plantilla preinstalada, proporcionada amablemente por Vasily Sokolov, que se completará con el código durante el proceso de autoaprendizaje.
¡¡¡UNA ADVERTENCIA!!!
¡El Asesor Experto se desarrolla de acuerdo con el plan de autoaprendizaje para una cuenta de demostración y solo con fines educativos! ¡No está diseñado para operar en una cuenta real y obtener ganancias!
Saludos cordiales, Vladímir.
¡Buen día y buen humor a todos!
Sigo estudiando el lenguaje de programación MQL5. Ayer escribí el código de Stop Loss en el punto de equilibrio para las posiciones de venta y compra. Estoy pegando el código sin ningún comentario todavía. Publicaré la versión completa del Asesor Experto con una descripción detallada de cada línea de código, en una forma accesible para los alumnos de 1er año de la escuela de programación, más adelante en el archivo con el título de trabajo Trailing_Stop.mq5. Antes de publicar el código, comprobamos el rendimiento del Asesor Experto en el probador de estrategias. No se ha encontrado ningún problema.
Saludos, Vladimir.
¡Buen día y buen humor a todos!
Sigo estudiando el lenguaje de programación MQL5. Hoy, como prometí, pego el código de la plantilla de mi Asesor Experto diseñada para escribir un trailing stop. Debido a que el código de la plantilla EA es bastante engorroso, he tenido que acortar al máximo los comentarios. La versión completa del Asesor Experto con comentarios detallados sobre cada línea del código, en una forma accesible para un estudiante de primer grado de la escuela de programación, se publicará más tarde como un archivo con el nombre de trabajo Trailing_Stop.mq5, para evitar crear otro estropicio en el sitio web.
...
Muy bien. La idea principal está bien captada. Me gusta especialmente el proceso de desarrollo:
¡Buen día y buen humor a todos!
Sigo estudiando el lenguaje de programación MQL5. Ayer escribí el código para el Stop Loss en el punto de equilibrio para las posiciones de compra y venta.
Es decir, todo es correcto. No es necesario resolver el problema de una vez en un solo lugar. Deberías resolverlo poco a poco, como lo has hecho tú. Primero, describe la lógica básica en la función OnTick y las funciones básicas como OpenBUY, OpenSELL, TickUP, TickDown.
Luego, cuando este código básico está depurado, compilado y funciona dentro de sus posibilidades, se empieza a describir las demás funciones. Esto puede hacerse al día siguiente o incluso a la semana. Esto significa que no hay que cambiar el código principal. Creo que puedes ver por qué.
Ahora hay que perfeccionar esta forma de desarrollo: seguir escribiendo funciones, vinculando la funcionalidad a través de ellas al código existente. El programa existente debería funcionar correctamente. La complejidad no debería aumentar. Las funciones que se añadan deben devolver resultados sencillos y claros. Sus nombres deben ser tan sencillos como claros para usted. Si no puede hacerlo, puede ser porque necesita escribir no una, sino dos o incluso tres funciones para resolver el problema. Al principio, el marco general de la aplicación será difícil de definir. Por eso es mejor que pidas consejo a colegas más experimentados. Con el tiempo, aprenderás a desarrollar esas plantillas por tu cuenta.
A medida que pase el tiempo,tendrá que utilizar más y más construcciones del lenguaje dentro de las funciones para que se adapten a sus necesidades.En este punto, ampliarás gradualmente, y sobre todo de forma orgánica, tus conocimientos sobre las construcciones del lenguaje, aprenderás los bucles, las matrices e incluso a trabajar con punteros.
De hecho, ya ha aprendido la parte más difícil de la programación, aunque todavía no ha consolidado el material que ha aprendido. Lo único que tienes que hacer ahora es repetirlo muchas veces para consolidarlo. A partir de aquí no habrá nada fundamentalmente nuevo, todo es lo mismo: Plantilla general -> Descripción de los nombres de las funciones y sus parámetros-> Escritura del contenido de estas funciones -> Disposición de estas funciones en la unidad central. Eso es todo. Lo único que queda es perfeccionar la habilidad y ser constante. Varias construcciones adicionales que se empiezan a utilizar, como los bucles y las matrices, son sólo detalles, a veces muy bien hechos, pero nada más que detalles.
Como la perfección no tiene límites, añadiré algunos comentarios más sobre el código:
He resaltado en amarillo dos lugares no triviales.
1) Observa que el código se repite en el primer if y en el siguiente else. La única diferencia está en la última línea y la acción final (OpenBUY, OpenSell).
2) Las condiciones para entrar en el otro bloque no son obvias. No son visibles debido a la abundancia de "bichos". De hecho, sólo dependen de la última línea:
Esto es una señal segura de que aquí falta una función.
Tenemos que escribir una función que devuelva true si el tiempo de apertura de la posición se corresponde con el dado (lo escribiré más adelante)
Muy bien. El punto principal se capta correctamente. Me gustó especialmente el proceso de desarrollo:
Es decir, todo está bien. No hay que resolver el problema de una vez en un solo lugar. Hazlo gradualmente, como lo has hecho. Primero, describe la lógica básica en la función OnTick y las funciones básicas como OpenBUY, OpenSELL, TickUP, TickDown.
Luego, cuando este código básico está depurado, compilado y funciona dentro de sus posibilidades, se empieza a describir las demás funciones. Esto puede hacerse al día siguiente o incluso a la semana. Esto significa que no tienes que cambiar el código principal. Creo que puedes ver por qué.
Ahora hay que perfeccionar esta forma de desarrollo: seguir escribiendo funciones, vinculando la funcionalidad a través de ellas al código existente. El programa existente debería funcionar correctamente. La complejidad no debería aumentar. Las funciones que se añadan deben devolver resultados sencillos y claros. Sus nombres deben ser tan sencillos como claros para usted. Si no puede hacerlo, es posible que tenga que escribir no una, sino dos o incluso tres funciones para resolver el problema.
Para que una función pueda realizar las tareas que se le han encomendado, con eltiempo tendrá que utilizar más y más construcciones del lenguaje dentro de dichas funciones. Es entonces cuando poco a poco, y sobre todo de forma orgánica, ampliarás tus conocimientos sobre las construcciones del lenguaje, aprenderás los bucles, las matrices e incluso trabajarás con punteros.
¡Hola, Vasily! Muchas gracias por sus oportunas sugerencias y apoyo. Tus comentarios sobre el papel de las funciones y los principios de construcción del código del programa me han ayudado mucho en el aprendizaje del lenguaje de programación MQL5:
Ahora que la información en mi cabeza está estructurada, es más fácil entender el código escrito no sólo por mí, sino también por otros programadores. Espero que este tema sea una buena ayuda para aquellos que están empezando a aprender el lenguaje de programación MQL5 desde cero.
Saludos, Vladimir.