Introducción
En este artículo explicamos cómo eliminar automáticamente los “archivos .log antiguos” de MT5 (MetaTrader 5) de «registros de operación (Logs/Journal)», «Expertos (MQL5\Logs/Experts)» y «backtesting (Tester\logs)» para evitar que el disco crezca en exceso. Se puede realizar con Batch (.bat) estándar de Windows o PowerShell (.ps1). Está orientado a quienes desean automatizar el procedimiento del artículo relacionado (Medidas contra el aumento de tamaño de los registros de MT5 | Cómo aligerar eliminando registros de operación, expertos y backtesting).
Enfoque de la eliminación automática (supuestos)
- Los registros de MT5 se guardan por fecha en el formato
YYYYMMDD.log. - La condición básica de eliminación es “archivos anteriores a N días” (ej.: 30 días o más antiguos).
- Las carpetas objetivo son principalmente tres:
Logs,MQL5\LogsyTester\logs. - Si los registra en el “Programador de tareas” de Windows, puede ejecutarlo automáticamente a diario/semanalmente.
Cómo comprobar las carpetas y rutas de destino
Abra el Explorador desde “Archivo → Abrir carpeta de datos” en el menú superior de MT5 y compruebe las siguientes subcarpetas:
…\Terminal\<ID largo>\Logs(registros de operación)…\Terminal\<ID largo>\MQL5\Logs(Expertos/Indicadores)…\Terminal\<ID largo>\Tester\logs(backtesting)
Si utiliza varios terminales (varios ID), existirán carpetas de registro con el mismo nombre bajo cada ID. En la versión portable de MT5, las carpetas MQL5 y Tester están directamente bajo la carpeta principal.
Días de retención (guías operativas)
- Operación real (incluido VPS): conservar 14–30 días
- Desarrollo y pruebas: 7–14 días (se recomienda corto por gran volumen de salida)
- Solo backtesting: eliminar a diario o semanalmente según el ciclo de pruebas
Empiece con un periodo largo como 30 días y, si no hay problema, acórtelo gradualmente.
Método A: eliminación automática con archivo por lotes (.bat)
A-1 Recomendado: cambio masivo con la bandera DRYRUN (varios terminales)
Para evitar eliminaciones por error, la bandera DRYRUN permite alternar de forma unificada entre “solo listado” y “eliminación real”. Recorre automáticamente todos los ID (terminales) bajo %APPDATA%\MetaQuotes\Terminal.
Es útil cuando opera varios MT5 en un mismo PC o VPS.
@echo off
REM ===== Eliminación automática de registros de MT5 (versión Batch / múltiples terminales y cambio masivo) =====
REM Se recomienda ejecutarlo con privilegios de administrador. Cambie DAYS/DRYRUN según sea necesario.
setlocal enabledelayedexpansion
set "DAYS=30" REM Archivos más antiguos que este número de días (ej.: 30)
set "DRYRUN=1" REM 1=solo listar (no borrar), 0=eliminación real
set "DATA_ROOT=%APPDATA%\MetaQuotes\Terminal"
echo [INFO] MT5 logs cleanup target: files older than %DAYS% days
echo [MODE] DRYRUN=%DRYRUN% (1=list only, 0=delete)
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 Solo listar (no borrar)
forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c echo @path"
) else (
REM Eliminación real (silenciosa / suprime errores)
forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c del /f /q @path" 2>nul
)
)
)
)
echo.
echo [DONE] Completed log cleanup.
endlocal
Cómo alternar: durante las pruebas use DRYRUN=1 (solo listado). Cuando quiera eliminar realmente, cambie a DRYRUN=0 y guarde. No es necesario comentar/descomentar líneas.
A-2 Especificar ruta con ID fijo (terminal único)
Versión concisa para apuntar solo a un ID de terminal específico (entorno único). Reemplace xxxxxxx por su ID.
@echo off
REM ===== Eliminación automática de registros de MT5 (Batch / ID fijo y cambio masivo) =====
setlocal enabledelayedexpansion
set "DAYS=30"
set "DRYRUN=1" REM 1=solo listar, 0=borrar
REM Especifique las carpetas de registros en la carpeta de datos de MT5 (reemplace el 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] Completed log cleanup.
endlocal
A-3 Configuración mínima (sin DRYRUN, eliminación inmediata)
Ejemplo mínimo para eliminar de inmediato (sin verificación). Extreme la precaución con eliminaciones por error.
@echo off
REM Especifique las carpetas de registros en la carpeta de datos de 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 Eliminar archivos anteriores a 30 días
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"
Método B: eliminación automática con PowerShell (.ps1)
B-1 Recomendado: cambio masivo con $DryRun (varios terminales)
PowerShell permite un dry run seguro con -WhatIf. Puede operar cambiando $DryRun entre $true/$false.
# ===== Eliminación automática de registros de MT5 (PowerShell / múltiples terminales y cambio masivo) =====
# Recomendado ejecutarlo como administrador. Ajuste $Days / $DryRun según sea necesario.
$Days = 30
$DryRun = $true # $true=solo listar (no borrar), $false=eliminación real
$cutoff = (Get-Date).AddDays(-$Days)
$dataRoot = Join-Path $env:APPDATA 'MetaQuotes\Terminal'
Write-Host "[INFO] Delete logs older than $Days 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] Completed log cleanup."
B-2 Especificar ruta con ID fijo (terminal único)
Versión para un ID específico. Reemplace xxxxxxx por su ID.
# ===== Eliminación automática de registros de MT5 (PowerShell / ID fijo y cambio masivo) =====
$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] Completed log cleanup."
B-3 Configuración mínima (eliminación inmediata)
Ejemplo mínimo para eliminar de inmediato (sin verificación). Extreme la precaución con eliminaciones por error.
$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
}
Programar la ejecución periódica con el Programador de tareas
Procedimiento
- Abra el “Programador de tareas” de Windows.
- “Crear tarea básica” → Introduzca un nombre (ej.: eliminación automática de registros de MT5).
- Seleccione el desencadenador (diario/semanal; se recomienda de madrugada u horas de baja carga).
- Acción = “Iniciar un programa”.
- Versión Batch: Programa/script:
cmd.exe
Argumentos adicionales:/c "C:\scripts\DeleteMT5Logs.bat" - Versión PowerShell: Programa/script:
powershell.exe
Argumentos adicionales:-ExecutionPolicy Bypass -File "C:\scripts\DeleteMT5Logs.ps1"
- Versión Batch: Programa/script:
- Active “Ejecutar tanto si el usuario inició sesión como si no” y “Ejecutar con los privilegios más altos” según sea necesario (recomendado en VPS).
- En “Condiciones”, desactive las restricciones de “Energía” (para VPS o PC en funcionamiento continuo).
- Active el “Historial de tareas” y verifique el resultado (el código
0x0indica éxito).
Lista de comprobación para operación segura
- El objetivo de eliminación es solo
.log(no elimineBases,History,Profiles, etc.). - Primera ejecución siempre en dry run: Batch con
DRYRUN=1, PowerShell con$DryRun=$true. - Configure un periodo de retención largo y, si no hay problemas, acórtelo.
- Si utiliza varias instancias, apunte a todas las carpetas bajo cada ID (los scripts de este artículo lo hacen automáticamente).
- Atención a permisos insuficientes o rutas erróneas (use rutas copiadas desde “Abrir carpeta de datos”).
Solución de problemas
- Bloqueado por la directiva de ejecución: inicie PowerShell con
-ExecutionPolicy Bypass. - Acceso denegado: ejecútelo como administrador/active “privilegios más altos” en la tarea.
- No se encuentran destinos: vuelva a comprobar rutas de la versión portable, los ID múltiples y la ortografía de las carpetas.
- La programación no se ejecuta: revise “Resultado de la última ejecución (0x0=éxito)”, el usuario de inicio, las condiciones y el historial.
FAQ
- P. ¿Qué debo eliminar y de qué carpetas?
- R. Solo archivos
.logenLogs,MQL5\LogsyTester\logs. No elimineBases,History,Profiles, etc. - P. ¿Cuántos días de retención son seguros?
- R. Comience con unos 30 días y, si no hay problemas, reduzca a 14 o 7 días. Como guía: 14–30 días en producción y 7–14 días en desarrollo/pruebas.
- P. Uso varias instancias de MT5 (varios ID). ¿Puedo abarcar todas?
- R. Los ejemplos de este artículo recorren automáticamente todas las carpetas de ID bajo
%APPDATA%\MetaQuotes\Terminal\. - P. ¿La eliminación afecta a los EA o a los resultados de backtesting?
- R. Solo se eliminan registros históricos; no afecta la lógica del EA ni los resultados de prueba.
- P. ¿Puedo verificar primero sin eliminar?
- R. Sí. En Batch use
DRYRUN=1; en PowerShell use$DryRun=$truepara listar únicamente. - P. ¿Funciona con la versión portable de MT5?
- R. Sí. Especifique en el script las rutas absolutas de
Logs/MQL5\Logs/Tester\logsubicadas bajo la carpeta principal de la versión portable.
