const cheerio = require('cheerio');
const fs = require('fs');
const parseMT5Report = (filePath) => {
const html = fs.readFileSync(filePath, 'utf8');
const $ = cheerio.load(html);
const deals = [];
// 1. Find the header "Deals" to locate the correct section
// The user specified:
Deals |
const dealsHeader = $('th:contains("Deals")');
if (dealsHeader.length > 0) {
// Find the parent table of this header
const table = dealsHeader.closest('table');
// Iterate through rows (skipping the header rows)
// We look for rows that contain numeric data or standard deal attributes
table.find('tr').each((i, row) => {
const cols = $(row).find('td');
// Basic validation to ensure it's a data row (13 columns based on prompt)
if (cols.length === 13) {
const rowData = {
time: $(cols[0]).text().trim(),
deal: $(cols[1]).text().trim(),
symbol: $(cols[2]).text().trim(),
type: $(cols[3]).text().trim(),
direction: $(cols[4]).text().trim(),
volume: parseFloat($(cols[5]).text().trim()),
price: parseFloat($(cols[6]).text().trim()),
order: $(cols[7]).text().trim(),
commission: parseFloat($(cols[8]).text().trim()),
swap: parseFloat($(cols[9]).text().trim()),
profit: parseFloat($(cols[10]).text().trim()),
balance: parseFloat($(cols[11]).text().trim()),
comment: $(cols[12]).text().trim(),
};
// Filter out header row repetitions if any exist by checking if 'balance' is a number
if (!isNaN(rowData.balance)) {
deals.push(rowData);
}
}
});
}
return deals;
};
module.exports = { parseMT5Report };