MT5 Logs Automatisch Löschen (Batch/PowerShell) | Regelmäßige Bereinigung von Logs, MQL5\Logs und Tester-Dateien

 

Einleitung

Dieser Artikel erklärt, wie Sie „alte .log-Dateien“ aus den „Betriebsprotokollen (Logs/Journal),“ den „Expertenprotokollen (MQL5\Logs/Experts)“ und den „Backtest-Protokollen (Tester\logs)“ von MT5 (MetaTrader 5) automatisch löschen, um eine übermäßige Speicherplatzbelegung zu verhindern. Dies kann mit den Windows-Standardwerkzeugen Batch (.bat) oder PowerShell (.ps1) erreicht werden. Diese Anleitung richtet sich an diejenigen, die den Prozess aus dem verwandten Artikel (Maßnahmen gegen MT5 Log-Aufblähung | So Löschen Sie Betriebs-, Experten- und Backtest-Logs zur Verkleinerung) automatisieren möchten.


Konzept der Automatischen Löschung (Voraussetzungen)

  • MT5-Logs werden im Format JJJJMMTT.log, jeweils eine Datei pro Datum, gespeichert.
  • Die grundlegende Löschbedingung ist „Dateien, die älter als $\text{X}$ Tage sind“ (z. B. älter als 30 Tage).
  • Die Zielordner sind hauptsächlich drei: Logs, MQL5\Logs und Tester\logs.
  • Durch die Registrierung in der Windows „Aufgabenplanung“ kann die tägliche/wöchentliche Ausführung automatisiert werden.

Überprüfung der Zielordner und Pfade

Öffnen Sie den Explorer über das MT5-Hauptmenü „Datei → Datenordner öffnen“ und überprüfen Sie die folgenden Unterordner:

  • …\Terminal\<Lange ID>\Logs (Betriebsprotokolle)
  • …\Terminal\<Lange ID>\MQL5\Logs (Expert Advisors/Indikatoren)
  • …\Terminal\<Lange ID>\Tester\logs (Backtest-Protokolle)

Wenn Sie mehrere Terminals (mehrere IDs) verwenden, existieren unter jeder ID gleichnamige Log-Ordner. Bei der portablen Version von MT5 werden MQL5 und Tester direkt im eigentlichen Stammordner abgelegt.


Aufbewahrungsdauer (Richtlinie für den Betrieb)

  • Live-Betrieb (einschließlich VPS): 14–30 Tage aufbewahren
  • Entwicklung/Prüfung: 7–14 Tage (Aufgrund des höheren Log-Volumens kürzere Aufbewahrung empfohlen)
  • Nur Backtest: Wöchentlich oder täglich löschen, je nach Testzyklus

Beginnen Sie mit einer längeren Periode, z. B. 30 Tage, und reduzieren Sie diese schrittweise, wenn keine Probleme auftreten.


Methode A: Automatische Löschung mit Batch-Datei (.bat)

A-1 Empfohlen: Massenumschaltung mit DRYRUN-Flag (Unterstützt Mehrere Terminals)

Diese Konfiguration ermöglicht eine Massenumschaltung zwischen „nur Liste anzeigen“ und „Produktionslöschung“ mithilfe des DRYRUN-Flags, um versehentliches Löschen zu verhindern. Sie durchsucht automatisch alle IDs (Terminals) unter %APPDATA%\MetaQuotes\Terminal.
Dies ist praktisch, wenn Sie mehrere MT5-Instanzen auf einem einzigen PC oder VPS betreiben.

@echo off
REM ===== MT5 Log-Auto-Löschung (Batch-Version / Mehrere Terminals & Massenumschaltung) =====
REM Ausführung mit Administratorrechten empfohlen. Ändern Sie DAYS/DRYRUN nach Bedarf.

setlocal enabledelayedexpansion
set "DAYS=30"          REM Dateien älter als diese Anzahl von Tagen als Ziel (z. B. 30)
set "DRYRUN=1"         REM 1=Nur Liste (keine Löschung), 0=Produktionslöschung
set "DATA_ROOT=%APPDATA%\MetaQuotes\Terminal"

