English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Cómo ser un mejor programador (parte 01): 5 cosas que evitar para convertirse en un programador exitoso de MQL5

Cómo ser un mejor programador (parte 01): 5 cosas que evitar para convertirse en un programador exitoso de MQL5

MetaTrader 5Ejemplos | 31 agosto 2021, 09:39
1 334 0
Omega J Msigwa
Omega J Msigwa

Introducción

"La mente del hombre, una vez estirada por una nueva idea, nunca recupera sus dimensiones originales."
— Oliver Wendell Holmes

Para llegar a ser mejores programadores, además de estudiar código 24/7, también debemos conocer las mejores prácticas, si no aprender a codificar en general. Aprender cómo aprender el código junto con las mejores prácticas de aplicación resulta vital para todos los que necesitan tener una carrera de codificación exitosa. Conociendo el cómo y el por qué, seremos conscientes de lo que hacemos; esto aumentará nuestra capacidad de recordar y nos ayudará a mejorar nuestro código en general.

Los métodos que veremos a continuación son herramientas probadas que pueden cambiar nuestra experiencia de programación y la manera en que programamos casi de la noche a la mañana, si aplicamos con atención todo lo que vamos a leer en este artículo.


01 — Abandone los hábitos ciegos de copiar y pegar

"El placer más noble es el gozo de la entendimiento". 
— Leonardo Da Vinci

Este es el mayor hábito de los novatos y, en ocasiones, incluso los programadores experimentados lo hacen. Recuerdo que cuando comencé a programar en 2019, la mayoría de las veces me metía en el foro buscando ese "Código que funciona". No prestaba mucha atención a lo que se explicaba cada vez que hacía una búsqueda sobre un tema en concreto; todo lo que buscaba era ese comentario en el alguien respondía "Gracias, ahora funciona" o cualquier otro comentario en el que alguien decía que le había servido de ayuda (especialmente la persona que formulaba la pregunta en primer lugar en el foro)… ¡¡¡No hace falta decir lo que hacía una vez encontraba ese fragmento de código que funcionaba!!!

Ahora me avergüenzo de recordar que una vez declaré que el gráfico de la biblioteca estándar no funcionaba

  


Ahora me doy cuenta de lo que no funcionaba en aquella época: era yo, porque incluso el código en sí era copiado de algún lugar que no recuerdo. Lo que intento decir es lo siguiente:

Asegúrese de comprender lo que está haciendo. No copie y pegue ciegamente el código del foro solo para hacer o arreglar cosas rápidamente

La mayoría de las veces, la forma en que muchos desarrolladores experimentados responden a los otros miembros del foro es difícil de seguir para las personas con este hábito, porque solo responden ofreciendo un enlace a la documentación de MQL5 sobre un tema determinado, sin mencionar las funciones automáticas en este sitio web que proporciona enlaces relacionados con un tema específico. Esto se debe a que el origen de la mayoría de los problemas es la incomprensión de los fundamentos y conceptos básicos.

SIEMPRE: ¡Busque el entendimiento, no la solución!

Una vez que comprenda los fundamentos, la codificación se volverá natural y automática.

Los hábitos de copiado y pegado no solo dañarán su reputación, sino que también le crearán más problemas de los que le solucionan.

02 — Renuncie a los problemas de piratería

Antes de solucionar un problema en su código, asegúrese de saber por qué tiene ese problema. Conocer su origen le ayudará a formular preguntas más adecuadas en el foro, en lugar de arrastrar su código esperando un código a cambio para solucionar el problema que ha surgido por no saber en absoluto qué y por qué está codificando. Por ejemplo, yo en la imagen de arriba: en primer lugar, copié el código en otro lugar con la esperanza de cambiar con ello la plantilla del gráfico, sin conocer ni comprender completamente el gráfico de la biblioteca estándar; por eso terminé diciendo que la biblioteca no funciona.

Una vez que localice el problema o error, asegúrese de conocer completamente la biblioteca y el código que no funciona. Hay varias formas de hacerlo en MQL5, las dos principales son:

  • Documentación de MQL5
  • Foro

Documentación MQL5:

Afortunadamente para nosotros, tenemos toda la documentación al alcance de la mano y no hay necesidad de estar en línea en los motores de búsqueda. Los programadores profesionales ya saben esto, pero los principiantes pueden ver aquí dónde y cómo acceder a ella rápidamente: abra el MetaEditor, vaya a la sección de Ayuda y clique en la opción desplegable Referencia MQL5, ahí lo tiene.

DocumentationAccess

Foro MQL5:

La mejor forma de aprender y encontrar lo que no ha visto a través de su propio código es compartir sus problemas con otros desarrolladores. ¡Pero no cometa el mismo error que yo, NO COPIE!

 "Es el camino de la artesanía el que lleva a una comprensión y dominio auténticos".

Los novatos se encuentran en lo que llamo el CICLO DE NOVATOS

Ciclo de novatos

03 — Olvide el perfeccionismo

"Hecho es mejor que perfecto."
— Idea popular Silicon Valley

