Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 85
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Технический обзор
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.
Завершите настройку, выполнив следующие действия:
- Вручную переместите папку в MQL5\Experts\
- Открыть основной файл .mq5 в MetaEditor
- Реализовать свою торговую логику в предоставленных скелетах функций
Возможности расширения для продвинутых рабочих процессов
Улучшение масштабируемости
- Многофайловые шаблоны: Расширение для генерации скриптов индикаторов, файлов библиотек или манифестов ресурсов
- Файлы конфигурации: Добавьте генерацию конфигурационных файлов JSON/XML для управления параметрами
- Скрипты сборки: Включите пакетную компиляцию или файлы управления зависимостями

Код :
//+------------------------------------------------------------------+ //|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
Трендовый детектор Мартингейла использует onnx AI
AIS Polygonal Number
В этом индикаторе реализован алгоритм многоугольных чисел. Он позволяет получить разные варианты сглаживания временного ряда.
EA Duplicate Detector
Позволяет советнику определять наличие дубликатов советников на графике в зависимости от условий.
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.