如何使用命令行工具编译MQL4文件?

10

现在我正在使用 MetaEditor 编译我的 MetaTrader.mq4 文件,将其编译成.ex4 文件。

但是我的.mq4文件是由Java进程生成的,我希望自动化编译过程。

是否有一个命令行编译器工具可以通过编程调用?

3个回答

36

要从命令行编译源代码文件,您可以使用MetaEditor。例如:

metaeditor.exe /compile:"C:\Program Files\Platform\MQL5\Scripts\myscript.mq5"

64位系统请使用 metaeditor64.exe

在 Linux/macOS 中,可以使用 Wine 实现,例如:

wine metaeditor.exe /compile:"MQL4/Experts/MACD Sample.mq4"

对于大规模编译,您可以指定文件夹,例如:

metaeditor.exe" /compile:"MQL5\Scripts"

您可以使用/inc参数来指定包含文件的自定义MQL5/MQL4文件夹,例如:

metaeditor.exe /compile:"./Scripts" /inc:"C:\Program Files\TradingPlatform 2\MQL5"

如果您需要了解更多关于编译过程的信息,您可以使用/log命令:

metaeditor.exe /compile:"C:\Program Files\Platform\MQL5\Scripts\myscript.mq5" /log 

为仅检查语法,请添加额外的/s

如果编译失败,平台文件夹中将创建MQL4.log文件,并提供相关详细信息。该文件将以UTF-16格式显示,因此您可能需要一个特殊的工具来查看它(例如Vim、Rubyfindstrrg)。

要指定自定义编译日志文件,请使用/log:file.log参数,例如:

metaeditor.exe /log:errors.log /compile:.
注意:不支持在标准输出中显示(尽管在Linux上可以使用:/log:CON)。
要获取更多信息,请参阅:命令行编译
以前,您可以下载运行独立于MetaEditor的MQL4/MQL5程序编译器 - MQL.exe。它与终端分开发行,并可在以下网址下载:

https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mql.exe

https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mql64.exe

用法(根据MQL4/MQL5 Compiler build 1162 from 02 Jul 2015):
mql.exe [<flags>] filename.mq5
        /mql5     - compile mql5 source
        /mql4     - compile mql4 source
        /s        - syntax check only
        /i:<path> - set working directory
        /o        - use code optimizer

但是独立编译器已被故意删除,现在链接指向安装程序以支持MetaEditor。


在构建600之前的较旧版本的MetaTrader中,平台中包括了metalang.exe

然而,在构建616中,MetaQuotes有意地从标准的MetaTrader安装中删除了编译器(mql.exe/mql64.exe)。

这意味着如果您升级您的MT平台(> 616),编译器可执行文件将会被删除。


从Wine中我无法获取日志或语法检查!但是我成功使用"Wine"编译,这本身已经很惊人了!但如果编译失败,我需要打开元编辑器并自己检查错误。有什么想法吗? - kroe
1
@kroe 添加了额外的信息。您应该检查平台文件夹中的日志文件以查找任何编译器错误(我相信是 MQL4.log)。或者使用 mql.exe CLI 编译器并使用提到的语法。 - kenorb

5
这有点晚了,但由于我为UltraEdit/UEStudio编写了一个小脚本并从stackoverflow得到了很多帮助,所以在这里分享我的脚本。它会编译ex4文件,然后将其复制到多个测试MT4安装程序中:
UE的“编译”按钮执行以下操作:
"MT4Compile.bat" "%FilePath" "%FileName"
Start in path eg: D:\Development\MQ4 (Location of MT4Compile.bat)

通常我的源代码位于库树下的 D:\Development\MQ4[Group][ExpertName][FileName].mq4。
D:\Development\MQ4\MT4Compile.bat 的内容如下:
@echo off
rem Version: 1.1
rem Date:   24 Sep 2013
rem Author: Shawky
rem Refer to HELP: for info

SET XC=xcopy /D /Y /V /F /I
SET PROGDIR=D:\Development\Go Pro Demo (MQ4 Testing)
SET DSTPATH=%PROGDIR%\experts

SET SIMPATH1=G:\Apps\MT4\BackTest IC (Recent)\experts
SET SIMPATH2=G:\Apps\MT4\BackTest IC (All)\experts
SET SIMPATH3=G:\Apps\MT4\BackTest Go (All)\experts
SET DEPLOYPATH=D:\Development\Deployment\experts

SET SRCPATH=%1
SET SRCPATH=%SRCPATH:"=%
IF "%SRCPATH%"=="" (
    SET SRCPATH=[Arg1]
)

SET APPNAME=%2
SET APPNAME=%APPNAME:"=%
IF "%APPNAME%"=="" (
    SET APPNAME=[Arg2]
)

SET SRCFILE=%APPNAME%.mq4
SET DSTFILE=%APPNAME%.ex4


SET CMD="%PROGDIR%\metalang.exe" "%SRCFILE%" "%DSTFILE%"

IF "%SRCPATH%"=="[Arg1]"  GOTO HELP
IF "%APPNAME%"=="[Arg2]"  GOTO HELP

cd %SRCPATH%

IF NOT EXIST "%SRCFILE%"  (
    SET ERROR=Error: File "%SRCFILE%" does not exist in %SRCPATH%
    GOTO HELP
)

echo .
echo Compiling %SRCFILE% to %DSTPATH%\%DSTFILE%
echo .
DEL *.log
%CMD%
IF EXIST "%DSTFILE%" (
    echo .
    echo Distributing executable to SIM and Deployment paths
    %XC% "%DSTFILE%" "%DSTPATH%\"
    IF EXIST "%SIMPATH1%"   %XC% "%DSTFILE%" "%SIMPATH1%\"
    IF EXIST "%SIMPATH2%"   %XC% "%DSTFILE%" "%SIMPATH2%\"
    IF EXIST "%SIMPATH3%"   %XC% "%DSTFILE%" "%SIMPATH3%\"
    IF EXIST "%DEPLOYPATH%" copy /B /Y "%DSTFILE%" "%DEPLOYPATH%\%APPNAME% (Dev).ex4"
)

goto END

:HELP
echo .  Metatrader 4 Command Line utility for compiling MT4 programmes.
echo .
echo .  This batch files allows MT4 applications to be compiled from a directory other than .\experts.
echo .  The output will be copied to experts after compilation.
echo .
echo .  [Arg1] = Path to MT4 application directory
echo .  [Arg2] = Name (without extension) of the main MQ4 source code to compile.
echo .
echo .  Example:
echo .      MT4Compile.bat "D:\Development\MQ4\MyExpert\" "PrimaryMQ4FileName"
echo .
echo .  Programme Directory: %PROGDIR%
echo .  Source Path:         %SRCPATH%
echo .  Source File:         %SRCFILE%
echo .  Destination File:    %DSTFILE%
echo .  Target Path:         %DSTPATH%
echo .
echo .  Argument 1:          %SRCPATH%
echo .  Argument 2:          %APPNAME%
echo .
echo .  Commands to execute would be:
echo .
echo .      %CMD%
echo .      %XC% "%DSTFILE%" "%DSTPATH%\"
echo .
echo .  %ERROR%
echo .

pause

:END

祝您一切顺利。

谢克伊


2

是的,在终端的安装目录中有一个可执行文件。它被称为metalang.exe。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接