现在我正在将我的 MetaTrader.mq4
文件编译为.ex4
带有MetaEditor.
但是我的.mq4
文件是由 Java 进程生成的,我想自动化编译过程。
是否有可以以编程方式调用的命令行编译器工具?
现在我正在将我的 MetaTrader.mq4
文件编译为.ex4
带有MetaEditor.
但是我的.mq4
文件是由 Java 进程生成的,我想自动化编译过程。
是否有可以以编程方式调用的命令行编译器工具?
要从命令行编译源代码文件,您可以使用 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"
要使用包含文件指定自定义 MQL5/MQL4 文件夹,您可以使用/inc
参数,例如:
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、Ruby或findstr
)rg
。
要指定自定义编译日志文件,请使用/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
用法(根据 2015 年 7 月 2 日起的 MQL4/MQL5 编译器 build 1162):
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。
在 build 600 之前的许多旧版本 MetaTrader 已metalang.exe
包含在平台中。
然而,在构建 616 中,MetaQuotes 有意从标准 MetaTrader 安装中删除了编译器 ( mql.exe
/ )。mql64.exe
这意味着如果您升级您的 MT 平台 (>616),编译器可执行文件将被删除。
这有点晚了,但由于我为 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
祝一切顺利。
肖基
是的,终端的安装目录中有一个可执行文件。它被称为metalang.exe。