Claude Code Plugins

Community-maintained marketplace

Feedback

Reads MetaTrader 5 log files to validate indicator execution, unit tests, and compilation errors. Use when user mentions Experts pane, MT5 logs, errors, or asks "did it work". Triggers - check logs, did it work, Experts pane, Print output, runtime errors, debug output. (project)

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name mt5-log-reader
description Reads MetaTrader 5 log files to validate indicator execution, unit tests, and compilation errors. Use when user mentions Experts pane, MT5 logs, errors, or asks "did it work". Triggers - check logs, did it work, Experts pane, Print output, runtime errors, debug output. (project)
allowed-tools Read, Grep, Bash

MT5 Log Reader

Overview

Read MetaTrader 5 log files programmatically to access Print() output from indicators, scripts, and expert advisors. Implements dual logging pattern where Print() statements go to MT5 logs (human-readable) and CSV files provide structured data for validation.

When to Use

Use this skill when:

  • Validating MT5 indicator/script execution
  • Checking compilation or runtime errors
  • Analyzing Print() debug output from indicators
  • Verifying unit test results (Test_PatternDetector, Test_ArrowManager)
  • User mentions checking "Experts pane" or "log" manually
  • User asks "did it work?" or "check the output"

Log File Structure

Runtime Logs (Experts Pane)

MT5 runtime logs are stored at:

$MQL5_ROOT/Program Files/MetaTrader 5/MQL5/Logs/YYYYMMDD.log

File Format:

  • Encoding: UTF-16LE (Little Endian) - Read tool handles automatically
  • Structure: Tab-separated fields (timestamp, source, message)
  • Size: Grows throughout day (typically 10-100KB, can reach 5MB+)

Compilation Logs (Per-File)

MetaEditor creates a .log file next to each compiled .mq5:

# Example: Fvg.mq5 creates Fvg.log in the same directory
$MQL5_ROOT/Program Files/MetaTrader 5/MQL5/Indicators/Custom/Development/FVG/Fvg.log

File Format:

  • Encoding: UTF-16LE (often readable with plain cat)
  • Contains: Compilation progress, error count, warnings, timing
  • Success indicator: "0 errors, 0 warnings"

Important: Wine/CrossOver returns exit code 1 even on successful compilation. Always check the .log file or verify .ex5 exists.

Workflow

Step 1: Construct Log Path

Determine today's date and build the absolute path:

TODAY=$(date +"%Y%m%d")
LOG_FILE="$MQL5_ROOT/Program Files/MetaTrader 5/MQL5/Logs/${TODAY}.log"

Step 2: Search for Relevant Entries

Use Grep tool to filter log entries (more efficient than reading entire file):

Pattern: indicator name, "error", "ERROR", "v0\\.4\\.0", "Phase 2", etc.
Path: Log file from Step 1
Output mode: "content"
-n: true (show line numbers)
-A: 5 (show 5 lines after matches for context)

Common search patterns:

  • CCI Rising Test|CCI_Rising_Test - Find specific indicator output
  • error|ERROR|failed - Find error messages
  • v0\\.4\\.0|v0\\.3\\.0 - Find specific version output
  • Phase \\d+|Test arrow created - Find initialization messages
  • DEBUG Bar - Find calculation output

Step 3: Analyze Results

Check the grep output for:

  • Timestamps - Verify output matches expected execution time
  • Error messages - Identify specific failures with context
  • Version numbers - Confirm correct .ex5 file is loaded
  • DEBUG output - Validate calculation results
  • Test results - Verify unit test pass/fail status

Common Validation Patterns

Check indicator version loaded

After compilation, verify the new .ex5 file is loaded:

# Search for version string in recent log entries
Pattern: "v0\\.4\\.0|=== CCI Rising Test"
Output mode: content
Context: -A 2

Look for initialization message with version number and timestamp matching the reload time.

Find runtime errors

Pattern: "error|ERROR|failed|Failed"
Output mode: content
Context: -A 3 -B 1  # Show 3 lines after, 1 before

Analyze error codes (e.g., 4003 = invalid time) and error context.

Monitor calculation output

Pattern: "DEBUG Bar"
Output mode: content
Context: -A 0  # No extra context needed
-n: true  # Show line numbers

Verify calculation values are reasonable (not EMPTY_VALUE, not reversed).

Verify test arrow creation

Pattern: "Phase 2|Test arrow created|Failed to create"
Output mode: content
Context: -A 2

Check for success message with timestamp.

Large Log Files

If log file exceeds 5MB (Read tool limit):

  1. Use Grep exclusively (more efficient than reading entire file)
  2. Use time-based filtering with -A and -B context
  3. Search for specific indicator names to narrow results

Integration with Dual Logging

This skill accesses one half of the dual logging pattern:

  1. MT5 Log Files (this skill) - Human-readable Print() output
  2. CSV Files (CSVLogger.mqh) - Structured audit trails

Both are accessible programmatically without user intervention.

Security Considerations

  • Log files may contain sensitive trading data (symbol names, account info)
  • Do not expose absolute paths unnecessarily in user-facing output
  • Filter sensitive information when reporting results
  • No file modification operations allowed (read-only access)

Examples

Example 1: Verify indicator reloaded after compilation

User: "I reloaded the indicator, can you check if v0.4.0 is running?"

Action:
1. Grep for "v0\\.4\\.0|CCI Rising Test v0\\.4"
2. Check most recent match timestamp
3. Verify it's after compilation time (16:59)

Output: "Yes, v0.4.0 loaded at 17:01 on EURUSD M1 chart"

Example 2: Find why histogram is empty

User: "The last 19 bars are still empty, check the log"

Action:
1. Grep for "DEBUG Bar|CCI=" pattern
2. Look for EMPTY_VALUE or unusual values
3. Check for error messages with -A 3 context

Output: "Found 'CCI=179769313486231570...' which is EMPTY_VALUE constant. The indicator didn't calculate CCI for those bars."

Example 3: Validate calculation fix

User: "Check if the absolute value fix is working"

Action:
1. Grep for "DEBUG Bar.*\\|CCI\\|=" (looking for |CCI|= output)
2. Compare with old format "DEBUG Bar.*CCI=" (without |CCI|)
3. Check timestamp matches latest compilation

Output: "The log shows old format (no |CCI|=) at 16:56. Need to reload to get v0.4.0 from 16:59."

References

  • MT5 file locations: docs/guides/MT5_FILE_LOCATIONS.md
  • Dual logging implementation: docs/plans/cci-rising-pattern-marker.yaml Phase 3-4
  • CSVLogger library: Program Files/MetaTrader 5/MQL5/Indicators/Custom/Development/CCINeutrality/lib/CSVLogger.mqh