
Cambiamos a MQL5 Algo Forge (Parte 1): Creación del repositorio principal
Contenido
- Introducción
- Qué tenemos hasta ahora
- Comenzamos la transición
- Herramientas de trabajo con el repositorio
- Creación del repositorio principal
- Clonación del repositorio
- Configuración de archivos ignorados
- Carga de cambios
- Creación de una rama de archivo
- Preparación para la creación de ramas de proyectos
- Conclusión
Introducción
Al trabajar en un proyecto de menor envergadura, resulta inevitable enfrentarse a la necesidad de monitorear los cambios realizados en el código, agruparlos según su contenido semántico y volver a versiones anteriores del código. En general, para ello se usan diversos sistemas de control de versiones, como GIT o Subversion (SVN).
Por lo común, los entornos de desarrollo de software proporcionan herramientas integradas para trabajar con los repositorios de código de algún sistema de control de versiones. MetaEditor no es una excepción y también ofrece soporte al uso de su propio repositorio MQL Storage basado en el sistema de control de versiones SVN. Como se indica en la guía
MQL5 Storage es un repositorio personal en línea de códigos fuente MQL4/MQL5. El repositorio está integrado en el MetaEditor: podrá guardar y recuperar datos del mismo directamente en el editor.
El repositorio usa un sistema de control de versiones. Esto significa que siempre podrá ver cuándo y cómo se han modificado los archivos, deshacer cualquier cambio y volver a una versión anterior.
En MQL5 Storage, sus códigos fuente estarán siempre a salvo. Los datos se almacenan en un servidor seguro y solo usted tendrá acceso a ellos. Si falla el disco duro, podrá recuperar fácilmente todos los códigos guardados anteriormente.
A través del repositorio podrá compartir y sincronizar fácilmente plantillas y perfiles de gráficos, conjuntos de parámetros para probar programas MQL5 y conjuntos de herramientas comerciales entre diferentes plataformas.
MQL5 Storage también permite el desarrollo remoto colaborativo de aplicaciones con la ayuda de proyectos grupales
Sin embargo, el sistema de control de versiones GIT es más popular y, en nuestra opinión, de forma bastante merecida. Probablemente por eso, hace algún tiempo en el foro anunciaron los planes de pasar al uso de GIT como sistema de control de versiones integrado en MetaEditor, además de anunciarse un análogo propio del repositorio público de proyectos GitHub: MQL5 Algo Forge.
Este repositorio ya está disponible para su uso, pero el trabajo para integrar este con el MetaEditor aún no ha sido finalizado. Por lo tanto, permaneciendo en el marco de la utilización de MetaEditor como el principal entorno de desarrollo, solo tendremos que utilizar el repositorio MQL Storage basado en SVN actualmente disponible en él.
Durante el trabajo en diversos proyectos, hemos usado ampliamente nuestro sistema de control de versiones. Sin embargo, al trabajar en la serie de artículos "Desarrollamos un asesor experto multidivisa", la falta de capacidad para desarrollar código en ramas paralelas con su posterior fusión se hizo especialmente acuciante. Aunque el SVN permite su uso, la interfaz del MetaEditor no implementa soporte para ramas. Para utilizarlos podríamos usar un cliente SVN externo, pero esto ya requiere cierto esfuerzo para reconstruir un entorno familiar.
Así que la noticia del traslado a Algo Forge ha tenido una acogida muy calurosa. Nuestras esperanzas se relacionaban precisamente con que ahora el MetaEditor añadirá soporte para las ramas. Pero ya han pasado siete meses y las esperanzas aún no se han hecho realidad. Así que vamos a intentar arreglarnos con las herramientas que ya tenemos para que el desarrollo sea más cómodo.
Para comprender mejor lo que sigue, deberá tener al menos conocimientos básicos de los sistemas de control de versiones. Por lo tanto, si es necesario, le recomendamos que lea los materiales sobre este tema en el sitio web de MQL5 o en otro lugar, por ejemplo, en el artículo Trabajamos con Git: primeros pasos en GitHub.
Qué tenemos hasta ahora
Justo después de conocerse la noticia de la creación de MQL5 Algo Forge, vimos que existía un repositorio llamado mql5, que contenía todos los archivos de nuestro actual MQL Storage. Sin embargo, estos fueron añadidos por un único commit en nombre del usuario super.admin, por lo que naturalmente no había historial de cambios (commits) del repositorio actual. En principio, no es para tanto. Y está claro que resulta casi imposible transferir toda la historia de cambios entre distintos tipos de sistemas de control de versiones.
Hace algún tiempo, en MetaEditor, el nombre del repositorio utilizado cambió en algunos lugares. Por ejemplo, podemos ver exactamente "MQL5 Algo Forge" en el título del cuadro de diálogo que muestra al historia de cambios:
Sin embargo, la esencia sigue siendo la misma: todos los cambios van a MQL Storage, no a MQL5 Algo Forge. Así que los archivos trasladados al nuevo repositorio hace 7 meses no se actualizaron sin nuestra participación.
Al menos ahora podemos usar repositorios distintos. En el repositorio actual había un solo repositorio. Así que tuvimos que crear diferentes proyectos en carpetas distintas dentro de la carpeta de datos MQL5. Siempre se trata de la carpeta raíz del repositorio. Esto provocó que cuando creamos una nueva copia del terminal para trabajar en un nuevo proyecto y activamos el repositorio, obtuviéramos de este el código de todos los proyectos anteriormente creados. Cuando ya se acumularon un número notable de ellos, esto empezó a causar algunos inconvenientes.
No era posible simplemente eliminar de la carpeta de datos el código de los proyectos que actualmente no eran necesarios, ya que cada vez que confirmáramos cambios tendríamos que considerar que la eliminación de estos archivos tampoco debería trasladarse al repositorio.
Con la llegada de un repositorio GIT en toda regla, ahora tenemos la oportunidad de utilizar varias opciones para organizar el almacenamiento y el trabajo con el código de distintos proyectos:
- Cada proyecto está en un repositorio independiente.
- Cada proyecto se encuentra en una rama separada en el mismo repositorio.
- Una versión mixta de las dos primeras consistiría en crear un repositorio separado para algunos proyectos, mientras que algunos proyectos podrían coexistir en ramas separadas del mismo repositorio.
Cada uno de estos enfoques muestra ventajas e inconvenientes. A primera vista, si diferentes proyectos usan la misma librería, resultará inconveniente mantenerla en un repositorio separado: será mejor desarrollarla en una rama separada, fusionando ediciones con las ramas de los proyectos donde esta librería se usa de vez en cuando. Y si el proyecto es autosuficiente, resultará más apropiado utilizar un repositorio independiente para él, para no almacenar en él código innecesario de otros proyectos.
Comenzamos la transición
Cuando queremos cambiar algo, no está de más ocuparnos de mantener lo que ya tenemos. Probablemente no valga la pena utilizar el repositorio ya creado con el nombre mql5, porque durante los pasos posteriores de la integración por parte de MetaQuotes algunas otras acciones se pueden realizar en este repositorio bajo el nombre super.admin. Por ello, lo primero que deberemos hacer es crear un nuevo repositorio que acumule todos los proyectos disponibles actualmente. Para el nuevo repositorio, usaremos un modelo de almacenamiento de diferentes proyectos en ramas distintas. Para implementar esta división, adoptaremos las siguientes convenciones:
- La rama principal main estará vacía o contendrá solo una pequeña cantidad de código necesario para todos los proyectos.
- La rama archive independiente contendrá todo el código disponible en el momento de la migración. De ella podremos tomar código para ramas individuales del proyecto.
- Las demás ramas harán referencia a algún proyecto y contendrán su denominación al principio de su nombre.
- Podemos abrir múltiples ramas para un único proyecto utilizando el modelo elegido (por ejemplo, se puede utilizar el enfoque sugerido en el artículo Modelo acertado de ramificación en Git).
Por consiguiente, supondremos que tenemos una carpeta MetaTrader5 con el terminal instalado y MQL Storage conectado. Es decir, la carpeta de datos del terminal MetaTrader5/MQL5 contendrá el código de nuestros proyectos junto con algunos archivos estándar suministrados con el terminal.
Luego crearemos la nueva carpeta MetaTrader5.forge y copiaremos los dos archivos de inicio allí:
Después iniciaremos el terminal MetaTrader en modo portable desde esta carpeta. Al hacer doble clic sobre ella, se iniciará inmediatamente en ese modo. No obstante, podría ser necesario especificar explícitamente la clave /portable al ejecutar desde la línea de comandos, o mediante la creación de un acceso directo donde esta clave se pueda añadir al comando de inicio de la aplicación. Por el momento, puede no abrir una cuenta comercial demo y no conectarse a su cuenta MQL5.community.
En la nueva carpeta se ha creado una estructura inicial de carpetas, incluyendo la carpeta de datos MQL5. Esta aún no tiene nuestros archivos:
Vamos a iniciar el MetaEditor desde el terminal abierto pulsando F4.
Si hacemos clic con el botón derecho del ratón en el nombre de una carpeta, el menú contextual en el último elemento ofrecerá activar el repositorio MQL5 Algo Forge (aunque por ahora se activará el repositorio MQL). No lo activaremos, ya que queremos pasar a utilizar un nuevo tipo de repositorio.
Luego cerraremos el terminal MetaTrader y el MetaEditor, ya que no los necesitaremos por algún tiempo, y tendremos que realizar algunas acciones en la carpeta del terminal.
Herramientas de trabajo con el repositorio
A continuación, deberemos seleccionar una herramienta para trabajar con el futuro repositorio. En el futuro podría ser el propio MetaEditor, pero por ahora tenemos que usar algo más. Cualquier herramienta que nos permita trabajar con el repositorio GIT nos servirá, como, por ejemplo, Visual Studio Code (VSCode) y el propio GIT. Su versión para Windows puede descargarse de gitforwindows.org.
Por lo tanto, instale GIT y VSCode (o asegúrese de que se hayan instalado antes). En VSCode, estableceremos la extensión MQL Tools para trabajar con archivos MQL5:
Tras instalar la extensión, en sus ajustes especificaremos en el parámetro "Metaeditor5 Dir" la ruta al archivo del MetaEditor que debe iniciarse. Como no hay necesidad de trabajar con archivos fuente MQL5 ubicados fuera de la carpeta de trabajo de alguna copia del terminal, podrá seguir las recomendaciones y especificar la ruta relativa a la carpeta abierta actual en VSCode:
Y más abajo, en la configuración de esta extensión, le recomendamos que se asegure de marcar la casilla "Portable MT5".
También necesitaremos instalar la extensión C/C++ for Visual Studio Code para resaltar la sintaxis:
Desafortunadamente, aunque el lenguaje MQL5 es muy similar a C++, contiene algunas construcciones de lenguaje que se consideran inadmisibles en C++. Por eso en algunos sitios podemos ver mensajes de esta extensión sobre errores de sintaxis de C++, aunque todo resultará correcto desde el punto de vista de MQL5.
Ahora abriremos la carpeta de datos del terminal MetaTrader5.forge/MQL5 en VSCode:
Vamos a intentar abrir algún archivo de asesor experto:
El resaltado de sintaxis funciona, los botones para comprobar la sintaxis MQL5 y compilar este archivo utilizando el MetaEditor se han añadido a la esquina superior derecha de la ventana. Pero todas las directivas #include generan un mensaje de error. Esto se debe a que MQL5 no es C++ después de todo, y la ubicación de los archivos incluidos de la biblioteca estándar es diferente. Para solucionar este error, solo tendremos que seguir la sugerencia de corrección: añadir la ruta a la carpeta MetaTrader5.forge/MQL5/Include en la configuración de la extensión C/C++ for Visual Studio Code:
A continuación, el mensaje de error desaparecerá y el archivo del asesor experto se compilará correctamente:
Aquí apartaremos temporalmente VSCode, dado que MQL5 Algo Forge, el principal protagonista, deberá entrar en juego.
Creación del repositorio principal
Ahora entraremos en el sitio web https://forge.mql5.io/ y registraremos una nueva cuenta o utilizaremos nuestra cuenta existente en la comunidad MQL5.community para iniciar sesión:
Seleccione "New repository" en el menú de la esquina superior derecha:
Elegiremos algún nombre para el repositorio (por ejemplo, mql5-main). Al clonar el repositorio a una computadora local, podremos especificar nuestro propio nombre de carpeta raíz para los archivos del repositorio, por lo que no será necesario elegir un nombre. También agregaremos directamente la inicialización del repositorio añadiendo los archivos .gitignore y README.md:
Genial, ya hemos creado el repositorio, y también hemos hecho el primer commit automáticamente:
Para acciones posteriores necesitaremos copiar la URL del repositorio, que en nuestro caso es https://forge.mql5.io/antekov/mql5-main.git. Ahora volveremos del navegador al terminal VSCode, MetaEditor y MetaTrader 5.
Clonación del repositorio
Para clonar el repositorio en la computadora local, necesitaremos una carpeta MQL5 limpia en la carpeta terminal. Pero ahora ya está llena de archivos, así que tendremos que hacer esto:
- Cerramos VSCode, MetaEditor y el terminal MetaTrader5.
- Cambiamos el nombre de la carpeta MQL5 (por ejemplo, a MQL6).
Ahora no habrá ninguna carpeta llamada MQL5 en la carpeta del terminal MetaTrader5.forge:
Luego abriremos esta carpeta en VSCode e iniciaremos la consola pulsando [Ctrl + `].
Después copiaremos la URL del repositorio y ejecutaremos en la consola el comando de clonación, especificando el nombre de la carpeta raíz del repositorio en el computadora local después de la URL (deberá ser igual a MQL5):
git clone https://forge.mql5.io/antekov/mql5-main.git MQL5
Si es la primera vez que lo hacemos, deberemos introducir nuestras credenciales si el repositorio se ha creado como repositorio privado. Como resultado, en la carpeta del terminal aparecerá la subcarpeta anidada MQL5 con dos archivos (.gitignore y README.md)
Después moveremos todos los archivos y carpetas desde MetaTrader5.forge/MQL6 a la carpeta MetaTrader5.forge/MQL5 y eliminaremos MetaTrader5.forge/MQL6:
Luego abriremos la carpeta MetaTrader5.forge/MQL5 en VSCode, haremos clic en el icono del sistema de control de versiones en el panel izquierdo y veremos que hay muchos archivos nuevos (581) en nuestra carpeta de repositorio:
Pero todos estos archivos no tienen por qué estar en nuestro repositorio, ya que vienen con la plataforma MetaTrader que estamos instalando. Las nuevas versiones pueden cambiar la composición, la ubicación y el contenido de los archivos de la biblioteca estándar y los ejemplos de asesores expertos e indicadores. No podemos editarlos sin riesgo de perderlos la próxima vez que actualicemos el terminal MetaTrader o nos traslademos a una nueva carpeta de trabajo. Por eso no tendrá sentido añadirlos a nuestro repositorio.
Configuración de archivos ignorados
Esto es exactamente para lo que sirve el archivo .gitignore. En él, podremos listar qué archivos ignorará el sistema de control de versiones GIT. Y esto resulta muy cómodo: lugar de cientos de nuevos archivos en la lista de cambios, veremos solo nuestros archivos modificados. Dado que aún no hemos añadido nada propio a nuestro repositorio, todos los ficheros visibles en la lista de ficheros modificados deberían estar incluidos en los ficheros ignorados.
Para ello, abriremos el archivo .gitignore y sustituiremos su contenido de plantilla por, digamos, esto:
# ---> MQL5 # VSCode Preferences .vscode/* # Executables *.ex5 # MQL5 Standard Files /Experts/Advisors/ /Experts/Examples/ /Experts/Free Robots/ /Experts/Market/ /Files/ /Images/ /Include/Arrays/ /Include/Canvas/ /Include/ChartObjects/ /Include/Charts/ /Include/Controls/ /Include/Expert/ /Include/Files/ /Include/Generic/ /Include/Graphics/ /Include/Indicators/ /Include/Math/ /Include/OpenCL/ /Include/Strings/ /Include/Tools/ /Include/Trade/ /Include/WinAPI/ /Include/MovingAverages.mqh /Include/Object.mqh /Include/StdLibErr.mqh /Include/VirtualKeys.mqh /Indicators/Examples/ /Indicators/Free Indicators/ /Libraries/ /Logs/ /Profiles/ /Scripts/Examples/ /Scripts/UnitTests/ /Services/ /Shared Projects/ /experts.dat /mql5.*
Así le diremos al sistema de control de versiones que ignore todos los archivos de configuración de VSCode, todos los archivos compilados de asesores expertos e indicadores (como regla, solo los códigos fuente se almacenan en el repositorio) y todos los archivos estándar ubicados en las carpetas mencionadas anteriormente.
Carga de cambios
Después de guardar los cambios en el archivo .gitignore, VSCode mostrará que solo hay cambios en un único archivo, el propio .gitignore. Todos los demás archivos que se han devuelto a la carpeta MQL5, que ahora se habrá convertido en la carpeta raíz de nuestro repositorio mql5-main, se podría decir que no existen. Es decir, estarán presentes en la carpeta, pero el sistema de control de versiones no prestará atención a su presencia:
Luego confirmaremos los cambios en el repositorio local; para ello, introduciremos una descripción de los cambios realizados, por ejemplo, "Add standard files to .gitignore" y haremos clic en Commit.
Ahora mismo la información sobre las correcciones realizadas solo se guardará en el repositorio local. Para introducirla en el repositorio de nivel superior, deberemos ejecutar el comando push. Esto puede hacerse de varias formas, por ejemplo, pulsando el botón "Sync Changes", seleccionando Push en el menú que se esconde tras los tres puntos frente a CHANGES, o ejecutando el comando de consola git push.
Sin embargo, aunque todavía no hemos enviado el último commit al repositorio anterior, echaremos un vistazo a la historia de commits en GRAPH. Ahora mismo mostrará dos commits con los comentarios "Initial commit" y "Add standard files to .gitignore". A la derecha, frente a los commits, veremos el nombre de la rama en color. Para el primer commit, llamaremos origin/main, y para el segundo, simplemente main. En realidad es la misma rama main. El nombre origin es un alias del repositorio origen, por lo que el prefijo origin/ significará que esta confirmación es la última en la rama main del repositorio que se encuentra encima. El segundo commit no tendrá este prefijo, por lo que existirá y será el último commit solo en el repositorio local.
Ahora haremos clic en el botón "Sync Changes":
Los cambios se han enviado con éxito al repositorio superior, y la etiqueta de la rama púrpura del repositorio upstream se ha movido al segundo commit. Estos cambios podrán verse ahora accediendo al repositorio mencionado a través de la interfaz web:
Así pues, hemos preparado un nuevo repositorio vacío (bueno, casi vacío) para llenarlo con nuestros archivos. En este momento, tiene una sola rama llamada main, que solo tendrá los dos archivos que hemos añadido. El sistema de control de versiones ignorará los otros archivos presentes en la carpeta de datos de esta copia del terminal.
Creación de una rama de archivo
Como hemos mencionado antes, primero pondremos todos nuestros archivos en una rama para que se encuentren ya bajo el mando del sistema de control de versiones y vayan al repositorio anterior después de la operación push. Después de eso, podremos recuperar nuestros archivos desde el repositorio anterior en cualquier otra computadora si es necesario.
La creación de una nueva rama, así como otras operaciones del sistema de control de versiones, podrán realizarse a través de diferentes interfaces. Desde VSCode, esto podrá hacerse, por ejemplo, a través del menú de acciones del repositorio que se esconde tras los tres puntos. Deberemos seleccionar "Checkout to...":
A continuación, seleccionaremos "Create new branch..." en la lista de acciones que aparecerá.
En la interfaz web del repositorio anterior, podremos ir a la pestaña ramas (1 branch) y allí hacer clic en el botón para crear una nueva rama (resaltado con un rectángulo verde):
Hay una diferencia entre los dos métodos. El primero creará una nueva rama en la computadora local, y hasta que el comando push descargue los cambios, el repositorio superior no será consciente de la existencia de esta rama. El segundo método creará una nueva rama en el repositorio superior, por lo que ahora el repositorio local no sabrá de la existencia de esta rama hasta que el comando pull cargue los cambios. Esto no es ningún problema, todo lo que necesitamos hacer es sincronizar los repositorios (ejecutando comandos pull & push).
El tercer método consistirá en utilizar comandos de consola para gestionar el repositorio. Podemos crear una nueva rama llamada "archive" en el repositorio local ejecutando, por ejemplo, este comando desde la carpeta del repositorio:
git checkout -b archive
Si hacemos esto en la consola integrada en VSCode, veremos aproximadamente lo siguiente:
La consola nos indica que el repositorio se ha cambiado a la nueva rama "archive" recién creada. En la lista de confirmaciones, el nombre de la rama main ha cambiado a archive. En la lista de cambios, se nos pide que publiquemos la nueva rama en el repositorio anterior. Pero nosotros esperaremos con esta operación hasta que esta rama se llene con nuestros archivos.
Si recuerda, teníamos una carpeta inicial con el terminal MetaTrader, donde todos nuestros archivos se encontraban en la carpeta MQL5. Ahora crearemos el repositorio dentro de otra carpeta con el terminal. Para ello, copiaremos todo el contenido de la carpeta MQL5 de la carpeta del antiguo terminal a esta carpeta del nuevo terminal:
El sistema de control de versiones ha detectado inmediatamente que hay nuevos archivos en la carpeta del repositorio, y la lista de cambios los muestra para seleccionar otras acciones. En este caso, queremos añadir todos los archivos nuevos al índice (es decir, bajo el mando del sistema de control de versiones). Esto puede hacerse a través de la interfaz VSCode pulsando el botón "+" (Stage All Changes) en el encabezado de la lista de cambios, o ejecutando el comando de consola
git add .
Como podemos ver, cada nombre de archivo de la lista de cambios tiene ahora una A en lugar de una U, lo que significa que el archivo se ha añadido al índice. Lo único que quedará por hacer es confirmar y subir los cambios realizados al repositorio anterior:
Como podemos ver, ahora en la rama main el último commit es el segundo commit, mientras que el tercer commit ya está hecho en la rama archive. Vamos a comprobar que la nueva rama haya llegado al repositorio anterior:
Sí, el último commit es visible en el repositorio superior y se refiere a la nueva rama de archive. Si hacemos clic en él, podremos ver los cambios realizados en ese commit:
Por lo tanto, todos los archivos se han añadido a la rama de archivo. Intentemos ahora volver a la rama principal main en el repositorio local.
Preparación para la creación de ramas de proyectos
Para cambiar a la rama principal, ejecutaremos en la consola el comando
git checkout main
Nuestro repositorio local debería volver al estado que tenía antes de copiar todos nuestros archivos. Pero mirando el contenido de la carpeta MQL5 después de tal cambio, nos daremos cuenta de que muchas de nuestras carpetas con archivos de asesores expertos han permanecido en su lugar:
Si se fija bien, resulta que estas carpetas contienen archivos de asesores expertos compilados. La cuestión es que, como los hemos excluido del seguimiento por parte del sistema de control de versiones, al cambiar de la rama de archivo a la rama principal, estos archivos han permanecido intactos. Solo los archivos de código fuente que se han añadido al índice del sistema de control de versiones han desaparecido de las carpetas de nuestro proyecto.
Esto no resulta muy cómodo, así que borraremos los archivos compilados y los directorios vacíos formados después de eliminar estos archivos. Claro está que no deberíamos hacerlo manualmente, ya que nos llevará una cantidad de tiempo considerable y es posible que tengamos que realizar esta operación muchas veces en el futuro. Así que vamos a escribir un sencillo script que haga el trabajo.
Durante la escritura se ha hecho evidente que la simple eliminación de los archivos no basta para devolver la carpeta raíz a su estado original tras cambiar de archivo a la rama principal. También deberemos eliminar las carpetas que han quedado vacías después de eliminar los archivos .ex5. Algunas carpetas que pueden estar inicialmente vacías y no deben ser eliminadas, las añadiremos a la lista de excepciones. Esto incluirá todas las carpetas que hemos listado en el archivo .gitignore, y la carpeta .git con los archivos de servicio del sistema de control de versiones.
Este es el aspecto que podría tener el código de este script:
import os def delete_ex5_files_and_empty_dirs(path, excluded=['.git', '.vscode']): # Exceptions excluded = {os.path.join(path, dir) for dir in excluded} # Check all folders and files in the directory tree for root, dirs, files in os.walk(path, topdown=False): is_excluded = False for ex in excluded: if root.startswith(ex): is_excluded = True break if is_excluded: continue # Delete all files with extension .ex5 for file in files: if file.endswith('.ex5'): file_path = os.path.join(root, file) os.remove(file_path) print(f'File removed: {file_path}') # Delete all folders that have become empty after deleting files for dir in dirs: dir_path = os.path.join(root, dir) # IF the directory is empty after deleting files if dir_path not in excluded and not os.listdir(dir_path): try: os.rmdir(dir_path) print(f'Empty folder removed: {dir_path}') except OSError: pass # If error occurred, ignore excluded = [ '.git', '.vscode', 'Experts\\Advisors', 'Experts\\Examples', 'Experts\\Free Robots', 'Experts\\Market' 'Files', 'Images', 'Include\\Arrays', 'Include\\Canvas', 'Include\\ChartObjects', 'Include\\Charts', 'Include\\Controls', 'Include\\Expert', 'Include\\Files', 'Include\\Generic', 'Include\\Graphics', 'Include\\Indicators', 'Include\\Math', 'Include\\OpenCL', 'Include\\Strings', 'Include\\Tools', 'Include\\Trade', 'Include\\WinAPI', 'Indicators\\Examples', 'Indicators\\Free Indicators', 'Libraries', 'Logs', 'Presets', 'Profiles', 'Scripts\\Examples', 'Scripts\\UnitTests', 'Services', 'Shared Projects', ] if __name__ == '__main__': current_dir = os.getcwd() # Current working directory delete_ex5_files_and_empty_dirs(current_dir, excluded)
Lo guardaremos en el archivo clean.py en la carpeta raíz del repositorio y lo añadiremos al sistema de control de versiones en la rama principal. Después de cambiar a la rama principal desde alguna otra rama, solo tendremos que ejecutar este script, y todos los archivos compilados y las carpetas que han quedado vacías se eliminarán.
Conclusión
Con esto concluyen por el momento nuestros experimentos de introducción al uso del nuevo repositorio. Todos nuestros archivos se han transferido de forma segura a él. Asimismo, hemos realizado los trabajos preparatorios para seguir creando nuevas ramas del repositorio para proyectos individuales. Como todo el código ya está almacenado en la rama de archivo, podremos hacer esto gradualmente, a medida que surja la necesidad de volver a algunos de los proyectos anteriores.
También resultará muy interesante probar la creación de un repositorio público para alojar los códigos fuente de nuestra serie de artículos "Desarrollamos un asesor experto multidivisa". Aún no está claro cuál es la mejor forma de organizar la división del código perteneciente a distintas partes del ciclo, pero trabajaremos en esta cuestión en un futuro próximo.
¡Gracias por su atención y hasta la próxima!
Contenido del archivo
# | Nombre | Versión | Descripción |
---|---|---|---|
MQL5 | Carpeta raíz del repositorio (carpeta de datos del terminal) | ||
1 | .gitignore | 1.00 | Archivo con la lista de carpetas y archivos ignorados para el sistema de control de versiones git |
2 | clean.py | 1.00 | Script para eliminar archivos compilados y carpetas vacías al cambiar a la rama principal del repositorio |
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/17646
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.





- 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
Para ser honesto, este escenario realmente no ha sido considerado. No sé si la prohibición de un usuario en el foro ahora restringe el acceso al repositorio actual de MQL Storage, y si esto también restringirá el acceso al nuevo repositorio. Si es así, este factor de riesgo es sin duda vale la pena considerar.
Es difícil comprobarlo - por lo que la evaluación del riesgo es teórica ;-) pero existe un riesgo como tal
MQLStorage requiere inicio de sesión en la comunidad. La posibilidad técnica de iniciar sesión está en manos de los administradores. En teoría, si usted viola las reglas severamente (o alguien va a pensar que en serio) puede obtener una prohibición dura. Con una prohibición temporal krode como sólo "la derrota en los derechos", que es simplemente componentes del sitio y los servicios individuales están prohibidos.
Pero también hay virtuales, servidores, centros de datos, redes que se han ganado ban-po-ip . Lo más probable es que MQLStorage no esté disponible desde allí. Usted puede conseguirlo sin esfuerzos personales e incluso sólo por ip dinámica :-)
Para minimizar estos riesgos - mantenga copias de seguridad completas y un espejo independiente del repositorio. Ese es otro placer...
En primer lugar, https://forge.mql5.io/ tiene dos opciones de autorización. Puedes crear una cuenta completamente independiente de MQL5.com
En segundo lugar, una prohibición en el foro significa sólo una prohibición de publicar y no tiene ningún efecto en otros servicios.
Y en tercer lugar, ¿qué tienen que ver los baneos? Involúcrese en el desarrollo de robots, no en los foros.
En primer lugar, https://forge.mql5.io/ tiene dos opciones de autorización. Puede crear una cuenta completamente independiente de MQL5.com
Pero, ¿cómo acceder a los proyectos ME si no se depende de mql5.com? Parece que es obligatorio iniciar sesión en la comunidad allí.
¿Y entonces cómo acceder a los proyectos desde ME, si no se depende de mql5.com? Parece que es necesario iniciar sesión en la comunidad allí.
Ah, cierto. La cuenta se creará en MQL5.com de todos modos.
¿Y entonces cómo acceder a los proyectos desde ME, si no se depende de mql5.com? Parece que es necesario iniciar sesión en la comunidad allí.
Todavía no es necesario iniciar sesión en la comunidad. Si clona un repositorio de cualquier repositorio, como Algo Forge o GitHub, en una carpeta dentro de la carpeta de datos MQL5, será visible sólo como una carpeta con archivos. Esto es suficiente para editar, lanzar y depurar, pero todas las operaciones con el repositorio tendrán que realizarse utilizando herramientas de terceros. He utilizado esta opción durante algún tiempo, mientras que ME no podía trabajar con Algo Forge todavía. Pero en general es más fácil con la cuenta mql5.com.