MT5 로그 자동 삭제 방법 (배치/PowerShell) | Logs, MQL5\Logs, Tester 정기 정리

시작하며

본 글에서는 MT5(MetaTrader 5)의 “작업 로그(Logs/Journal)”, “전문가(MQL5\Logs/Experts)”, “백테스트(Tester\logs)”의 “오래된 .log 파일”을 자동으로 삭제하여 디스크 비대화를 방지하는 방법을 설명합니다. Windows 표준 배치(.bat)나 PowerShell(.ps1)로 구현 가능합니다. 관련 글(MT5 로그 비대화 대책 | 작업 로그, 전문가, 백테스트 삭제 및 경량화 방법)을 자동화하고 싶은 분들을 위한 내용입니다.


자동 삭제 개념 (전제 조건)

  • MT5 로그는 날짜별로 YYYYMMDD.log 형식으로 저장됩니다.
  • 삭제 조건은 “◯일보다 오래된 파일”(예: 30일 이전)이 기본입니다.
  • 대상 폴더는 주로 Logs, MQL5\Logs, Tester\logs 세 가지입니다.
  • Windows “작업 스케줄러”에 등록하면 매일/매주로 자동 실행할 수 있습니다.

대상 폴더와 경로 확인 방법

MT5 상단 메뉴의 “파일 → 데이터 폴더 열기”에서 탐색기를 열고, 다음 하위 폴더를 확인합니다.

  • …\Terminal\<긴 ID>\Logs (작업 로그)
  • …\Terminal\<긴 ID>\MQL5\Logs (전문가/지표)
  • …\Terminal\<긴 ID>\Tester\logs (백테스트)

다중 터미널(다중 ID) 사용 시, 각 ID 아래에 동일한 이름의 로그 폴더가 존재합니다. 휴대용 버전 MT5는 실제 폴더 바로 아래에 MQL5, Tester가 위치합니다.


보관 일수 (운영 정책 가이드라인)

  • 실제 운영(VPS 포함): 14~30일 보관
  • 개발·검증: 7~14일 (출력량이 많아 짧게 권장)
  • 백테스트 전용: 테스트 주기에 맞춰 주 1회~일일 삭제

먼저 30일 등 길게 시작하여 문제없으면 점차 단축합니다.


방법 A: 배치 파일(.bat)로 자동 삭제

A-1 권장: DRYRUN 플래그로 일괄 전환 (다중 터미널 지원)

잘못된 삭제를 방지하기 위해, DRYRUN 플래그로 “목록만” ⇔ “본삭제”를 일괄 전환할 수 있는 형태입니다. %APPDATA%\MetaQuotes\Terminal 아래의 모든 ID(터미널)를 자동으로 탐색합니다.
한 대의 PC나 VPS에서 여러 MT5를 운영할 때便利합니다.

@echo off
REM ===== MT5 로그 자동 삭제 (배치版 / 다중 터미널 & 일괄 전환) =====
REM 관리자 권한으로 실행 권장. 필요에 따라 DAYS / DRYRUN을 변경하세요.

setlocal enabledelayedexpansion
set "DAYS=30"          REM 몇 일보다 오래된 파일을 대상으로 할지 (예: 30)
set "DRYRUN=1"         REM 1=목록만 (삭제 안 함), 0=본삭제
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 목록만 (삭제 안 함)
        forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c echo @path"
      ) else (
        REM 본삭제 (조용히 삭제 / 오류 억제)
        forfiles /p "%%~F" /m *.log /d -%DAYS% /c "cmd /c del /f /q @path" 2>nul
      )
    )
  )
)

echo.
echo [DONE] Completed log cleanup.
endlocal

전환 방법: 검증 시는 DRYRUN=1(목록만). 삭제를 실행할 때는 DRYRUN=0으로 변경하여 다시 저장하세요. 행의 주석을 해제/추가할 필요는 없습니다.

A-2 ID 고정 경로로 지정 (단일 터미널)

특정 터미널 ID(단일 환경)만을 대상으로 하는 간결한 버전입니다. xxxxxxx를 자신의 ID로 바꾸세요.

@echo off
REM ===== MT5 로그 자동 삭제 (배치版 / ID 고정 & 일괄 전환) =====
setlocal enabledelayedexpansion

set "DAYS=30"
set "DRYRUN=1"  REM 1=목록만, 0=삭제

REM MT5 데이터 폴더 내 로그 폴더 지정 (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 최소 구성 (DRYRUN 없음, 즉시 삭제)

즉시 삭제하는 최소 예시(검증 없음). 잘못된 삭제에 주의하세요.

@echo off
REM 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 30일보다 오래된 파일 삭제
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"

방법 B: PowerShell(.ps1)로 자동 삭제

B-1 권장: $DryRun 플래그로 일괄 전환 (다중 터미널 지원)

PowerShell은 -WhatIf로 안전하게 드라이런 가능합니다. $DryRun$true/$false로 전환하기만 하면 운영할 수 있습니다.

# ===== MT5 로그 자동 삭제 (PowerShell版 / 다중 터미널 & 일괄 전환) =====
# 관리자 권한 권장. 필요에 따라 $Days / $DryRun을 조정하세요.

$Days    = 30
$DryRun  = $true   # $true=목록만 (삭제 안 함), $false=본삭제
$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 ID 고정 경로로 지정 (단일 터미널)

특정 ID만 대상으로 하는 버전입니다. xxxxxxx를 자신의 ID로 바꾸세요.

# ===== MT5 로그 자동 삭제 (PowerShell版 / ID 고정 & 일괄 전환) =====
$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 최소 구성 (즉시 삭제)

즉시 삭제하는 최소 예시(검증 없음). 잘못된 삭제에 주의하세요.

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

작업 스케줄러로 정기 실행

작업 스케줄러 설정 화면

단계

  1. Windows “작업 스케줄러”를 엽니다.
  2. “기본 작업 만들기” → 이름(예: MT5 로그 자동 삭제) 입력.
  3. 트리거 선택(매일/매주. 시간은 심야 등 부하가 적은 시간대 권장).
  4. 작업 = “프로그램 시작”.
    • 배치版: 프로그램/스크립트: cmd.exe
      인수 추가: /c "C:\scripts\DeleteMT5Logs.bat"
    • PowerShell版: 프로그램/스크립트: powershell.exe
      인수 추가: -ExecutionPolicy Bypass -File "C:\scripts\DeleteMT5Logs.ps1"
  5. 필요에 따라 “사용자가 로그온한 여부와 관계없이 실행”, “가장 높은 수준의 권한으로 실행” 활성화(VPS에서는 권장).
  6. 조건에서 “전원” 관련 제한 비활성화(VPS나 상시 가동 PC의 경우).
  7. “작업 기록”을 활성화하고 성공 여부 확인(0x0이 성공).

안전 운영 체크리스트

  • 삭제 대상은 .log만(Bases, History, Profiles 등은 삭제 불가).
  • 첫 실행은 반드시 드라이런: 배치는 DRYRUN=1, PowerShell은 $DryRun=$true.
  • 보관 일수는 길게 설정 → 문제없으면 단축.
  • 다중 인스턴스 사용 시 모든 ID 아래를 대상화(본고의 스크립트는 자동 대응).
  • 권한 부족이나 경로 오류에 주의(실제로 “데이터 폴더 열기”에서 복사한 경로 사용).

문제 해결

  • 실행 정책으로 차단됨: PowerShell은 -ExecutionPolicy Bypass를 부여하여 시작.
  • 액세스 거부: 관리자 권한으로 실행 / 작업에 “가장 높은 수준의 권한” 부여.
  • 대상을 찾을 수 없음: 휴대용 버전 경로, 여러 ID 아래, 폴더 이름 철자 재확인.
  • 스케줄이 작동하지 않음: “마지막 실행 결과(0x0이 성공)”, 시작 사용자/조건 설정/기록 확인.

FAQ

Q. 어떤 폴더의 무엇을 삭제해야 하나요?
A. Logs, MQL5\Logs, Tester\logs.log 파일만입니다. Bases, History, Profiles 등은 삭제하지 마세요.
Q. 보관 일수는 어느 정도가 안전한가요?
A. 먼저 30일 정도부터 시작하여 문제없으면 14일, 7일로 단축해도 괜찮습니다. 실제 운영은 14~30일, 개발·검증은 7~14일이 가이드라인입니다.
Q. 여러 MT5 인스턴스(여러 ID)를 사용 중입니다. 모두 대상으로 할 수 있나요?
A. 본고의 샘플은 %APPDATA%\MetaQuotes\Terminal\ 아래의 모든 ID 폴더를 자동으로 탐색합니다.
Q. 삭제하면 EA나 백테스트 결과에 영향을 미치나요?
A. 과거의 출력 기록(로그)이 사라질 뿐, EA 로직이나 테스트 결과에는 영향을 미치지 않습니다.
Q. 먼저 삭제하지 않고 확인만 하고 싶은데요?
A. 배치는 DRYRUN=1, PowerShell은 $DryRun=$true로 설정하여 실행하면 목록만 표시됩니다.
Q. 휴대용 버전 MT5에도 사용할 수 있나요?
A. 네. 휴대용 버전의 실제 폴더 바로 아래에 있는 Logs/MQL5\Logs/Tester\logs의 절대 경로를 스크립트에 지정하세요.

FAQ 스키마 (JSON-LD)

답글 남기기