Files
mt5-quant/tests/fixtures/sample_report.htm.xml
T
Devid HW 3f763827f4 feat: MT5-Quant MCP server for backtesting and optimization
MCP server exposing MetaTrader 5 strategy development tools to AI
assistants (Claude, Cursor, etc.) on macOS (CrossOver) and Linux (Wine).

Tools:
- run_backtest: full pipeline — compile EA, clean cache, backtest,
  parse HTML/XML report, analyze deals → metrics.json + analysis.json
- run_optimization: background genetic optimization with nohup/disown,
  UTF-16LE .set file handling, OptMode reset
- compile_ea: MQL5 compilation via MetaEditor with auto-detected
  include/ directory sync
- get_backtest_status / get_optimization_status: job polling
- verify_environment: Wine/MT5 path validation

Analytics:
- extract.py: MT5 HTML and SpreadsheetML XML report parser
- analyze.py: deal-level analysis (drawdown events, grid depth,
  loss sequences, monthly P&L) → analysis.json
- optimize_parser.py: optimization result parser with convergence analysis

Platform support:
- macOS CrossOver (GUI mode, no Xvfb needed)
- Linux Wine + Xvfb (headless, CI/CD compatible)
- Auto-detection of Wine executable and MT5 terminal paths
2026-04-18 11:41:41 +07:00

89 lines
3.6 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Worksheet ss:Name="Report">
<Table>
<Row>
<Cell><Data ss:Type="String">Net profit</Data></Cell>
<Cell><Data ss:Type="Number">1234.56</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">Profit factor</Data></Cell>
<Cell><Data ss:Type="Number">1.25</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">Sharpe Ratio</Data></Cell>
<Cell><Data ss:Type="Number">0.75</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">Total trades</Data></Cell>
<Cell><Data ss:Type="Number">150</Data></Cell>
</Row>
</Table>
</Worksheet>
<Worksheet ss:Name="Deals">
<Table>
<Row>
<Cell><Data ss:Type="String">time</Data></Cell>
<Cell><Data ss:Type="String">type</Data></Cell>
<Cell><Data ss:Type="String">direction</Data></Cell>
<Cell><Data ss:Type="String">volume</Data></Cell>
<Cell><Data ss:Type="String">price</Data></Cell>
<Cell><Data ss:Type="String">sl</Data></Cell>
<Cell><Data ss:Type="String">tp</Data></Cell>
<Cell><Data ss:Type="String">profit</Data></Cell>
<Cell><Data ss:Type="String">balance</Data></Cell>
<Cell><Data ss:Type="String">comment</Data></Cell>
<Cell><Data ss:Type="String">order</Data></Cell>
<Cell><Data ss:Type="String">magic</Data></Cell>
<Cell><Data ss:Type="String">entry</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">2025.01.10 09:30:00</Data></Cell>
<Cell><Data ss:Type="String">buy</Data></Cell>
<Cell><Data ss:Type="String">out</Data></Cell>
<Cell><Data ss:Type="Number">0.01</Data></Cell>
<Cell><Data ss:Type="Number">1915.00</Data></Cell>
<Cell><Data ss:Type="Number">0</Data></Cell>
<Cell><Data ss:Type="Number">0</Data></Cell>
<Cell><Data ss:Type="Number">15.00</Data></Cell>
<Cell><Data ss:Type="Number">10015.00</Data></Cell>
<Cell><Data ss:Type="String">Layer #1</Data></Cell>
<Cell><Data ss:Type="Number">1001</Data></Cell>
<Cell><Data ss:Type="Number">12345</Data></Cell>
<Cell><Data ss:Type="String">out</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">2025.01.15 10:45:00</Data></Cell>
<Cell><Data ss:Type="String">sell</Data></Cell>
<Cell><Data ss:Type="String">out</Data></Cell>
<Cell><Data ss:Type="Number">0.01</Data></Cell>
<Cell><Data ss:Type="Number">1920.00</Data></Cell>
<Cell><Data ss:Type="Number">0</Data></Cell>
<Cell><Data ss:Type="Number">0</Data></Cell>
<Cell><Data ss:Type="Number">-10.00</Data></Cell>
<Cell><Data ss:Type="Number">10005.00</Data></Cell>
<Cell><Data ss:Type="String">Layer #1</Data></Cell>
<Cell><Data ss:Type="Number">1002</Data></Cell>
<Cell><Data ss:Type="Number">12345</Data></Cell>
<Cell><Data ss:Type="String">out</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">2025.02.05 14:00:00</Data></Cell>
<Cell><Data ss:Type="String">sell</Data></Cell>
<Cell><Data ss:Type="String">out</Data></Cell>
<Cell><Data ss:Type="Number">0.01</Data></Cell>
<Cell><Data ss:Type="Number">1945.00</Data></Cell>
<Cell><Data ss:Type="Number">0</Data></Cell>
<Cell><Data ss:Type="Number">0</Data></Cell>
<Cell><Data ss:Type="Number">-15.00</Data></Cell>
<Cell><Data ss:Type="Number">10020.00</Data></Cell>
<Cell><Data ss:Type="String">Layer #1</Data></Cell>
<Cell><Data ss:Type="Number">1005</Data></Cell>
<Cell><Data ss:Type="Number">12345</Data></Cell>
<Cell><Data ss:Type="String">out</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>