Введение
В этой статье объясняется, как автоматически удалять старые файлы .log из «Журналов операций (Logs/Journal)», «Экспертов (MQL5\Logs/Experts)» и «Бэктестов (Tester\logs)» в MT5 (MetaTrader 5), чтобы предотвратить раздувание диска. Это можно реализовать с помощью стандартных средств Windows: Batch (.bat) или PowerShell (.ps1). Этот контент предназначен для тех, кто хочет автоматизировать связанную статью (Стратегия борьбы с раздуванием логов MT5 | Как удалить и оптимизировать логи операций, экспертов и бэктестов).
Концепция автоматического удаления (Предпосылки)
- Логи MT5 сохраняются по дате в формате
ГГГГММДД.log. - Базовое условие удаления — «файлы старше ◯ дней» (пример: старше 30 дней).
- Целевые папки в основном 3:
Logs,MQL5\Logs,Tester\logs. - Можно запускать автоматически каждый день/неделю, зарегистрировав в «Планировщике заданий» Windows.
Как проверить целевые папки и пути
Откройте Проводник из верхнего меню MT5 «Файл → Открыть папку данных» и проверьте следующие подпапки:
…\Terminal\<Длинный ID>\Logs(Журналы операций)…\Terminal\<Длинный ID>\MQL5\Logs(Эксперты / Индикаторы)…\Terminal\<Длинный ID>\Tester\logs(Бэктест)
При использовании нескольких терминалов (несколько ID) под каждым ID существуют папки логов с одинаковыми именами. Для портативной версии MT5 папки MQL5 и Tester расположены непосредственно в физической папке.
Срок хранения (Руководство по операционной политике)
- Реальная работа (включая VPS): Хранить 14~30 дней
- Разработка и валидация: 7~14 дней (рекомендуется короче из-за большого объема вывода)
- Только для бэктеста: Удалять в соответствии с циклом тестирования, от еженедельно до ежедневно
Начните с длительного периода, например 30 дней, и если проблем нет, постепенно сокращайте.
Метод A: Автоматическое удаление с помощью пакетного файла (.bat)
A-1 Рекомендуется: Массовое переключение с флагом DRYRUN (Поддержка нескольких терминалов)
Чтобы предотвратить ошибочное удаление, этот формат позволяет массово переключаться между «только список» ⇔ «продукционное удаление» с помощью флага DRYRUN. Автоматически сканирует все папки ID (Терминала) в %APPDATA%\MetaQuotes\Terminal.
Удобно при работе с несколькими MT5 на одном ПК или VPS.
@echo off
REM ===== Автоматическая очистка логов MT5 (Пакетная версия / Несколько терминалов & Массовое переключение) =====
REM Рекомендуется запускать с правами администратора. При необходимости измените DAYS / DRYRUN.
setlocal enabledelayedexpansion
set "DAYS=30" REM Файлы старше скольких дней являются целью (пример: 30)
set "DRYRUN=1" REM 1=Только список (не удалять), 0=Продукционное удаление
set "DATA_ROOT=%APPDATA%\MetaQuotes\Terminal"
echo [INFO] Цель очистки логов MT5: файлы старше %DAYS% дней
echo [MODE] DRYRUN=%DRYRUN% (1=только список, 0=удалить)
echo [ROOT] %DATA_ROOT%
echo.
for /D %%T in ("%DATA_ROOT%\*") do (
for %%F in ("%%T\Logs" "%%T\MQL5\Logs" "%%T\Tester\logs") do (
if exist "%%~F" (
echo [CLEAN] %%~F
if "!DRYRUN!"=="1" (
REM Только список (не удалять)
forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c echo @path"
) else (
REM Продукционное удаление (тихое удаление / подавление ошибок)
forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c del /f /q @path" 2>nul
)
)
)
)
echo.
echo [DONE] Очистка логов завершена.
endlocal
Метод переключения: При тестировании установите DRYRUN=1 (только список). При запуске удаления измените на DRYRUN=0 и сохраните заново. Нет необходимости удалять/добавлять комментарии в строке.
A-2 Указание фиксированного пути ID (Один терминал)
Краткая версия, нацеленная только на определенный ID терминала (одна среда). Замените xxxxxxx на свой собственный ID.
@echo off
REM ===== Автоматическая очистка логов MT5 (Пакетная версия / Фиксированный ID & Массовое переключение) =====
setlocal enabledelayedexpansion
set "DAYS=30"
set "DRYRUN=1" REM 1=Только список, 0=Удалить
REM Укажите папки логов в папке данных MT5 (замените ID)
set "LOGS_PATH=C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Logs"
set "EXPERTS_LOGS=C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\MQL5\Logs"
set "TESTER_LOGS=C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Tester\logs"
echo [INFO] DAYS=%DAYS% / DRYRUN=%DRYRUN%
for %%F in ("%LOGS_PATH%" "%EXPERTS_LOGS%" "%TESTER_LOGS%") do (
if exist "%%~F" (
echo [CLEAN] %%~F
if "%DRYRUN%"=="1" (
forfiles /p "%%~F" /s /m *.log /d -%DAYS% /c "cmd /c echo @path"
) else (
forfiles /p "%%~F" /s /m *.log /d -%DAYS% /c "cmd /c del /f /q @path" 2>nul
)
)
)
echo [DONE] Очистка логов завершена.
endlocal
A-3 Минимальная конфигурация (Без DRYRUN, Немедленное удаление)
Минимальный пример для немедленного удаления (без тестирования). Остерегайтесь ошибочного удаления.
@echo off
REM Укажите папки логов в папке данных MT5
set LOGS_PATH="C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Logs"
set EXPERTS_LOGS="C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\MQL5\Logs"
set TESTER_LOGS="C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Tester\logs"
REM Удалить файлы старше 30 дней
forfiles /p %LOGS_PATH% /s /m *.log /d -30 /c "cmd /c del @file"
forfiles /p %EXPERTS_LOGS% /s /m *.log /d -30 /c "cmd /c del @file"
forfiles /p %TESTER_LOGS% /s /m *.log /d -30 /c "cmd /c del @file"
Метод B: Автоматическое удаление с помощью PowerShell (.ps1)
B-1 Рекомендуется: Массовое переключение с флагом $DryRun (Поддержка нескольких терминалов)
PowerShell позволяет безопасно выполнять пробный запуск с помощью -WhatIf. Можно управлять, просто переключая $DryRun на $true/$false.
# ===== Автоматическая очистка логов MT5 (Версия PowerShell / Несколько терминалов & Массовое переключение) =====
# Рекомендуется с правами администратора. Настройте $Days / $DryRun по мере необходимости.
$Days = 30
$DryRun = $true # $true=Только список (не удалять), $false=Продукционное удаление
$cutoff = (Get-Date).AddDays(-$Days)
$dataRoot = Join-Path $env:APPDATA 'MetaQuotes\Terminal'
Write-Host "[INFO] Удалить логи старше $Days дней"
Write-Host "[MODE] DryRun=$DryRun"
Write-Host "[ROOT] $dataRoot`n"
$terminals = Get-ChildItem -Path $dataRoot -Directory -ErrorAction SilentlyContinue
foreach ($t in $terminals) {
$folders = @(
Join-Path $t.FullName 'Logs'
Join-Path $t.FullName 'MQL5\Logs'
Join-Path $t.FullName 'Tester\logs'
)
foreach ($folder in $folders) {
if (Test-Path $folder) {
Write-Host "[CLEAN] $folder"
$targets = Get-ChildItem -LiteralPath $folder -Filter *.log -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt $cutoff }
if ($DryRun) {
$targets | ForEach-Object { Write-Host $_.FullName }
} else {
$targets | Remove-Item -Force -ErrorAction SilentlyContinue
}
}
}
}
Write-Host "`n[DONE] Очистка логов завершена."
B-2 Указание фиксированного пути ID (Один терминал)
Версия, нацеленная только на определенный ID. Замените xxxxxxx на свой собственный ID.
# ===== Автоматическая очистка логов MT5 (Версия PowerShell / Фиксированный ID & Массовое переключение) =====
$Days = 30
$DryRun = $true
$limit = (Get-Date).AddDays(-$Days)
$folders = @(
"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Logs",
"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\MQL5\Logs",
"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Tester\logs"
)
Write-Host "[INFO] DAYS=$Days / DryRun=$DryRun"
foreach ($folder in $folders) {
if (Test-Path $folder) {
Write-Host "[CLEAN] $folder"
$targets = Get-ChildItem -Path $folder -Filter *.log -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt $limit }
if ($DryRun) {
$targets | ForEach-Object { Write-Host $_.FullName }
} else {
$targets | Remove-Item -Force -ErrorAction SilentlyContinue
}
}
}
Write-Host "[DONE] Очистка логов завершена."
B-3 Минимальная конфигурация (Немедленное удаление)
Минимальный пример для немедленного удаления (без тестирования). Остерегайтесь ошибочного удаления.
$days = 30
$limit = (Get-Date).AddDays(-$days)
$folders = @(
"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Logs",
"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\MQL5\Logs",
"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\xxxxxxx\Tester\logs"
)
foreach ($folder in $folders) {
Get-ChildItem -Path $folder -Filter *.log | Where-Object { $_.LastWriteTime -lt $limit } | Remove-Item -Force
}
Планирование периодического выполнения с помощью Планировщика заданий
Шаги
- Откройте «Планировщик заданий» Windows.
- «Создать простую задачу» → Введите имя (пример: Автоматическое удаление логов MT5).
- Выберите триггер (Ежедневно / еженедельно. Рекомендуется время с низкой нагрузкой, например, ночью).
- Действие = «Запустить программу».
- Пакетная версия: Программа/сценарий:
cmd.exe
Добавить аргументы (необязательно):/c "C:\scripts\DeleteMT5Logs.bat" - Версия PowerShell: Программа/сценарий:
powershell.exe
Добавить аргументы (необязательно):-ExecutionPolicy Bypass -File "C:\scripts\DeleteMT5Logs.ps1"
- Пакетная версия: Программа/сценарий:
- При необходимости активируйте «Выполнять вне зависимости от регистрации пользователя» и «Выполнять с наивысшими правами» (рекомендуется для VPS).
- В Условиях отключите ограничения, связанные с «Питанием» (для VPS или постоянно работающего ПК).
- Включите «Журнал заданий» и проверьте успешность (
0x0— успех).
Контрольный список для безопасной работы
- Цель удаления — только файлы
.log(не удаляйтеBases,History,Profilesи т.д.). - Всегда сначала выполняйте пробный запуск: Пакетный — установите
DRYRUN=1, PowerShell — установите$DryRun=$true. - Установите длительный срок хранения → сократите, если проблем нет.
- При использовании нескольких экземпляров сделайте целью все ID ниже (скрипты в этой статье обрабатывают автоматически).
- Обратите внимание на недостаток прав или ошибки пути (используйте путь, скопированный непосредственно из «Открыть папку данных»).
Устранение неисправностей
- Блокировка политикой выполнения: PowerShell, запускайте с добавлением
-ExecutionPolicy Bypass. - Доступ запрещен: Запустите от имени администратора / предоставьте задаче «наивысшие привилегии».
- Цель не найдена: Перепроверьте путь портативной версии, расположение под несколькими ID, написание имени папки.
- Расписание не работает: Проверьте «Последний результат выполнения (0x0 — успех)», пользователя запуска / настройки условий / историю.
Часто задаваемые вопросы (FAQ)
- В. Какие папки и что нужно удалять?
- О. Только файлы
.logвLogs,MQL5\Logs,Tester\logs. Не удаляйтеBases,History,Profilesи т.д. - В. Какой срок хранения безопасен?
- О. Начните с примерно 30 дней, и если проблем нет, можно сократить до 14 дней, 7 дней. Для реальной работы — 14~30 дней, для разработки и валидации — 7~14 дней в качестве ориентира.
- В. Я использую несколько экземпляров MT5 (несколько ID). Можно ли сделать их все целью?
- О. Примеры в этой статье автоматически сканируют все папки ID в
%APPDATA%\MetaQuotes\Terminal\. - В. Повлияет ли удаление на советников или результаты бэктеста?
- О. Только прошлые записи вывода (логи) будут потеряны, это не влияет на логику советника или результаты тестирования.
- В. Сначала хочу проверить, не удаляя. Как это сделать?
- О. Установив для пакетного файла
DRYRUN=1, а для PowerShell$DryRun=$true, при запуске будет отображаться только список. - В. Можно ли использовать с портативной версией MT5?
- О. Да. Укажите в скрипте абсолютный путь к
Logs/MQL5\Logs/Tester\logs, которые находятся непосредственно в папке портативной версии.
