Как скомпилировать файл MQL4 с помощью инструмента командной строки?

Теперь я компилирую свои файлы MetaTrader .mq4 в файлы .ex4 с помощью MetaEditor.

Но мои файлы .mq4 генерируются Java-процессом, и я хотел бы автоматизировать процесс компиляции.

Есть ли инструмент компилятора командной строки, который я мог бы вызвать программно?


person Donato Szilagyi    schedule 26.01.2013    source источник


Ответы (3)


Да, в каталоге установки терминала есть исполняемый файл. Он называется metalang.exe.

person Dmitry    schedule 28.01.2013

Чтобы скомпилировать файл исходного кода из командной строки, вы можете использовать для этого 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).

Для получения дополнительной информации см.: Компиляция из командной строки


Некоторое время назад вы могли скачать компилятор программ MQL4/MQL5, который запускается отдельно от MetaEditor — 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 от 02.07.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.


Гораздо более старая версия MetaTrader до сборки 600 включала metalang.exe в платформу.

Однако в сборке 616 компания MetaQuotes намеренно удалила компилятор (mql.exe/mql64.exe) из стандартной установки MetaTrader.

Это означает, что если вы обновите свою платформу MT (›616), исполняемый файл компилятора будет удален.

person kenorb    schedule 08.09.2015
comment
из вина мне не удалось получить журналы или проверку синтаксиса! Мне удалось скомпилировать с использованием Wine Hard, что само по себе уже потрясающе! но если он не скомпилируется, мне нужно открыть мета-редактор и самому проверить ошибку. Любые идеи? - person kroe; 13.12.2016
comment
@kroe Добавлена ​​дополнительная информация. Вы должны проверить файл журнала в папке платформы на наличие ошибок компилятора (MQL4.log я думаю). Или используйте компилятор CLI mql.exe. и используйте указанный синтаксис. - person kenorb; 13.12.2016

Это немного поздно, но поскольку я написал небольшой скрипт для 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

Всего наилучшего.

Шоуки

person Shawky    schedule 24.09.2013