Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Просмотров:
85
Рейтинг:
(2)
Опубликован:
\MQL5\Scripts\
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Технический обзор

ProjectTemplateGen.mq5 - это скриптовая утилита для MetaTrader 5, автоматизирующая создание стандартизированных структур проектов советников. Она реализует программные операции с файловой системой в рамках ограничений безопасности MQL5, создавая последовательную основу для разработки масштабируемых торговых систем.


Основные возможности

  • Программные файловые операции: Демонстрирует API MQL5 для работы с файлами, создания каталогов и записи структурированного контента
  • Генерация на основе шаблонов: Создание готовых к компиляции исходных файлов MQL5 с соответствующими скелетами обработчиков событий
  • Настраиваемый вывод: Позволяет настраивать вывод во время выполнения программы с помощью входных параметров без изменения исходного кода
  • Соответствие требованиям песочницы: Работает в безопасной среде исполнения MetaTrader 5

Детали реализации

Архитектура файловых операций

Скрипт реализует модульный подход к созданию файлов, при этом отдельные функции отвечают за различные аспекты генерации проекта:

// Первичная оркестровка в OnStart()
string projectPath = "Files\\" + ProjectName + "\\";
if(!FolderCreate(projectPath)) { /* Обработка ошибок */ }
if(!CreateMainEA(projectPath + ProjectName + ".mq5")) return;
if(CreateIncludeFile) CreateInclude(projectPath + ProjectName + ".mqh");
CreateManifest(projectPath + "README.txt");

Структура сгенерированного проекта

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


Ключевые технические компоненты

1. Динамическое построение путей

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

  • Использует относительные пути, совместимые с ограничениями песочницы MQL5
  • Демонстрирует конкатенацию строк для динамической навигации по файловой системе

2. Надежное создание файлов с обработкой ошибок

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

  • Реализует комплексную проверку ошибок при выполнении файловых операций
  • Предоставляет содержательные сообщения об ошибках с кодами системных ошибок
  • Обеспечивает надлежащую очистку ресурсов с помощью вызовов FileClose()

3. Генерация структурированного содержимого

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

  • Генерирует синтаксически корректный MQL5-код
  • Поддерживает последовательное форматирование и стандарты кодирования
  • Создает компилируемый шаблонный код

Инструкции по использованию

Основные операции

  • Компиляция: Скомпилировать ProjectTemplateGen.mq5 в MetaEditor (F7)
  • Выполнение: Перетащите скрипт из Навигатора на любой график
  • Конфигурация: Установить параметры в диалоге ввода:
  • ProjectName: Папка назначения и именование файла
  • AuthorName (Имя автора): Указание авторских прав и документации
  • CreateIncludeFile: Включить генерацию заголовочных файлов
  • Output: Проверьте вкладку Experts для получения информации о статусе генерации и пути

Рабочий процесс после генерации

Сценарий создает проекты в MQL5\Files\[ProjectName]\ из-за ограничений безопасности сценариев MQL5.

Завершите настройку, выполнив следующие действия:

  1. Вручную переместите папку в MQL5\Experts\
  2. Открыть основной файл .mq5 в MetaEditor
  3. Реализовать свою торговую логику в предоставленных скелетах функций

Возможности расширения для продвинутых рабочих процессов

Улучшение масштабируемости

  1. Многофайловые шаблоны: Расширение для генерации скриптов индикаторов, файлов библиотек или манифестов ресурсов
  2. Файлы конфигурации: Добавьте генерацию конфигурационных файлов JSON/XML для управления параметрами
  3. Скрипты сборки: Включите пакетную компиляцию или файлы управления зависимостями



Код :

//+------------------------------------------------------------------+
//|ProjectTemplateGen.mq5 |
//|Copyright 2025, Клеманс Бенджамин |
//|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"

//--- Входы
input string ProjectName       = "Type your project name";//Название проекта
input string AuthorName        = "Type your name eg. Clemence Benjamin"; // Имя автора
input bool   CreateIncludeFile = true;// Создайте заголовочный файл

//+------------------------------------------------------------------+
//| Ввод сценария|
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("=== MQL5 Project Template Generator Started ===");
   Print("Project Name: ", ProjectName);
   Print("Author: ", AuthorName);

//--- Путь к песочнице разрешен
   string projectPath = "Files\\" + ProjectName + "\\";

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

//--- Создайте папку проекта
   if(!FolderCreate(projectPath))
     {
      Print("ERROR: Cannot create project folder. Error: ", GetLastError());
      return;
     }

//--- Создайте файл EA
   if(!CreateMainEA(projectPath + ProjectName + ".mq5"))
      return;

//--- Создайте включаемый файл
   if(CreateIncludeFile)
      CreateInclude(projectPath + ProjectName + ".mqh");

//--- Создайте манифест
   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);
  }

//+------------------------------------------------------------------+
//| Создайте главного эксперта.|
//+------------------------------------------------------------------+
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;
  }

//+------------------------------------------------------------------+
//| Создайте включаемый файл|
//+------------------------------------------------------------------+
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);
  }

//+------------------------------------------------------------------+
//| Создайте манифест|
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/68598

Sideways Martingale Sideways Martingale

Трендовый детектор Мартингейла использует onnx AI

AIS Polygonal Number AIS Polygonal Number

В этом индикаторе реализован алгоритм многоугольных чисел. Он позволяет получить разные варианты сглаживания временного ряда.

EA Duplicate Detector EA Duplicate Detector

Позволяет советнику определять наличие дубликатов советников на графике в зависимости от условий.

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.