No puedo decir cuánto y por cuánto tiempo me contuvo esto de compartir cosas. Siempre estaba buscando el Santo Grial para poder compartirlo con otros usuarios en este sitio web. Me tomó tiempo darme cuenta de que si tengo algo que compartir, debería compartirlo y no dejar que mis propios pensamientos me lo impidan.

¿Qué es mejor?

¿Hacer un indicador, asesor, biblioteca o trozo de código en los próximos años, o ser prolífico y crear cientos de resultados imperfectos durante un año?

¿Escribir un código lo suficientemente bueno para mis compañeros desarrolladores o clientes, o un código imperfecto para mí mismo? Siempre tendremos tiempo y oportunidades de mejorar un código que necesita ser mejorado; en otros casos, ahorraremos tiempo enviando el código más rápido.

Podemos ver que esto se aplica a casi todo lo que los programadores pueden imaginar, todos los días:

  • Nuestras aplicaciones móviles se actualizan 
  • Nuestros ordenadores y teléfonos y sistemas operativos de software se actualizan
  • Incluso los lenguajes de programación como MQL5, Python y otros, mejoran día a día 

Incluso nuestros lenguajes de programación y los frames de datos se actualizan; así que usted probablemente imaginará que la mejora con el tiempo no es algo negativo.

En MQL5.com, esto se aplica prácticamente en todas partes, por ejemplo la actualización de programas en el mercado.

Actualización de versiones

En el foro, podemos cambiar un post, eliminar o simplemente actualizar una respuesta e incluso un comentario propio. ¡Qué locura! Ja, ja, ja

04 — Evite escribir código inteligente

"La depuración es el doble de compleja que escribir el código en primer lugar. Por lo tanto, si escribimos nuestro código de la forma más inteligente posible, no seremos lo suficientemente inteligentes como para depurarlo." 
— Brian Kernighan

¡El código que se ciñe a las mejores prácticas aprendidas de la documentación ya es inteligente, BRO! 

Escribe un código bueno, limpio y simple que sea fácil de leer y entender. Nadie se beneficiará de ese código tuyo tan inteligente, incluido usted, tres meses después. Para muchos novatos, resulta extremadamente difícil trabajar con el llamado código inteligente (los desarrolladores freelance pueden asegurárselo). ¿Alguna vez ha visto el código de una modificación de una asesor o de CodeBase que, por razones que no terminaba de comprender, resultaba muy complicado? No me malinterprete, no estoy metiéndome con nadie, ni animando a nadie a crear un código fácil para tareas complejas; todo lo que digo es que hay una forma de asegurarse de que incluso un código complicado pueda ser fácil de trabajar (creo que de eso precisamente trata la creatividad). El código limpio puede ayudar.

Aquí tenemos algunos consejos para escribir un código limpio:

  • Estilícelo 
  • Hágalo consistente
  • Coméntelo
  • No se permita florituras 

Estilícelo:

Simplemente usaré una función para contar una posición según su tipo como ejemplo

