Cómo eliminar automáticamente los registros de MT5 (Batch/PowerShell) | Limpieza programada de Logs, MQL5\Logs y Tester

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\Logs y Tester\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

Pantalla de configuración del Programador de tareas

Procedimiento

  1. Abra el “Programador de tareas” de Windows.
  2. “Crear tarea básica” → Introduzca un nombre (ej.: eliminación automática de registros de MT5).
  3. Seleccione el desencadenador (diario/semanal; se recomienda de madrugada u horas de baja carga).
  4. 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"
  5. 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).
  6. En “Condiciones”, desactive las restricciones de “Energía” (para VPS o PC en funcionamiento continuo).
  7. Active el “Historial de tareas” y verifique el resultado (el código 0x0 indica éxito).

Lista de comprobación para operación segura

  • El objetivo de eliminación es solo .log (no elimine Bases, 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 .log en Logs, MQL5\Logs y Tester\logs. No elimine Bases, 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=$true para 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\logs ubicadas bajo la carpeta principal de la versión portable.

Esquema FAQ (JSON-LD)

Deja una respuesta