Watch how to download trading robots for free
Find us on Facebook!
Join our fan page
Interesting script?
So post a link to it -
let others appraise it
You liked the script? Try it in the MetaTrader 5 terminal
Scripts

Project Template Generator - script for MetaTrader 5

Views:
158
Rating:
(1)
Published:
\MQL5\Scripts\
MQL5 Freelance Need a robot or indicator based on this code? Order it on Freelance Go to Freelance

Technical Overview

ProjectTemplateGen.mq5 is a MetaTrader 5 script utility that automates the creation of standardized Expert Advisor project structures. It implements programmatic file system operations within MQL5's security constraints while establishing a consistent foundation for scalable trading system development.


Core Capabilities

  • Programmatic File Operations: Demonstrates MQL5's file handling API for creating directories and writing structured content
  • Template-Based Generation: Produces ready-to-compile MQL5 source files with proper event handler skeletons
  • Configurable Output: Allows runtime customization through input parameters without modifying source code
  • Sandbox Compliance: Operates within MetaTrader 5's secure execution environment

Implementation Details

File Operations Architecture

The script implements a modular approach to file creation, with distinct functions handling different aspects of project generation:

// Primary orchestration in OnStart()
string projectPath = "Files\\" + ProjectName + "\\";
if(!FolderCreate(projectPath)) { /* Error handling */ }
if(!CreateMainEA(projectPath + ProjectName + ".mq5")) return;
if(CreateIncludeFile) CreateInclude(projectPath + ProjectName + ".mqh");
CreateManifest(projectPath + "README.txt");

Generated Project Structure

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


Key Technical Components

1. Dynamic Path Construction

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

  • Uses relative paths compliant with MQL5 sandbox restrictions
  • Demonstrates string concatenation for dynamic file system navigation

2. Robust File Creation with Error Handling

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;
}

  • Implements comprehensive error checking for file operations
  • Provides meaningful error messages with system error codes
  • Ensures proper resource cleanup with FileClose() calls

3. Structured Content Generation

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,"}");

  • Generates syntactically valid MQL5 code
  • Maintains consistent formatting and coding standards
  • Creates compilable boilerplate code

Usage Instructions

Basic Operation

  • Compilation: Compile ProjectTemplateGen.mq5 in MetaEditor (F7)
  • Execution: Drag script from Navigator onto any chart
  • Configuration: Set parameters in the input dialog:
  • ProjectName: Destination folder and file naming
  • AuthorName: Copyright and documentation attribution
  • CreateIncludeFile: Toggle header file generation
  • Output: Check Experts tab for generation status and path information

Post-Generation Workflow

The script creates projects in MQL5\Files\[ProjectName]\ due to MQL5 script security restrictions.

Complete the setup by:

  1. Manually moving the folder to MQL5\Experts\
  2. Opening the main .mq5 file in MetaEditor
  3. Implementing your trading logic in the provided function skeletons

Expansion Opportunities for Advanced Workflows

Scalability Enhancements

  1. Multi-File Templates: Extend to generate indicator scripts, library files, or resource manifests
  2. Configuration Files: Add JSON/XML configuration file generation for parameter management
  3. Build Scripts: Incorporate batch compilation or dependency management files



Code:   

//+------------------------------------------------------------------+
//|                                           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"

//--- Inputs
input string ProjectName       = "Type your project name";//Project Name
input string AuthorName        = "Type your name eg. Clemence Benjamin"; // Author Name
input bool   CreateIncludeFile = true;// Generate a header file

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

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

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

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

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

//--- Create include file
   if(CreateIncludeFile)
      CreateInclude(projectPath + ProjectName + ".mqh");

//--- Create manifest
   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);
  }

//+------------------------------------------------------------------+
//| Create main EA                                                   |
//+------------------------------------------------------------------+
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;
  }

//+------------------------------------------------------------------+
//| Create include file                                              |
//+------------------------------------------------------------------+
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);
  }

//+------------------------------------------------------------------+
//| Create manifest                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
Sideways Martingale Sideways Martingale

Martingale trend detector use onnx AI

Market Structure Onnx Market Structure Onnx

Market Structure Expert Advisor use LightGBM (Light Gradient Boosting Machine)

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

The Acceleration/Deceleration Indicator (AC) measures acceleration and deceleration of the current driving force.

MACD Signals MACD Signals

Indicator edition for new platform.