请观看如何免费下载自动交易
请在Facebook上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
43
等级:
(2)
已发布:
\MQL5\Scripts\
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

技术概述

ProjectTemplateGen.mq5 是一款 MetaTrader 5 脚本工具,可自动创建标准化的智能交易系统项目结构。它在 MQL5 的安全限制范围内实现了编程文件系统操作,同时为可扩展的交易系统开发奠定了一致的基础。


核心功能

  • 程序化文件操作:演示用于创建目录和编写结构化内容的 MQL5 文件处理 API
  • 基于模板的生成:生成可立即编译的 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(F7)
  • 执行:将脚本从导航器拖动到任意图表上
  • 配置:在输入对话框中设置参数:
  • 项目名称:目标文件夹和文件命名
  • 作者姓名:版权和文件归属
  • CreateIncludeFile: 切换头文件生成
  • 输出:检查专家选项卡,查看生成状态和路径信息

生成后工作流程

由于 MQL5 脚本的安全限制,该脚本会在 MQL5\Files\[ProjectName]\ 中创建项目。

通过以下方式完成设置

  1. 手动将文件夹移动到 MQL5\Experts\
  2. 在 MetaEditor 中打开主 .mq5 文件
  3. 在提供的函数骨架中实现您的交易逻辑

高级工作流程的扩展机会

可扩展性增强

  1. 多文件模板:扩展生成指标脚本、库文件或资源清单
  2. 配置文件:为参数管理添加 JSON/XML 配置文件生成功能
  3. 构建脚本纳入批量编译或依赖关系管理文件



代码

//+------------------------------------------------------------------+
//|ProjectTemplateGen.mq5
//|版权 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);
  }

//+------------------------------------------------------------------+
//| 创建主 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;
  }

//+------------------------------------------------------------------+
//| 创建包含文件|
//+------------------------------------------------------------------+
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

VR Breakdown level - 基于突破前期高点或低点的交易策略 VR Breakdown level - 基于突破前期高点或低点的交易策略

基于简单突破前期高点或低点的交易策略

Sideways Martingale Sideways Martingale

使用 onnx AI 的马丁格尔趋势检测器

EA Duplicate Detector EA Duplicate Detector

允许 EA 根据条件确定图表上是否有重复的 EA。

离散 离散

离散技术指标由价格和交易量的变化决定。