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

时间:2013-01-26 16:40:32

标签: mql4 metatrader4

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

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

是否有可以通过编程方式调用的命令行编译器工具?

3 个答案:

答案 0 :(得分:19)

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

metaeditor64.exe

对于64位使用wine metaeditor.exe /compile:"MQL4/Experts/MACD Sample.mq4" 代替。

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

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

如果编译失败,将在平台文件夹中创建/log:file.log文件及相关详细信息。

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

/log:CON

注意:Display to the standard output is not supported(虽然在Linux上你可以使用:MQL.exe)。

有关详情,请查看:Compilation from the Command Line

前段时间,您可以下载与MetaEditor分开运行的MQL4 / MQL5程序的编译器 - 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 。它与终端分开分发,您可以在以下地址下载:

  

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

     

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

用法(根据2015年7月2日的MQL4 / MQL5编译器版本1162):

metalang.exe

然而,有意删除了独立编译器,所以现在链接指向安装程序而支持MetaEditor。

构建600之前的许多旧版MetaTrader都包含mql.exe平台。

然而,在构建616中,MetaQuotes有意从标准MetaTrader安装中删除了编译器(mql64.exe / BOOL WINAPI DeviceIoControl( _In_ HANDLE hDevice, <---------- This one _In_ DWORD dwIoControlCode, _In_opt_ LPVOID lpInBuffer, _In_ DWORD nInBufferSize, _Out_opt_ LPVOID lpOutBuffer, _In_ DWORD nOutBufferSize, _Out_opt_ LPDWORD lpBytesReturned, _Inout_opt_ LPOVERLAPPED lpOverlapped ); )。

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

答案 1 :(得分:4)

这有点晚了,但是因为我为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

一切顺利。

Shawky

答案 2 :(得分:2)

是的,终端的安装目录中有一个可执行文件。它叫做metalang.exe。