int CountPosByType(ENUM_POSITION_TYPE type){
 int counter = 0; 
  for (int i=PositionsTotal(); i>=0; i--)
     if (m_position.SelectByIndex(i))
     if (m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
      { counter++; }
  return counter;
}

La función es bastante fácil de entender, pero no sigue los anteriores consejos de código limpio, por lo que, en primer lugar, la estilizaré. Es muy sencillo, solo hay que clicar en el botón azul parecido a un peine en el MetaEditor

estilizador de código mql5

Este es el aspecto de nuestro código después de estilizarlo:

int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

¿Lo ve? Con solo estilizar nuestro código, ha pasado de difícil de leer a totalmente legible. Y esto ni siquiera ha modificado nuestro código, porque tenemos que dar el primer paso para escribir un código limpio, y eso implica hacerlo legible: porque si podemos leerlo, podremos modificarlo.

Hágalo consistente:

No puedo ni siquera decirle cuántas veces he terminado creando demasiadas variables para casi el mismo trabajo en los diferentes niveles de una función, ¿por qué no crear una variable global? También lo animaría a que identifique fácil de trabajar con fácil de recordar: es decir, a que use nombres de funciones que se recuerden con facilidad y que expliquen claramente de qué trata la función, para que pueda recordarlo incluso 6 meses más tarde. Esto reducirá su plazo de entrega hasta tres veces, ya que no tendrá que comenzar desde cero a crear funciones que ya se encuentran en un EA anterior: podrá copiar estas de sus trabajos anteriores.

Para el nombre de la función, lo haremos así:

int CountPositionsByType(ENUM_POSITION_TYPE type)

Dado que somos consistentes con nuestro código, podemos recurrir a la búsqueda y configurar la opción Buscar en los archivos       findinFiles


Desde allí, podremos buscar la función necesaria dentro de todos los EA e indicadores, y esto simplificará nuestro trabajo. La próxima vez que queramos crear la función, podremos copiarla y volver a usarla nuevamente en otros asesores.

La mejor manera de escribir un código consistente es usar POO (Programación Orientada a Objetos).

Un código consistente es fácil de usar, mientras que la depuración se debe realizar en un solo lugar

Coméntelo:

Incluso las cosas que los novatos llaman pequeñas, tales como escribir comentarios en nuestro código, pueden marcar una diferencia en la productividad. No solo harán que el código resulte legible, los comentarios también podrán ser un recordatorio, por ejemplo, sobre la naturaleza de una variable.

Ahora vamos a definir nuevamente el contador, esta vez con comentarios explicativos:

int counter = 0; //Variable to store the number of positions

La próxima vez que queramos acceder al contador, será así:

código inteligente mql5

Lo mejor de comentar un código en MetaEditor, es que los comentarios actuarán como recordatorio del cometido de una variable o trozo de código. Esto resulta muy útil cuando tenemos tantas variables que olvidamos su cometido.

No se permita florituras:

La POO puede ayudar mucho cuando queremos mantener el código conciso. También debemos tener cuidado con diferentes funciones que puedan hacer más o menos el mismo trabajo. Por ejemplo, no necesitamos tener una función que compruebe si existe una posición según su tipo cuando ya tenemos otra función para contar posiciones según su tipo.

05 — Renuncie a escribir el código más corto posible

"La legibilidad es lo primero, después va lo demás".

Ahora podemos ver que los desarrolladores creen que están escribiendo un buen código si usan la menor cantidad de líneas posibles, o el menor número posible de caracteres en una línea. Esta tampoco es la decisión correcta.

El código escrito se leerá docenas, si no cientos de veces, así que le recomiendo esforzarse por escribir un código legible, independientemente de su longitud.

Puedo relacionar esto con los desarrolladores que a veces son perezosos (he sido de esos): implementamos unas cuantas cosas solo para terminar un trabajo en freelance o algo por el estilo.

Considere proporcionar entradas fáciles de usar en su asesor. Escriba un código para gestionar todas las excepciones y avisar al usuario de qué algo va mal, por ejemplo, si alguna entrada se ha establecido en cero, en cuyo caso el asesor podría no funcionar correctamente.

Esto es lo que quiero decirle:

   los códigos de error, los códigos de devolución comercial, los errores de compilación y las excepciones en el sistema están para que usted los conozca, no para los usuarios. Por consiguiente, vamos a considerar escribir un código que ofrezca alertas, comentarios sobre el recuadro o lo que sea, pero teniendo en cuenta que el usuario solo puede ver lo que se supone que debe y considerando qué acciones deben efectuarse para hacer las cosas bien.

Sé que parece aburrido implementar todos los componentes desde cero, ¡pero siempre hay una mejor forma de descubrirlo! Puede mantenerlos en algún lugar de los archivos de inclusión para incluirlos o para copiarlos y pegarlos, podrá encontrar una manera adecuada.


Conclusión

Lo positivo de las buenas prácticas es que, si bien son difíciles de seguir y desarrollar, una vez afianzadas, nos ayudarán por el resto de nuestra carrera.

 ¡Gracias por su atención!


Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/9643

Gráficos en la biblioteca DoEasy (Parte 79): Clase de objeto "Fotograma de animación" y sus objetos herederos Gráficos en la biblioteca DoEasy (Parte 79): Clase de objeto "Fotograma de animación" y sus objetos herederos
En el presente artículo, desarrollaremos la clase de fotograma de animación y sus clases herederas. La clase permitirá dibujar figuras, con el posterior almacenamiento y restauración del fondo según la figura dibujada.
Gráficos en la biblioteca DoEasy (Parte 78): Fundamentos de animación en la biblioteca. Cortando las imágenes Gráficos en la biblioteca DoEasy (Parte 78): Fundamentos de animación en la biblioteca. Cortando las imágenes
En el artículo, definiremos los principios de animación que se usarán en algunas partes de la biblioteca, y también desarrollaremos una clase para copiar una parte de una imagen y pegarla en un lugar específico del objeto de formulario, con la posibilidad de guardar y restaurar la parte del fondo del formulario sobre la que se superpondrá la imagen.
Cómo ser un mejor programador (parte 02): 5 cosas que evitar para convertirse en un programador exitoso de MQL5 Cómo ser un mejor programador (parte 02): 5 cosas que evitar para convertirse en un programador exitoso de MQL5
Este es un artículo de lectura obligada para cualquiera que desee mejorar su carrera como programador. Esta serie de artículos tiene como objetivo convertirlo a usted en el mejor programador posible, sin importar la experiencia que tenga. Las ideas analizadas funcionan tanto para principiantes como para profesionales de la programación en MQL5.
Patrones con ejemplos (Parte I): Pico múltiple Patrones con ejemplos (Parte I): Pico múltiple
El artículo inicia un ciclo de análisis de patrones de reversión en el marco del trading algorítmico. Comenzaremos la idea examinando la primera y más interesante familia entre estos patrones, originada a partir de los patrones Double Top y Double Bottom.