echo [INFO] MT5 Logs-Bereinigungsziel: Dateien älter als %DAYS% Tage
echo [MODE] DRYRUN=%DRYRUN%  (1=nur Liste, 0=löschen)
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 Nur Liste (keine Löschung)
        forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c echo @path"
      ) else (
        REM Produktionslöschung (stille Löschung / Fehlerunterdrückung)
        forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c del /f /q @path" 2>nul
      )
    )
  )
)

echo.
echo [DONE] Log-Bereinigung abgeschlossen.
endlocal

Umschaltmethode: Verwenden Sie für Tests DRYRUN=1 (nur Liste). Um die Löschung auszuführen, ändern Sie DRYRUN=0 und speichern Sie die Datei erneut. Sie müssen keine Zeilen auskommentieren/einkommentieren.

A-2 Angabe über Festen ID-Pfad (Einzelnes Terminal)

Dies ist eine vereinfachte Version, die nur eine bestimmte Terminal-ID (einzelne Umgebung) als Ziel hat. Ersetzen Sie xxxxxxx durch Ihre ID.

@echo off
REM ===== MT5 Log-Auto-Löschung (Batch-Version / Feste ID & Massenumschaltung) =====
setlocal enabledelayedexpansion

set "DAYS=30"
set "DRYRUN=1"  REM 1=Nur Liste, 0=Löschen

REM Geben Sie die Log-Ordner im MT5-Datenordner an (ID ersetzen)
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] Log-Bereinigung abgeschlossen.
endlocal

A-3 Minimale Konfiguration (Ohne DRYRUN, Sofortige Löschung)

Ein minimales Beispiel für die sofortige Löschung (keine Prüfung). **Seien Sie vorsichtig, um versehentliches Löschen zu verhindern.**

@echo off
REM Geben Sie die Log-Ordner im MT5-Datenordner an
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 Löschen Sie Dateien, die älter als 30 Tage sind
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"

Methode B: Automatische Löschung mit PowerShell (.ps1)

B-1 Empfohlen: $DryRun-Flag für die Massenumschaltung (Unterstützt Mehrere Terminals)

PowerShell ermöglicht sichere Trockenläufe mithilfe von -WhatIf. Sie können den Betrieb einfach durch Umschalten von $DryRun zwischen $true und $false steuern.

# ===== MT5 Log-Auto-Löschung (PowerShell-Version / Mehrere Terminals & Massenumschaltung) =====
# Ausführung mit Administratorrechten empfohlen. $Days / $DryRun nach Bedarf anpassen.

$Days    = 30
$DryRun  = $true   # $true=Nur Liste (keine Löschung), $false=Produktionslöschung
$cutoff  = (Get-Date).AddDays(-$Days)
$dataRoot = Join-Path $env:APPDATA 'MetaQuotes\Terminal'

Write-Host "[INFO] Lösche Logs älter als $Days Tage"
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] Log-Bereinigung abgeschlossen."

B-2 Angabe über Festen ID-Pfad (Einzelnes Terminal)

Diese Version zielt nur auf eine bestimmte ID ab. Ersetzen Sie xxxxxxx durch Ihre ID.

# ===== MT5 Log-Auto-Löschung (PowerShell-Version / Feste ID & Massenumschaltung) =====
$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] Log-Bereinigung abgeschlossen."

B-3 Minimale Konfiguration (Sofortige Löschung)

Ein minimales Beispiel für die sofortige Löschung (keine Prüfung). **Seien Sie vorsichtig, um versehentliches Löschen zu verhindern.**

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

Regelmäßige Ausführung mit der Aufgabenplanung planen

Bildschirm für die Einstellungen der Aufgabenplanung

