mt5-log-reader
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)
When & Why to Use This Skill
The MT5 Log Reader is a specialized Claude skill designed to programmatically access and analyze MetaTrader 5 (MT5) log files. It enables developers to validate indicator execution, debug MQL5 code, and monitor runtime errors directly from the Experts pane. By automating the retrieval of Print() outputs and compilation logs, it streamlines the development, troubleshooting, and testing of custom indicators, scripts, and Expert Advisors (EAs).
Use Cases
- Debugging Runtime Errors: Automatically search and analyze MT5 Experts logs for specific error codes and failed execution context to identify MQL5 logic flaws.
- Indicator Version Validation: Verify if the correct version of an indicator or EA is successfully loaded and running after a new compilation.
- Automated Unit Testing: Programmatically check log files for pass/fail results from internal MQL5 unit test frameworks like PatternDetector or ArrowManager.
- Calculation Logic Troubleshooting: Monitor internal calculation values via Print() debug output to identify why signals, histograms, or graphical objects are not appearing as expected.
- Compilation Monitoring: Check MetaEditor-generated .log files to ensure successful compilation with zero errors and warnings without manually opening the file explorer.
| 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 outputerror|ERROR|failed- Find error messagesv0\\.4\\.0|v0\\.3\\.0- Find specific version outputPhase \\d+|Test arrow created- Find initialization messagesDEBUG 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):
- Use Grep exclusively (more efficient than reading entire file)
- Use time-based filtering with
-Aand-Bcontext - Search for specific indicator names to narrow results
Integration with Dual Logging
This skill accesses one half of the dual logging pattern:
- MT5 Log Files (this skill) - Human-readable Print() output
- 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.yamlPhase 3-4 - CSVLogger library:
Program Files/MetaTrader 5/MQL5/Indicators/Custom/Development/CCINeutrality/lib/CSVLogger.mqh