Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Visualizações:
47
Avaliação:
(2)
Publicado:
\MQL5\Scripts\
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Visão geral técnica

O ProjectTemplateGen.mq5 é um utilitário de script do MetaTrader 5 que automatiza a criação de estruturas padronizadas de projetos de Expert Advisor. Ele implementa operações programáticas do sistema de arquivos dentro das restrições de segurança da MQL5 e, ao mesmo tempo, estabelece uma base consistente para o desenvolvimento de sistemas de negociação escalonáveis.


Principais recursos

  • Operações programáticas de arquivos: Demonstra a API de manipulação de arquivos da MQL5 para criar diretórios e escrever conteúdo estruturado
  • Geração baseada em modelos: Produz arquivos-fonte MQL5 prontos para compilar com esqueletos de manipuladores de eventos adequados.
  • Saída configurável: Permite a personalização do tempo de execução por meio de parâmetros de entrada sem modificar o código-fonte
  • Conformidade com o Sandbox: Opera no ambiente de execução seguro do MetaTrader 5

Detalhes da implementação

Arquitetura de operações de arquivos

O script implementa uma abordagem modular para a criação de arquivos, com funções distintas que lidam com diferentes aspectos da geração de projetos:

// Orquestração primária em OnStart()
string projectPath = "Files\\" + ProjectName + "\\";
if(!FolderCreate(projectPath)) { /* Tratamento de erros */ }
if(!CreateMainEA(projectPath + ProjectName + ".mq5")) return;
if(CreateIncludeFile) CreateInclude(projectPath + ProjectName + ".mqh");
CreateManifest(projectPath + "README.txt");

Estrutura do projeto gerado

MQL5/Files/[ProjectName]/
├── [ProjectName].mq5      #  Main Expert Advisor source file
├── [ProjectName].mqh      #  Optional header/class definition file  
└── README.txt            #  Project documentation and instructions


Principais componentes técnicos

1. Construção de caminho dinâmico

string projectPath = "Files\\" + ProjectName + "\\";

  • Usa caminhos relativos em conformidade com as restrições de sandbox da MQL5
  • Demonstra a concatenação de strings para navegação dinâmica no sistema de arquivos

2. Criação robusta de arquivos com tratamento de erros

int h = FileOpen(filePath, FILE_WRITE | FILE_TXT | FILE_ANSI);
if(h == INVALID_HANDLE)
{
    Print("ERROR: Cannot create main EA file. Error: ", GetLastError());
    return false;
}

  • Implementa verificação abrangente de erros para operações de arquivos
  • Fornece mensagens de erro significativas com códigos de erro do sistema
  • Garante a limpeza adequada de recursos com chamadas FileClose()

3. Geração de conteúdo estruturado

FileWrite(h,"//+------------------------------------------------------------------+");
FileWrite(h,"//| " + ProjectName + ".mq5");
FileWrite(h,"//| Author: " + AuthorName);
FileWrite(h,"#property strict");
FileWrite(h,"int OnInit()");
FileWrite(h,"{");
FileWrite(h,"   return INIT_SUCCEEDED;");
FileWrite(h,"}");

  • Gera código MQL5 sintaticamente válido
  • Mantém padrões consistentes de formatação e codificação
  • Cria código boilerplate compilável

Instruções de uso

Operação básica

  • Compilação: Compilar ProjectTemplateGen.mq5 no MetaEditor (F7)
  • Execução: Arraste o script do Navigator para qualquer gráfico
  • Configuração: Defina os parâmetros na caixa de diálogo de entrada:
  • ProjectName: Pasta de destino e nome do arquivo
  • AuthorName (nome do autor): Atribuição de direitos autorais e documentação
  • CreateIncludeFile: alternar a geração do arquivo de cabeçalho
  • Output (Saída): Verifique a guia Experts para obter informações sobre o status da geração e o caminho

Fluxo de trabalho pós-geração

O script cria projetos em MQL5\Files\[ProjectName]\ devido a restrições de segurança do script MQL5.

Conclua a configuração:

  1. Mover manualmente a pasta para MQL5\Experts\
  2. Abrir o arquivo principal .mq5 no MetaEditor
  3. Implementar sua lógica de negociação nos esqueletos de função fornecidos

Oportunidades de expansão para fluxos de trabalho avançados

Aprimoramentos de escalabilidade

  1. Modelos de vários arquivos: Ampliação para gerar scripts de indicadores, arquivos de biblioteca ou manifestos de recursos
  2. Arquivos de configuração: Adicione a geração de arquivos de configuração JSON/XML para gerenciamento de parâmetros
  3. Scripts de compilação: Incorporar compilação em lote ou arquivos de gerenciamento de dependências



