| 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