From 8a5962d0a54b16ed22535e875ca60e5c95609d2a Mon Sep 17 00:00:00 2001 From: direkturcrypto Date: Fri, 27 Mar 2026 04:54:42 +0700 Subject: [PATCH] fix: measure defensive timeout from market open time, not bot entry time Market start = endTime - 5 minutes, so defensive triggers at exactly 120s after the market opens regardless of when the bot entered. Co-Authored-By: Claude Opus 4.6 --- src/services/mmExecutor.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/mmExecutor.js b/src/services/mmExecutor.js index 8886548..a24f381 100644 --- a/src/services/mmExecutor.js +++ b/src/services/mmExecutor.js @@ -232,10 +232,13 @@ async function monitorAndManage(pos) { // ── Defensive pivot: neither filled after timeout (5m markets only) ── if (config.mmDefensiveEnabled && config.mmDuration === '5m' && !pos.yes.filled && !pos.no.filled && !pos._defensiveActive) { - const elapsed = (Date.now() - new Date(pos.enteredAt).getTime()) / 1000; + // Measure from market open time (endTime - duration), not bot entry time + const marketDurationMs = 5 * 60 * 1000; + const marketStartMs = new Date(pos.endTime).getTime() - marketDurationMs; + const elapsed = (Date.now() - marketStartMs) / 1000; if (elapsed >= config.mmDefensiveTimeout) { pos._defensiveActive = true; - logger.warn(`MM: neither side filled after ${Math.round(elapsed)}s — entering defensive mode | ${label}`); + logger.warn(`MM: neither side filled after ${Math.round(elapsed)}s since market open — entering defensive mode | ${label}`); await defensivePivot(pos); break; }