From a7f03c66202314d402d8b36aa89b96a9b3b2e707 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 17 May 2026 20:16:16 +0100 Subject: [PATCH] Add files via upload --- mt5_multitf_pattern_scanner.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/mt5_multitf_pattern_scanner.py b/mt5_multitf_pattern_scanner.py index 4a70d50..c232656 100644 --- a/mt5_multitf_pattern_scanner.py +++ b/mt5_multitf_pattern_scanner.py @@ -841,19 +841,29 @@ def mt5_rates_to_df(rates, cfg=None): if rates is None or len(rates) == 0: return pd.DataFrame() - # Build DataFrame from structured array + # Build DataFrame from structured array (or list of numpy.void) + # Detect available field names (numpy.void supports [] but not .get()) + first = rates[0] + field_names = first.dtype.names if hasattr(first, 'dtype') and hasattr(first.dtype, 'names') else None rows = [] for r in rates: - rows.append({ + row = { 'time': r['time'], 'OPEN': r['open'], 'HIGH': r['high'], 'LOW': r['low'], 'CLOSE': r['close'], 'TICKVOL': r['tick_volume'], - 'VOL': r.get('real_volume', 0), - 'SPREAD': r.get('spread', 0), - }) + } + if field_names and 'real_volume' in field_names: + row['VOL'] = r['real_volume'] + else: + row['VOL'] = 0 + if field_names and 'spread' in field_names: + row['SPREAD'] = r['spread'] + else: + row['SPREAD'] = 0 + rows.append(row) df = pd.DataFrame(rows) df['DATETIME'] = pd.to_datetime(df['time'], unit='s') df['DATE'] = df['DATETIME'].dt.strftime('%Y.%m.%d')