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
Passos
- Abra o “Agendador de Tarefas” do Windows.
- “Criar Tarefa Básica” → Insira o nome (ex: Limpeza Automática de Logs MT5).
- Selecione o gatilho (Diariamente / semanalmente. Horário como madrugada, quando a carga é baixa, é recomendado).
- 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"
- Versão em Lote: Programa/script:
- 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).
- Desative as restrições relacionadas a “Energia” nas Condições (para VPS ou PC em funcionamento contínuo).
- 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 excluaBases,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
.logemLogs,MQL5\Logs,Tester\logs. Não excluaBases,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=1e 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\logsque estão diretamente na pasta física do Portable no script.
