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
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 "piedras". 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 especificado (lo escribiré más adelante).
Sí, Vasily, tienes razón, deberíamos haber escrito una función.
Saludos, Vladimir.
Por cierto, presta atención al tamaño total de tu programa. Ya es bastante grande. ¿Qué te parece? Por cierto, un novato no puede escribir un código de tamaño tan grande: las variables se mezclan, los paréntesis son demasiado grandes, los errores de compilación se arrastran como setas después de la lluvia. Después de la compilación, un programa de tal tamaño empieza a tener fallos y nadie puede entender qué es lo que está mal. Y todo funciona en su código por alguna razón), y está claro en las funciones lo que está pasando y cómo. En una palabra, es una belleza.
Gracias, Vasily. Mucho de su trabajo aquí, ya que la plantilla de trailing stop fue proporcionada por usted. Sólo tengo que rellenar las funciones con código. Actualmente estoy trabajando en el trailing stop. Una parte ya está hecha, pero hay algunas cosas que todavía tengo que entender para poder mostrar la versión final de EA al público.
Saludos, Vladimir.
He añadido algunas funciones. Terminé con un código como este:
Todavía no entiendo el trabajo de magia. En la red no tiene sentido. En cualquier caso, puede eliminar fácilmente esta comprobación, ya que sólo se realiza en una función.El bloque OnInit también está sobredimensionado y todavía no está escrito correctamente. En primer lugar, hay que intentar escribir identificadores, no números. Devuelve INIT_SUCCEED en lugar de -1. En segundo lugar, el cambio es excesivo aquí. Este código debe contener un if o un switch. Primero hay que escribir uno y luego el otro - sólo aceite.
En tercer lugar, tenemos que controlar todos los tipos de cuentas. Tenemos Demo y luego tenemos Real. Y luego está el Concurso. Pero incluso si no hubiera una tercera cuenta, debería haber un talón que recogiera todas las demás variantes:
Y la guinda del pastel: los comentarios. Cuando escribimos funciones, hay mucho espacio, nuestra mano se ve arrastrada a poner comentarios en las partes correctas del código:
Cuando el mismo código se escribe "a la vez" en el cuerpo de alguna función principal, se hace lo más corto posible y sin comentarios:
Así que escribe más funciones, te animan a escribir los comentarios adecuados, y aunque hacen el código más verboso, también lo hacen más claro.
El tercer punto: aquí estás escribiendo:
¿Por qué añadir otro tipo de comentario? Sólo tienes que sustituir lo que hay en el bloque por tu comentario:
Recuerda que los comentarios son para ti, no tú para los comentarios. Elimine los antiguos y añada los suyos propios. Cíñase al formato: en la cabecera de la función, indique breve pero claramente en los comentarios qué hace la función y qué valores devuelve en qué casos.
Por cierto, cuando se separaron las condiciones de tiempo de cierre de la posición en una función separada, quedó claro que no estaba escrita correctamente:
Tomé el contenido interno de su código. Está claro que la posición se cerrará sólo en un minuto. В 23:50. Este código funcionará, pero si algo va mal a las 23:50, la posición quedará pendiente a las 23:51. Por eso hay que escribirlo al menos:
E incluso esta opción no es la ideal. Una solución más potente es utilizar los modos de negociación. Sin embargo, este es el siguiente nivel de excelencia. Hasta ahora, este diseño se ajusta a la perfección.
¡Hola Vasily! Muchas gracias por sus oportunos consejos y su apoyo. Tus mensajes sobre el papel de las funciones y cómo construir el código de un 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.
Buen trabajo, Vladimir. Los buenos codificadores suelen tener buenos algoritmos, y cuentan con buenos fijadores de objetivos... Todo comienza con las metas y los objetivos correctos. Puedes construir una casa de una vez y luego encontrar agua. Puedes encontrar agua primero y construir la casa pensando en el agua. Objetivos / propósito, y la fijación de objetivos es de oportunidad.... Vas directamente al algoritmo .... ¡Pero en general es muy bueno!
Por cierto, cuando se separaron las condiciones de tiempo de cierre de la posición en una función separada, quedó claro que no estaba escrito correctamente:
Tomé el contenido interno de su código. Está claro que la posición se cerrará sólo en un minuto. В 23:50. Este código funcionará, pero si algo va mal a las 23:50, la posición seguirá colgada a las 23:51. Por eso hay que escribirlo al menos:
E incluso esta opción no es la ideal. Una solución más potente es utilizar los modos de negociación. Sin embargo, este es el siguiente nivel de excelencia. Siempre que este diseño pueda soportarlo.
Vasily, ¡eres un gran maestro!
Ninguna cartilla o libro de texto puede dar esa explicación. Todo lo que has sugerido lo implementaré sin duda en la versión final del EA.
Saludos, Vladimir.
Me desvío del tema por un momento y les contaré la historia de un profesor. En nuestro instituto, cuando ya nos estábamos especializando, teníamos un profesor maravilloso. En ese momento, estábamos estudiando el álgebra de la lógica. Muchos estudiantes no pudieron entender durante mucho tiempo cómo 1+1 podía ser igual a 1? Si 1x1, obviamente sería igual a 1. ¡¡¡Y ahí lo tienes!!! Este profesor utilizó ejemplos sencillos para darnos una explicación de lo que es el OR lógico y lo que es el AND lógico, que recordaré el resto de mi vida.
Imagina, dice el profesor, que tienes que llegar al instituto por la mañana para las clases. Puede tomar un trolebús o un tranvía para llegar al instituto. Ha llegado a la parada del autobús, pero no hay ni trolebús (condiciónfalsa o igual a 0), ni tranvía (condición falsa o igual a 0). Naturalmente, no podrá llegar al instituto (condición false o igual a 0). Comprueba 0+0=0. ¡Maravilloso! Si llega a la parada y hay un trolebús (condición verdadera o igual a 1), O un tranvía (condición verdadera o igual a 1) , O ambos, un trolebús y un tranvía juntos, entonces llegará definitivamente al instituto y la condición verdadera o igual a 1 se mantendrá. Comprobación: 1+0=1, 0+1=1 y 1+1=1. ¡Todo encaja!
Utilizando los mismos ejemplos con el trolebús y el tranvía, nos explicó lo que es el AND lógico.
¡Ese es el poder del talento de un profesor! Lo recordaré el resto de mi vida.
Sinceramente, Vladimir.
Buen trabajo. Los buenos codificadores suelen contar con buenos algoritmos, y tienen a los que fijan los objetivos... Todo comienza con las metas y los objetivos correctos. Puedes construir una casa de una vez y luego encontrar agua. Puedes encontrar agua primero y construir la casa pensando en el agua. Objetivos / propósito, y la fijación de objetivos es de oportunidad.... Vas directamente al algoritmo .... ¡Pero en general es muy bueno!
Gracias, Valery, por tu participación en el tema y por un diálogo constructivo.
Saludos, Vladimir.