
Consejos de un programador profesional (parte I): guardado, depuración y compilación de códigos. Trabajando con proyectos y logs
Contenido
- Introducción
- Guarde su código en subdirectorios separados
- Un código para varios terminales
- Use un sistema de control de versiones
- Use un terminal separado en una cuenta demo para depurar el código
- Compile todos los archivos del código al mismo tiempo
- Use sistemas de control de proyectos y tareas
- Selección de logs
- Resaltado de logs
- Búsqueda contextual
- Conclusión
Introducción
Guarde su código en subdirectorios separados
Los archivos de programa del terminal se encuentran en el directorio MQL5. Este directorio es el llamado «sandbox». El acceso desde el exterior está cerrado. Y eso es lo correcto. Aunque, si conectamos nuestra propia DLL, seguramente podremos entrar donde queramos.
Por ejemplo, aquí tenemos la estructura del proyecto Cayman:
- /Experts/Cayman/ - asesor experto
- /Files/Cayman/ - archivos de datos (ajustes, parámetros)
- /Include/Cayman/ - biblioteca de clases (funciones)
- /Scripts/Cayman/ - scripts operativos principales
- /Scripts/CaymanDev/ - scripts de desarrollador (para la depuración)
Principales ventajas de esta distribución:
- Búsqueda contextual solo en los archivos del proyecto con la ayuda de TotalCommander
- Control de versiones con la ayuda de Git (controlar solo los archivos del proyecto, ignorando el resto)
- Se simplifica el proceso de copiado a otro terminal (demo -> real – inicio)
Un código para varios terminales
Una señal esencial de las buenas prácticas de programación es la ausencia de código duplicado. Si encontramos las mismas líneas de código en varios lugares, podremos "envolverlas" en una función sin dudarlo. Lo mismo se aplica a los archivos MQL5: el texto del archivo del programa debe encontrarse en un único ejemplar. Esto se resuelve usando un enlace simbólico al directorio MQL5.
Imaginemos que el directorio de proyectos se encuentra en D:\Project, mientras que el directorio de datos del terminal se encuentra en C:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\9EB2973C469D24060397BB5158EA73A5
- Cerramos el terminal
- Pasamos al directorio de datos
- Trasladamos el directorio MQL5 al directorio de proyectos
- Dentro del directorio de datos, iniciamos el cmd e introducimos el comando
mklink /D MQL5 D:\Project\MQL5 - Iniciamos el terminal
El terminal ni siquiera notará que el sandbox (archivos de programa) se ha trasladado a D:\Project\MQL5.
La principal ventaja de esta distribución es que todos los proyectos personales se encuentran en un mismo directorio (D:\Project).
Use un sistema de control de versiones
Un profesional ni siquiera se planteará para qué hace falta esto. Sin el sistema no hay forma de trabajar, especialmente si hablamos de realizar desarrollos en equipo. La única cuestión es qué sistema en concreto elegir. En la práctica, es Git.
Ventajas principales de Git:
- Repositorio local. Podemos experimentar con ramificaciones. Podemos pasar a cualquier ramificación (versión) con un solo clic.
- Interfaz gráfica cómoda (TortoiseGit). Control con el ratón.
- Repositorio en la nube gratuito para proyectos personales (Bitbucket). No temeremos que se estropee nuestro PC (disco duro)
- Historia de cambios de los archivos con posibilidad de restaurar o visualizar las versiones antiguas (se pueden ver cómodamente en Bitbucket)
No vamos a mostrar instrucciones detalladas sobre la instalación y la configuración, pero sí que hablaremos de ciertas particularidades. Instalamos Git (para trabajar usando la línea de comandos) y TortoiseGit (para trabajar con el ratón). En el directorio D:\Project\MQL5, creamos el archivo .gitignore con el siguiente contenido
# excluir archivos *.ex4 *.ex5 *.dat log.txt # excluir directorios por completo Images Indicators Libraries Logs Presets Profiles Services "Shared Projects" Levels Params # excluir el contenido de los directorios Experts/* Files/* Include/* Scripts/* # excepto los subdirectorios !Experts/Cayman !Files/Cayman !Include/Cayman !Scripts/Cayman !Scripts/CaymanDev
Este archivo permite monitorear las versiones solo de los archivos de programa (*.mq?) del proyecto. Creamos un repositorio local en el directorio MQL5. Añadimos los archivos y hacemos el primer commit (fijamos la versión). El repositorio local ya está preparado. Trabajamos con el código y hacemos commits con mayor frecuencia con una descripción breve de los cambios. En lo sucesivo, esto facilitará la visualización y la búsqueda en la historia.
Para conectarnos a un respositorio en la nube, primero debemos crear una cuenta y un repositorio en Bitbucket. Lo lógico es darle al repositorio el mismo nombre que al proyecto. En nuestro caso, CaymanMQL5, porque también tenemos CaymanMQL4. Importamos el repositorio local al respositorio en la nube. El repositorio en la nube está listo. Acciones principales a través de TortoiseGit (TG):
- Trabajo con el código (una tarea – un commit)
- Comprobación de los cambios (TG/Check for modifications…)
- Adición de nuevos archivos (Add)
- Eliminación de archivos (Delete) innecesarios (missing)
- Hacer commit en el repositorio local (Commit)
- Enviamos los datos al repositorio en la nube (Push)
Use un terminal separado en una cuenta demo para depurar el código
Deberemos tener la última versión operativa del código en una cuenta real (solo archivos *.ex? sin *.mq?). El código en proceso de depuración deberá encontrarse en una cuenta demo. Para copiar desde demo a real, podemos usar el archivo batch:
@echo off setlocal set PROJECT=Cayman set SOURCE=d:\Project\MQL5 set TARGET=c:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\2E8DC23981084565FA3E19C061F586B2\MQL5 set PARAMS=/MIR /NJH /NJS rem MIR - MIRror a directory tree and delete dest files/folders that no longer exist in source rem NJH - No Job Header rem NJS - No Job Summary echo Copy *.ex? // Source to Production echo Source = %SOURCE% echo Production = %TARGET% robocopy %SOURCE%\Experts\%PROJECT% %TARGET%\Experts\%PROJECT% *.ex? %PARAMS% robocopy %SOURCE%\Scripts\%PROJECT% %TARGET%\Scripts\%PROJECT% *.ex? %PARAMS% rem Copy all files except AppSettings.txt, [Levels], [Params] robocopy %SOURCE%\Files\%PROJECT% %TARGET%\Files\%PROJECT% *.* %PARAMS% /XF AppSettings.txt /XD Levels Params robocopy %SOURCE%\Scripts\Cayman %TARGET%\Scripts\Cayman *.ex? /NJH /NJS robocopy %SOURCE%\Scripts\CaymanDev %TARGET%\Scripts\CaymanDev *.ex? /NJH /NJS echo. endlocal pause
Compile todos los archivos del código al mismo tiempo
El objetivo es mantener la consistencia del código, para evitar, por ejemplo, los cambios en los parámetros de alguna función. El experto se compila, pero nos queda un script que usa la variable antigua de la función. En este caso, además, se trata de un script operativo (compilado anteriormente), pero no ejecuta lo que debe. Para la compilación por lotes, podemos utilizar el archivo batch:
@echo off setlocal set METAEDITOR="C:\Program Files\RoboForex - MetaTrader 5\metaeditor64.exe" set CAYMAN=d:\Project\MQL5\Scripts\Cayman set CAYMAN_DEV=d:\Project\MQL5\Scripts\CaymanDev echo METAEDITOR=%METAEDITOR% echo CAYMAN=%CAYMAN% echo CAYMAN_DEV=%CAYMAN_DEV% echo. echo Wait compile... D: cd %CAYMAN% echo %CAYMAN% for %%F in (*.mq?) do ( %METAEDITOR% /compile:%%F /log type %%~dpnF.log ) del *.log cd %CAYMAN_DEV% echo %CAYMAN_DEV% for %%F in (*.mq?) do ( %METAEDITOR% /compile:%%F /log type %%~dpnF.log ) del *.log endlocal echo. pause
Use sistemas de control de proyectos y tareas
Estos sistemas siempre se usan al realizar desarrollos en equipo, y también resultan útiles para los proyectos personales. Hay muchos sistemas y metodologías de control de proyectos. Nosotros hemos elegido ZenKit. Es gratuito para los equipos pequeños. Tiene un tablero Kanban muy cómodo.
Antes teníamos varios tableros Kanban (uno por cada proyecto). La desventaja de usar varios tableros es que no se ve la imagen general. Por eso, hemos decidido añadir un proyecto como una etapa (estadio) de desarrollo. Así resulta mucho más sencillo controlar las tareas. Por ejemplo, en nuestro tablero Kanban hay 5 estadios (etapas) de desarrollo:
- Leyenda – descricpión del proyecto, enlaces e instrucciones. Las entradas no se trasladan a otras etapas. El propósito general del tablero siempre está visible y hay enlaces a los recursos útiles disponibles.
- Cayman – proyectos en MQL5, MQL4
- Website – proyecto del sitio web personal
- Aceptada – tarea en desarrollo
- Lista – tarea realizada
El proceso de trabajo con el tablero es sencillo y visual. Encontramos una idea interesante, una solución o un error en el programa. La formulamos brevemente y la añadimos al tablero, al proyecto correspondiente. Podemos añadir imágenes y archivos. Seleccionamos una tarea, la arrastramos al estadio "Aceptada". Trabajamos con la tarea, la ponemos a prueba y la arrastramoss al estadio "Lista".
Según el número de tareas en el proyecto, se ve de inmediato dónde están los problemas o los cuellos de botella. Debemos intentar tomar para su desarrollo tareas de los proyectos «sobrecargados». El objetivo es equilibrar el proyecto en cuanto al número de tareas. En el desarrollo en equipo, también tenemos la etapa "Simulación", pero en este caso no es algo relevante, porque el autor trabaja solo.
Selección de logs
Como ya sabemos, todas las muestras de las funciones Print se escriben en el log del Terminal MQL5\Logs\yyyyMMdd.log. En este caso, todos los símbolos (instrumentos) están mezclados. Para seleccionar los logs del símbolo indicado, utilizamos el siguiente archivo batch:
echo off if "%2"=="" goto Help find /I "%2" < %1 > "%~n1-%2.log" goto Exit :Help echo. echo Filter log-file echo findLog.cmd logFile text echo Example echo findLog.cmd 20200515.log gbpjpy echo Result echo 20200515-gbpjpy.log echo. pause :Exit
Resaltado de logs
En el modo de depuración, tenemos mucha información escrita en el log. Analizarla en un Terminal en ejecución resulta problemático. Por consiguiente, haremos esto:
- Borramos el log en la pestaña Herramientas/Expertos
- Provocamos la muestra del log
- Copiamos todas las líneas en el archivo log.txt
- Analizamos tranquilamente este archivo en Notepad++ (NPP) con resaltado
NPP tiene varias opciones para resaltar texto
- Clicamos dos veces sobre una palabra: esta será seleccionada inmediatamente en todo el texto
- Buscar/Marcar selección/Usar estilo: coloreará el texto en todo el documento
- Utilizar una sintaxis personalizada con resaltado de tokens específicos
Búsqueda contextual
Para la búsqueda contextual de texto, utilizamos el administrador de archivos TotalCommander. Las principales ventajas de esta opción son:
- Buscar solo por archivos de proyecto (los archivos "ajenos" no se incluirán en los resultados de la búsqueda)
- Posibilidad de usar expresiones regulares en la búsqueda.

Conclusión
Este es el primer artículo del autor. La serie continuará. Hablaremos de soluciones exitosas y describiremos estas con detalle. Invitamos a todos a compartir sus experiencias y hallazgos en los comentarios al artículo.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/9266





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso