脚本: 转换 MT5 设置文件至 MT4

 

转换 MT5 设置文件至 MT4:

转换 MT5 格式 .set 文件至 MT4 格式。

作者: Richard Gunning

 
您可以在功能更强大的 MetaTrader 5 策略测试器中测试跨平台 EA,然后使用相同的参数登录запустить его в MetaTrader 4
生活的真相
 
Automated-Trading:

MT5 至 MT4 设置文件转换器

作者: Richard Gunning理查德-冈宁

请问谁能帮助我在 MT4 平台上使用 MT5 语言制作的 " 之 "字形颜色指标。我尝试使用上述脚本,但没有成功。

文件附在下面。

这是我的电子邮件 mgbe_nsor@yahoo.com。

感谢您的回复

附加的文件:
 
Automated-Trading:

MT5 至 MT4 设置文件转换器

作者: Richard Gunning理查德-冈宁

很好

谢谢

 

我喜欢一个 MT5 指标,并使用您的脚本将其转换为 MT4 设置文件。但不确定如何在没有 MQL4/ex4 文件的情况下使用 MT4 设置文件。

如果没有 MT4/ex4 文件,我如何在 MT4 图表上加载转换后的 MT4 设置文件?

是否可以将 MQL5 文件转换为 MQL4 文件?

 


我以为是 daora,但我试了一下,无法进行转换。有人能转换成塔巴加拉吗?

 
ThaironBathory:


我以为是 daora,但我试了一下,无法进行转换。有人能转换成 tabajara 吗?

这是一个英语论坛。

请仅使用英语发帖。

如有必要,请使用翻译工具。

 

感谢您提供的脚本。在第 94 行有一个导致数组超出范围的 错误。修正后的代码是

//+------------------------------------------------------------------+
//|                                             SetFileConverter.mq5 |
//|                                                  Richard Gunning |
//|                                            https://rjgunning.com |
//+------------------------------------------------------------------+
#property copyright "Richard Gunning"
#property link      "https://rjgunning.com"
#property version   "1.00"
#property description "Script for converting set files from MT5 format to MT4 format."
#property description "Set files must be in Files Folder or a SubDirectory."
#property script_show_inputs
#property strict

#include <Files/FileTxt.mqh>

//--- input parameters
input string   File=""; // SetFile Name to Convert (Leave blank to convert all)
input string   SubDirectory=""; // SubDirectory of Files Folder in which to search
input string   Directory="MT4-Output-Setfiles"; //Output Directory Name (Not Blank)

//--- Create Global Variables
CFileTxt *output=new CFileTxt;
CFileTxt *file=new CFileTxt;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long m_handle;
   bool m_file_found=true;
   string searchString="*.set";
   string thisDirectory=Directory;
   string src_path;
   string dst_path;

//--- Create Output Directory
   if(thisDirectory==""){thisDirectory="MT4-Output-Setfiles";}
   if(!output.FolderCreate(thisDirectory))
     {
      Print("Error Creating Destination Folder");
      delete output;
      delete file;
      return;
     }

//--- Set Search String and Find First Matching file in Directory
   if(File!=""){searchString=File;}
   if(SubDirectory=="")
     {
      m_handle=file.FileFindFirst(searchString,src_path);
     }
   else
     {
      m_handle=file.FileFindFirst(SubDirectory+"//"+searchString,src_path);
     }

//--- Loop through matching files and run conversion
   while(m_handle!=INVALID_HANDLE && m_file_found)
     {
      StringConcatenate(dst_path,thisDirectory,"//",src_path);
      StringReplace(dst_path,".set","-MT4.set");
      if(output.Open(dst_path,FILE_WRITE|FILE_REWRITE)!=INVALID_HANDLE &&
         file.Open(src_path,FILE_READ)!=INVALID_HANDLE)
        {
         Convert();
        }
      //--- Close SetFiles
      output.Close();
      file.Close();

      //--- Get Next SetFile
      m_file_found=file.FileFindNext(m_handle,src_path);

     }
//--- Delete Global objects
   delete output;
   delete file;
  }