Código :

//+------------------------------------------------------------------+
//|ProjectTemplateGen.mq5
//|Copyright 2025, Clemence Benjamin |
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Clemence Benjamin"
#property link      "https://www.mql5.com"
#property strict
#property description "Generates EA project template in MQL5//Files"
#property script_show_inputs
#property version "2.01"

//--- Entradas
input string ProjectName       = "Type your project name";//Nome do projeto
input string AuthorName        = "Type your name eg. Clemence Benjamin"; // Nome do autor
input bool   CreateIncludeFile = true;// Gerar um arquivo de cabeçalho

//+------------------------------------------------------------------+
//| Entrada de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("=== MQL5 Project Template Generator Started ===");
   Print("Project Name: ", ProjectName);
   Print("Author: ", AuthorName);

//--- caminho da sandbox ALLOWED
   string projectPath = "Files\\" + ProjectName + "\\";

   Print("Target path (sandbox-safe): ", projectPath);

//--- Criar pasta de projeto
   if(!FolderCreate(projectPath))
     {
      Print("ERROR: Cannot create project folder. Error: ", GetLastError());
      return;
     }

//--- Criar arquivo EA
   if(!CreateMainEA(projectPath + ProjectName + ".mq5"))
      return;

//--- Criar arquivo de inclusão
   if(CreateIncludeFile)
      CreateInclude(projectPath + ProjectName + ".mqh");

//--- Criar manifesto
   CreateManifest(projectPath + "README.txt");

   Print("SUCCESS: Project created in MQL5\\Files\\", ProjectName);
   Print("ACTION REQUIRED: Move folder to MQL5\\Experts\\ manually");
   Print("Folder path: ", TerminalInfoString(TERMINAL_DATA_PATH) + "\\" + projectPath);
  }

//+------------------------------------------------------------------+
//| Criar EA principal|
//+------------------------------------------------------------------+
bool CreateMainEA(const string filePath)
  {
   int h = FileOpen(filePath, FILE_WRITE | FILE_TXT | FILE_ANSI);
   if(h == INVALID_HANDLE)
     {
      Print("ERROR: Cannot create main EA file. Error: ", GetLastError());
      return false;
     }

   FileWrite(h,"//+------------------------------------------------------------------+");
   FileWrite(h,"//| " + ProjectName + ".mq5");
   FileWrite(h,"//| Author: " + AuthorName);
   FileWrite(h,"//+------------------------------------------------------------------+");
   FileWrite(h,"#property strict");
   FileWrite(h,"");
   FileWrite(h,"int OnInit()");
   FileWrite(h,"{");
   FileWrite(h,"   return INIT_SUCCEEDED;");
   FileWrite(h,"}");
   FileWrite(h,"");
   FileWrite(h,"void OnTick()");
   FileWrite(h,"{");
   FileWrite(h,"}");
   FileClose(h);
   return true;
  }

//+------------------------------------------------------------------+
//| Criar arquivo de inclusão|
//+------------------------------------------------------------------+
void CreateInclude(const string filePath)
  {
   int h = FileOpen(filePath, FILE_WRITE | FILE_TXT | FILE_ANSI);
   if(h == INVALID_HANDLE)
      return;

   FileWrite(h,"#ifndef __" + ProjectName + "_MQH__");
   FileWrite(h,"#define __" + ProjectName + "_MQH__");
   FileWrite(h,"class C" + ProjectName + " {};");
   FileWrite(h,"#endif");
   FileClose(h);
  }

//+------------------------------------------------------------------+
//| Criar manifesto|
//+------------------------------------------------------------------+
void CreateManifest(const string filePath)
  {
   int h = FileOpen(filePath, FILE_WRITE | FILE_TXT | FILE_ANSI);
   if(h == INVALID_HANDLE)
      return;

   FileWrite(h,"PROJECT TEMPLATE");
   FileWrite(h,"Name: " + ProjectName);
   FileWrite(h,"Author: " + AuthorName);
   FileWrite(h,"");
   FileWrite(h,"NOTE:");
   FileWrite(h,"Move this folder to MQL5\\Experts\\ to compile.");
   FileClose(h);
  }
//+------------------------------------------------------------------+

Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/68598

VR Breakdown level - Estratégia de negociação baseada na ruptura do High ou Low anterior VR Breakdown level - Estratégia de negociação baseada na ruptura do High ou Low anterior

Estratégia de negociação baseada na simples ruptura dos níveis anteriores de High ou Low

Sideways Martingale Sideways Martingale

O detector de tendências Martingale usa a IA onnx

EA Duplicate Detector EA Duplicate Detector

Permitir que o EA determine se há EAs duplicados no gráfico com base em condições.

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.