Schritte

  1. Öffnen Sie die Windows „Aufgabenplanung.“
  2. „Grundlegende Aufgabe erstellen“ → Geben Sie einen Namen ein (z. B. MT5 Log Auto-Löschung).
  3. Wählen Sie den Trigger (Täglich/Wöchentlich. Eine Zeit mit geringer Last, z. B. spät in der Nacht, wird empfohlen).
  4. Aktion = „Programm starten.“
    • Batch-Version: Programm/Skript: cmd.exe
      Argumente hinzufügen: /c "C:\scripts\DeleteMT5Logs.bat"
    • PowerShell-Version: Programm/Skript: powershell.exe
      Argumente hinzufügen: -ExecutionPolicy Bypass -File "C:\scripts\DeleteMT5Logs.ps1"
  5. Aktivieren Sie bei Bedarf „Unabhängig von Benutzeranmeldung ausführen“ und „Mit höchsten Rechten ausführen“ (für VPS empfohlen).
  6. Deaktivieren Sie unter Bedingungen die Einschränkungen bezüglich „Stromversorgung“ (bei VPS oder ständig laufendem PC).
  7. Aktivieren Sie die „Aufgabenverlauf“ und überprüfen Sie den Erfolg/Misserfolg (0x0 ist Erfolg).

Checkliste für den Sicheren Betrieb

  • Löschen Sie nur .log-Dateien (löschen Sie nicht Bases, History, Profiles usw.).
  • Führen Sie immer zuerst einen Trockenlauf durch: DRYRUN=1 für Batch, $DryRun=$true für PowerShell.
  • Beginnen Sie mit einer längeren Aufbewahrungsdauer → verkürzen Sie, wenn keine Probleme auftreten.
  • Stellen Sie bei Verwendung mehrerer Instanzen sicher, dass alle ID-Unterordner als Ziel festgelegt sind (das Skript in diesem Artikel erledigt dies automatisch).
  • Achten Sie auf unzureichende Berechtigungen oder falsche Pfade (verwenden Sie Pfade, die direkt aus „Datenordner öffnen“ kopiert wurden).

Fehlerbehebung

  • Durch Ausführungsrichtlinie blockiert: Starten Sie PowerShell mit -ExecutionPolicy Bypass.
  • Zugriff verweigert: Führen Sie mit Administratorrechten aus / Gewähren Sie der Aufgabe „höchste Rechte.“
  • Ziele nicht gefunden: Überprüfen Sie erneut den Pfad für die portable Version, die Unterordner für mehrere IDs und die Schreibweise der Ordnernamen.
  • Geplante Aufgabe startet nicht: Überprüfen Sie das „Letzte Ausführungsergebnis“ (0x0 ist Erfolg), die Einstellungen für den Startbenutzer/die Bedingungen und den Verlauf.

FAQ

F. Welche Ordner und welche Dateien soll ich löschen?
A. Nur .log-Dateien in Logs, MQL5\Logs und Tester\logs. Löschen Sie nicht Bases, History oder Profiles.
F. Wie lange ist eine sichere Aufbewahrungsdauer?
A. Beginnen Sie mit etwa 30 Tagen, und wenn keine Probleme auftreten, können Sie auf 14 oder 7 Tage verkürzen. 14–30 Tage ist ein Richtwert für den Live-Betrieb und 7–14 Tage für Entwicklung/Tests.
F. Ich verwende mehrere MT5-Instanzen (mehrere IDs). Können alle als Ziel festgelegt werden?
A. Die Beispiele in diesem Artikel durchsuchen automatisch alle ID-Ordner unter %APPDATA%\MetaQuotes\Terminal\.
F. Hat die Löschung Auswirkungen auf EAs oder Backtest-Ergebnisse?
A. Es werden nur die vergangenen Ausgabeprotokolle (Logs) entfernt, die EA-Logik oder die Testergebnisse werden dadurch nicht beeinträchtigt.
F. Ich möchte die Dateien überprüfen, bevor ich sie lösche.
A. Stellen Sie DRYRUN=1 für Batch oder $DryRun=$true für PowerShell ein und führen Sie das Skript aus, um nur eine Liste anzuzeigen.
F. Kann ich dies auch für die portable Version von MT5 verwenden?
A. Ja. Geben Sie bitte im Skript den absoluten Pfad zu den Ordnern Logs/MQL5\Logs/Tester\logs an, die sich direkt unter dem Hauptordner der portablen Version befinden.

FAQ-Schema (JSON-LD)

Schreibe einen Kommentar