//+------------------------------------------------------------------+
//|  Parse MT5 Set File Line By Line and Write Output Set File       |
//+------------------------------------------------------------------+
void Convert()
  {
   string line,str;
   string values[2];
   string split[];
   int opt;

   while(!file.IsEnding())
     {
      line=file.ReadString();
      StringSplit(line,'=',values);
      StringSplit(values[1],'|',split);
      if(ArraySize(split)==0){ArrayResize(split,1);}
      for(int i=0,count=0;i<ArraySize(split);i++)
        {
         if(split[i]==""){continue;}

         if(count==0)
           {
            str=StringFormat("%s=%s",values[0],split[i]);
           }
         else if(count<4)
           {
            str=StringFormat("%s,%d=%s",values[0],count,split[i]);
           }
         else
           {
            opt=(split[i]=="Y")?1:0;
            str=StringFormat("%s,F=%d",values[0],opt);
           }
         output.WriteString(str+"\r\n");

         count++;
        }
     }

  }
//+------------------------------------------------------------------+

 
为什么对我不起作用?
 
Arturo Lopez Perez:

感谢您提供的脚本。在第 94 行有一个导致数组超出范围的 错误。修正后的代码是

//+------------------------------------------------------------------+
//|                                             SetFileConverter.mq5 |
//|                                                  Richard Gunning |
//|                                            https://rjgunning.com |
//+------------------------------------------------------------------+
#property copyright "Richard Gunning"
#property link      "https://rjgunning.com"
#property version   "1.00"
#property description "Script for converting set files from MT5 format to MT4 format."
#property description "Set files must be in Files Folder or a SubDirectory."
#property script_show_inputs
#property strict

#include <Files/FileTxt.mqh>

//--- input parameters
input string   File=""; // SetFile Name to Convert (Leave blank to convert all)
input string   SubDirectory=""; // SubDirectory of Files Folder in which to search
input string   Directory="MT4-Output-Setfiles"; //Output Directory Name (Not Blank)

//--- Create Global Variables
CFileTxt *output=new CFileTxt;
CFileTxt *file=new CFileTxt;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long m_handle;
   bool m_file_found=true;
   string searchString="*.set";
   string thisDirectory=Directory;
   string src_path;
   string dst_path;

//--- Create Output Directory
   if(thisDirectory==""){thisDirectory="MT4-Output-Setfiles";}
   if(!output.FolderCreate(thisDirectory))
     {
      Print("Error Creating Destination Folder");
      delete output;
      delete file;
      return;
     }

//--- Set Search String and Find First Matching file in Directory
   if(File!=""){searchString=File;}
   if(SubDirectory=="")
     {
      m_handle=file.FileFindFirst(searchString,src_path);
     }
   else
     {
      m_handle=file.FileFindFirst(SubDirectory+"//"+searchString,src_path);
     }

//--- Loop through matching files and run conversion
   while(m_handle!=INVALID_HANDLE && m_file_found)
     {
      StringConcatenate(dst_path,thisDirectory,"//",src_path);
      StringReplace(dst_path,".set","-MT4.set");
      if(output.Open(dst_path,FILE_WRITE|FILE_REWRITE)!=INVALID_HANDLE &&
         file.Open(src_path,FILE_READ)!=INVALID_HANDLE)
        {
         Convert();
        }
      //--- Close SetFiles
      output.Close();
      file.Close();

      //--- Get Next SetFile
      m_file_found=file.FileFindNext(m_handle,src_path);

     }
//--- Delete Global objects
   delete output;
   delete file;
  }
//+------------------------------------------------------------------+
//|  Parse MT5 Set File Line By Line and Write Output Set File       |
//+------------------------------------------------------------------+
void Convert()
  {
   string line,str;
   string values[2];
   string split[];
   int opt;

   while(!file.IsEnding())
     {
      line=file.ReadString();
      StringSplit(line,'=',values);
      StringSplit(values[1],'|',split);
      if(ArraySize(split)==0){ArrayResize(split,1);}
      for(int i=0,count=0;i<ArraySize(split);i++)
        {
         if(split[i]==""){continue;}

         if(count==0)
           {
            str=StringFormat("%s=%s",values[0],split[i]);
           }
         else if(count<4)
           {
            str=StringFormat("%s,%d=%s",values[0],count,split[i]);
           }
         else
           {
            opt=(split[i]=="Y")?1:0;
            str=StringFormat("%s,F=%d",values[0],opt);
           }
         output.WriteString(str+"\r\n");

         count++;
        }
     }

  }
//+------------------------------------------------------------------+

 

英文版本中有人提出源代码中的第94行出现数组越界,附件是已经改好的脚本。

附加的文件: