Como Excluir Automaticamente os Logs do MT5 (Batch/PowerShell) | Limpeza Periódica de Logs, MQL5\Logs, Tester

Introdução

Este artigo explica como excluir automaticamente arquivos .log antigos dos “Logs de Operação (Logs/Journal)”, “Experts (MQL5\Logs/Experts)” e “Backtests (Tester\logs)” do MT5 (MetaTrader 5) para evitar a inflação do disco. É possível realizar isso usando Lote (.bat) ou PowerShell (.ps1) padrão do Windows. Este conteúdo é destinado àqueles que desejam automatizar o artigo relacionado (Estratégia para Inflação de Logs do MT5 | Como Excluir e Otimizar Logs de Operação, Experts e Backtests).


Conceito da Exclusão Automática (Premissas)

  • Os logs do MT5 são salvos por data no formato AAAAMMDD.log.
  • A condição básica de exclusão é “arquivos mais antigos que ◯ dias” (exemplo: anteriores a 30 dias).
  • As pastas alvo são principalmente 3: Logs, MQL5\Logs, Tester\logs.
  • Podem ser executados automaticamente todos os dias/semanas registrando-os no “Agendador de Tarefas” do Windows.

Como Verificar as Pastas e Caminhos Alvo

Abra o Explorer a partir do menu superior do MT5 “Arquivo → Abrir Pasta de Dados” e verifique as seguintes subpastas:

  • …\Terminal\<ID Longo>\Logs (Logs de Operação)
  • …\Terminal\<ID Longo>\MQL5\Logs (Experts / Indicadores)
  • …\Terminal\<ID Longo>\Tester\logs (Backtest)

Ao usar múltiplos terminais (múltiplos IDs), existem pastas de log com o mesmo nome sob cada ID. Para a versão Portable do MT5, as pastas MQL5 e Tester estão localizadas diretamente sob a pasta física.


Dias de Retenção (Diretriz de Política Operacional)

  • Operação Real (incluindo VPS): Manter 14~30 dias
  • Desenvolvimento & Validação: 7~14 dias (recomendado mais curto devido ao alto volume de saída)
  • Exclusivo para Backtest: Excluir de acordo com o ciclo de teste, semanal a diário

Comece com um período longo, como 30 dias, e se não houver problemas, reduza gradualmente.


Método A: Exclusão Automática com Arquivo em Lote (.bat)

A-1 Recomendado: Troca em Massa com Flag DRYRUN (Suporte a Múltiplos Terminais)

Para evitar exclusões incorretas, este formato permite a troca em massa entre “somente lista” ⇔ “exclusão de produção” com a flag DRYRUN. Varre automaticamente todas as pastas de ID (Terminal) sob %APPDATA%\MetaQuotes\Terminal.
Útil ao operar vários MT5 em um PC ou VPS.

@echo off
REM ===== Limpeza Automática de Logs do MT5 (Versão em Lote / Múltiplos Terminais & Troca em Massa) =====
REM Recomendado executar com privilégios de admin. Altere DAYS / DRYRUN conforme necessário.

setlocal enabledelayedexpansion
set "DAYS=30"          REM Quantos dias mais antigos os arquivos serão alvo (ex: 30)
set "DRYRUN=1"         REM 1=Somente lista (não exclui), 0=Exclusão de produção
set "DATA_ROOT=%APPDATA%\MetaQuotes\Terminal"

echo [INFO] Alvo da limpeza de logs MT5: arquivos mais antigos que %DAYS% dias
echo [MODE] DRYRUN=%DRYRUN%  (1=somente lista, 0=excluir)
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 Somente lista (não exclui)
        forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c echo @path"
      ) else (
        REM Exclusão de produção (exclui silenciosamente / suprime erros)
        forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c del /f /q @path" 2>nul
      )
    )
  )
)

echo.
echo [DONE] Limpeza de logs concluída.
endlocal

Método de Troca: Durante os testes, defina DRYRUN=1 (somente lista). Ao executar a exclusão, mude para DRYRUN=0 e salve novamente. Não é necessário remover/adicionar comentários na linha.

A-2 Especificação com Caminho de ID Fixo (Terminal Único)

Versão concisa que visa apenas um ID de terminal específico (ambiente único). Substitua xxxxxxx pelo seu próprio ID.

@echo off
REM ===== Limpeza Automática de Logs do MT5 (Versão em Lote / ID Fixo & Troca em Massa) =====
setlocal enabledelayedexpansion

set "DAYS=30"
set "DRYRUN=1"  REM 1=Somente lista, 0=Excluir

REM Especifique as pastas de log na pasta de dados do MT5 (substitua o 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] Limpeza de logs concluída.
endlocal

A-3 Configuração Mínima (Sem DRYRUN, Exclusão Imediata)

Exemplo mínimo para exclusão imediata (sem teste). Cuidado com exclusões incorretas.

@echo off
REM Especifique as pastas de log na pasta de dados do 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 Excluir arquivos mais antigos que 30 dias
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: Exclusão Automática com PowerShell (.ps1)

B-1 Recomendado: Troca em Massa com Flag $DryRun (Suporte a Múltiplos Terminais)

O PowerShell permite dry run com segurança usando -WhatIf. Pode ser operado apenas alternando $DryRun para $true/$false.

# ===== Limpeza Automática de Logs do MT5 (Versão PowerShell / Múltiplos Terminais & Troca em Massa) =====
# Recomendado com privilégios de admin. Ajuste $Days / $DryRun conforme necessário.

$Days    = 30
$DryRun  = $true   # $true=Somente lista (não exclui), $false=Exclusão de produção
$cutoff  = (Get-Date).AddDays(-$Days)
$dataRoot = Join-Path $env:APPDATA 'MetaQuotes\Terminal'

Write-Host "[INFO] Excluir logs mais antigos que $Days dias"
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] Limpeza de logs concluída."

B-2 Especificação com Caminho de ID Fixo (Terminal Único)

Versão que visa apenas um ID específico. Substitua xxxxxxx pelo seu próprio ID.

# ===== Limpeza Automática de Logs do MT5 (Versão PowerShell / ID Fixo & Troca em Massa) =====
$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] Limpeza de logs concluída."

B-3 Configuração Mínima (Exclusão Imediata)

Exemplo mínimo para exclusão imediata (sem teste). Cuidado com exclusões incorretas.

$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
}

Agendando Execução Periódica com o Agendador de Tarefas

Tela de Configuração do Agendador de Tarefas

Passos

  1. Abra o “Agendador de Tarefas” do Windows.
  2. “Criar Tarefa Básica” → Insira o nome (ex: Limpeza Automática de Logs MT5).
  3. Selecione o gatilho (Diariamente / semanalmente. Horário como madrugada, quando a carga é baixa, é recomendado).
  4. Ação = “Iniciar um programa”.
    • Versão em Lote: Programa/script: cmd.exe
      Adicionar argumentos (opcional): /c "C:\scripts\DeleteMT5Logs.bat"
    • Versão PowerShell: Programa/script: powershell.exe
      Adicionar argumentos (opcional): -ExecutionPolicy Bypass -File "C:\scripts\DeleteMT5Logs.ps1"
  5. Ative “Executar se o usuário estiver logado ou não” e “Executar com os mais altos privilégios” se necessário (recomendado para VPS).
  6. Desative as restrições relacionadas a “Energia” nas Condições (para VPS ou PC em funcionamento contínuo).
  7. Ative o “Histórico de Tarefas” e verifique o sucesso (0x0 é sucesso).

Lista de Verificação para Operação Segura

  • Alvo de exclusão são apenas arquivos .log (não exclua Bases, History, Profiles, etc.).
  • Sempre faça dry run na primeira vez: Lote defina DRYRUN=1, PowerShell defina $DryRun=$true.
  • Defina dias de retenção mais longos → reduza se não houver problemas.
  • Ao usar múltiplas instâncias, inclua todos os IDs abaixo como alvo (os scripts deste artigo lidam automaticamente).
  • Cuidado com falta de permissões ou erros de caminho (use o caminho copiado diretamente de “Abrir Pasta de Dados”).

Solução de Problemas

  • Bloqueado pela Política de Execução: PowerShell, inicie adicionando -ExecutionPolicy Bypass.
  • Acesso Negado: Execute como administrador / conceda “privilégios mais altos” à tarefa.
  • Alvo Não Encontrado: Verifique novamente o caminho da versão Portable, sob múltiplos IDs, grafia do nome da pasta.
  • Agendamento Não Funciona: Verifique “Último Resultado de Execução (0x0 é sucesso)”, usuário de inicialização / configurações de condição / histórico.

Perguntas Frequentes (FAQ)

P. Quais pastas e o que devo excluir?
R. Apenas arquivos .log em Logs, MQL5\Logs, Tester\logs. Não exclua Bases, History, Profiles, etc.
P. Quantos dias de retenção são seguros?
R. Comece com cerca de 30 dias, e se não houver problemas, você pode reduzir para 14 dias, 7 dias. Para operação real, 14~30 dias, para desenvolvimento & validação, 7~14 dias é a diretriz.
P. Uso várias instâncias do MT5 (múltiplos IDs). Posso incluir todas como alvo?
R. As amostras deste artigo varrem automaticamente todas as pastas de ID sob %APPDATA%\MetaQuotes\Terminal\.
P. A exclusão afeta EAs ou resultados de backtest?
R. Apenas os registros de saída passados (logs) são perdidos, não afeta a lógica do EA ou os resultados do teste.
P. Quero verificar primeiro sem excluir. Como faço?
R. Configurando Lote para DRYRUN=1 e PowerShell para $DryRun=$true, apenas a lista será exibida quando executado.
P. Pode ser usado com MT5 Portable?
R. Sim. Especifique o caminho absoluto para Logs/MQL5\Logs/Tester\logs que estão diretamente na pasta física do Portable no script.

Esquema de FAQ (JSON-LD)

Deixe um comentário