Normas generales para trabajar con proyectos locales

Se puede crear un proyecto local (archivo mqproj) desde el menú principal de MetaEditor o desde el menú contextual Navegador utilizando los comandos Nuevo proyecto o Nuevo proyecto a partir de un archivo fuente. En este último caso, primero hay que seleccionar el archivo en Navegador o elegirlo en el cuadro de diálogo Abrir. Como resultado, el archivo mq5 especificado se incluirá inmediatamente en el proyecto. El primero de los comandos mencionados lanza el Asistente MQL, en el que se debe seleccionar el tipo de programa o una opción de proyecto vacío (los archivos fuente se pueden añadir más tarde). El tipo de programa MQL para un proyecto se elige siguiendo los pasos habituales del Asistente.

El proyecto contiene varias secciones lógicas que se asemejan a un árbol (jerarquía) con todos los componentes. Se muestran en el panel izquierdo de Navigator, en una pestaña separada Proyecto.

Propiedades del proyecto indicador y navegador

Propiedades del proyecto indicador y navegador

Inmediatamente después de crear el proyecto, o posteriormente haciendo doble clic en la raíz del árbol, se abre en la parte derecha de la ventana un panel para configurar las propiedades del programa MQL. El conjunto de propiedades varía en función del tipo de programa.

La mayoría de las propiedades corresponden a las directivas #property del código fuente. Estas propiedades tienen prioridad: si las especifica tanto en el proyecto como en el código fuente, se utilizarán los valores del proyecto.

Algunos desarrolladores prefieren establecer las propiedades de forma interactiva en un cuadro de diálogo en lugar de codificarlas en el código fuente. Además, puede utilizar el mismo archivo mq5 en diferentes proyectos y crear versiones de un programa MQL con diferentes configuraciones (sin cambiar el código fuente).

Algunas propiedades sólo están disponibles en un proyecto. Esto incluye, por ejemplo, activar/desactivar las optimizaciones de compilación y las comprobaciones integradas de división por cero.

Durante la compilación del proyecto, el sistema analiza automáticamente las dependencias, es decir, los archivos de encabezado incluidos, los recursos, etc. Las dependencias aparecen en distintas ramas de la jerarquía del proyecto. En concreto, los archivos de encabezado de las carpetas estándar MQL5/Include incluidos en las directivas #include utilizando corchetes angulares (<filename>) caen dentro de Dependencias, y los archivos de encabezado personalizados incluidos con comillas dobles (#include "filename"), en la sección Encabezados.

Además, el usuario puede añadir al proyecto archivos relacionados con el producto de software acabado y que pueden ser necesarios para su funcionamiento normal o su demostración (por ejemplo, archivos con modelos de redes neuronales entrenados), pero que no están directamente incrustados en el código fuente. Para ello, puede utilizar la rama Ajustes y archivos. Su menú contextual contiene comandos para añadir un único archivo o un directorio completo al proyecto.

En particular, consideraremos más adelante ejemplos de proyectos que incluirán no sólo programas MQL cliente, sino también la parte servidor.

Los comandos Nuevo archivo y Nueva carpeta añaden un nuevo elemento a la carpeta con el archivo del proyecto: dichos elementos se buscan siempre en relación con el propio proyecto (en el archivo mqproj se marcan con la propiedad relative_to_project igual a true; véase más adelante).

Los comandos Añadir un archivo existente y Añadir una carpeta existente seleccionan uno o más elementos de la estructura de directorios existente dentro de la carpeta MQL5, y estos elementos dentro del archivo mqproj son referenciados en relación al MQL5 raíz (la propiedad relative_to_project es igual a false).

La propiedad relative_to_project es solo una de las pocas definidas por los desarrolladores de MetaTrader 5 para representar un proyecto en formato JSON. Recordemos que, como resultado de la edición del proyecto (jerarquía y propiedades), se forma un archivo mqproj con formato JSON.

Este es el aspecto de ese archivo para el proyecto de la imagen anterior:

{
  "platform"    :"mt5",
  "program_type":"indicator",
  "copyright"   :"Copyright (c) 2015-2022, Marketeer",
  "link"        :"https:\/\/www.mql5.com\/en\/users\/marketeer",
  "version"     :"1.0",
  "description" :"Create 2 trend lines on highs and lows using Hough transform.",
  "optimize"    :"1",
  "fpzerocheck" :"1",
  "tester_no_cache":"0",
  "tester_everytick_calculate":"0",
  "unicode_character_set":"0",
  "static_libraries":"0",
  
  "indicator":
  {
    "window":"0"
  },
  
  "files":
  [
    {
      "path":"HoughChannel.mq5",
      "compile":true,
      "relative_to_project":true
    },
    {
      "path":"MQL5\\Include\\MQL5Book\\HoughTransform.mqh",
      "compile":false,
      "relative_to_project":false
    }
  ]
}

Hablaremos de las características técnicas del formato JSON con más detalle en las siguientes secciones, ya que lo aplicaremos en nuestros proyectos de demostración.

Es importante tener en cuenta que todos los archivos a los que hace referencia el proyecto no se almacenan dentro del archivo mqproj, por lo que copiarlo a una nueva ubicación o mover sólo el archivo del proyecto a otro ordenador no lo restaurará. Para poder migrar un proyecto, configure un proyecto compartido para él y suba todo el contenido del proyecto a la nube. No obstante, esto puede requerir una reorganización de la estructura del sistema de archivos local, ya que todos los componentes deben estar dentro de la carpeta compartida del proyecto, mientras que el formato mqproj no lo requiere.