Fixed mt5 parser for accounts with zero trades

This commit is contained in:
unknown
2026-06-13 08:14:14 +10:00
parent 17293d2c67
commit fffaddb2bf
2 changed files with 103 additions and 4 deletions
+34 -2
View File
@@ -111,17 +111,49 @@ def _extract_report_date(raw: bytes) -> str | None:
def refresh_account(cfg: dict, account_folder: str, label: str = "") -> dict:
"""Download, parse, cache one account. Returns {df, stats, error}."""
import traceback
from mt5_parser import detect_and_parse, calc_stats
raw = ftp_download_report(cfg, account_folder)
if raw is None:
st.warning(f"[{account_folder}] ftp_download_report returned None")
return {"error": f"No report found for {account_folder}"}
df, fmt = detect_and_parse(raw, f"{account_folder}.htm")
st.write(f"[{account_folder}] raw bytes: {len(raw)}, first 4 bytes: {raw[:4]}")
try:
df, fmt = detect_and_parse(raw, f"{account_folder}.htm")
except Exception as e:
st.error(f"[{account_folder}] detect_and_parse raised: {e}")
st.code(traceback.format_exc())
return {"error": str(e)}
st.write(f"[{account_folder}] fmt={fmt}, df={'None' if df is None else f'shape {df.shape}'}")
if df is None:
st.warning(f"[{account_folder}] detect_and_parse returned None df")
return {"error": f"Could not parse report for {account_folder}"}
# df.empty is valid for a new account with no closed trades yet
stats = calc_stats(df) if not df.empty else {}
from mt5_parser import parse_open_positions
df_open = parse_open_positions(raw)
data = {
"account_folder": account_folder,
"label" : label or account_folder,
"df" : df,
"stats" : stats,
"fmt" : fmt,
"df_open" : df_open,
"fetched_at" : datetime.now().isoformat(),
"report_date" : _extract_report_date(raw),
"error" : None,
}
CACHE_DIR.mkdir(exist_ok=True)
(CACHE_DIR / f"ftp_{account_folder}.pkl").write_bytes(pickle.dumps(data))
return data
data = {
"account_folder": account_folder,
"label" : label or account_folder,