Fix duplicate-index crash in data validation, add Telegram flood control
- Move index dedup before OHLC consistency fix in _validate_and_clean to prevent crash when df.loc[dup_idx] returns Series instead of scalar - Add global flood backoff: detect RetryAfter, pause all sends/edits until ban expires instead of retrying and escalating the ban - Stop dashboard edit-fail → new-message spam cascade: track consecutive failures, only resend after 3 failed edits - Increase dashboard refresh from 5s to 30s, min send interval to 1.5s - Add comprehensive QA test suite (140 tests across all 7 modules) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+3
-3
@@ -267,6 +267,9 @@ class ForexDataProvider:
|
||||
df = df.ffill(limit=3)
|
||||
df = df.dropna(subset=["Close"])
|
||||
|
||||
df = df.sort_index()
|
||||
df = df[~df.index.duplicated(keep="last")]
|
||||
|
||||
now = pd.Timestamp.utcnow()
|
||||
future_mask = df.index > now + pd.Timedelta(minutes=5)
|
||||
if future_mask.any():
|
||||
@@ -306,9 +309,6 @@ class ForexDataProvider:
|
||||
f"(need {min_required}). Some indicators will be partial."
|
||||
)
|
||||
|
||||
df = df.sort_index()
|
||||
df = df[~df.index.duplicated(keep="last")]
|
||||
|
||||
cleaned = original_len - len(df)
|
||||
if cleaned > 0:
|
||||
logger.info(f"{symbol}: Cleaned {cleaned}/{original_len} bars")
|
||||
|
||||
Reference in New Issue
Block a user