2.8 KiB
SessionRule Bug Fix — 2026-02-20
Summary
A critical logic error in SessionRule.ts caused all profiles configured as "24/7" to silently block trades during Asian (TOK/SYD) market hours. This was a silent failure — no crash, no alert — the bot simply never entered during those hours.
Root Cause
File: src/strategies/rules/SessionRule.ts
Old logic (broken):
if (isMajor && hasAllowedSession) {
// pass
}
// else: always fail
The old check required both conditions simultaneously:
isMajor— the internal flag marking LDN/NY as "major" sessions.hasAllowedSession— the session being in the profile's allowed list.
The problem: isMajor is false during TOK/SYD regardless of how the profile is configured. So even when a profile explicitly set sessions: "LDN,NY,TOK,SYD" (24/7 mode), the condition isMajor && hasAllowedSession failed during TOK/SYD, producing:
❌ Mandatory Rule Failed: SessionRule -> Session TOK | SYD not in allowed set (24/7).
This was a misleading error — the session WAS in the allowed set, but isMajor overrode the check.
Fix Applied
New logic — 3-path decision tree:
1. Is allowedSessions = [LDN, NY, TOK, SYD]?
→ YES → 24/7 mode. ALWAYS PASS. Skip time checks.
2. Is current session = OFF (market closed)?
→ YES → BLOCK.
3. Is current session in the profile's allowedSessions list?
→ YES → PASS (restricted schedule, currently within window)
→ NO → BLOCK
Key change: Removed dependency on context.isMajorSession entirely. The session check is now driven purely by the profile's configuration, not by an internal "major session" flag.
Session Mapping (Frontend Wizard → Backend)
| Wizard Selection | SessionRule.params.sessions |
Backend Behavior |
|---|---|---|
| 24/7 | LDN,NY,TOK,SYD |
Detected as 24/7 → always passes |
| London + New York | LDN,NY |
Passes only during LDN/NY hours |
| Asia only | TOK,SYD |
Passes only during TOK/SYD hours |
Expected Log After Fix
✅ Rule Passed: SessionRule -> 24/7 mode: all sessions allowed. Current session: TOK | SYD.
vs. the old broken log:
❌ Mandatory Rule Failed: SessionRule -> Session TOK | SYD not in allowed set (24/7).
Impact Assessment
| Metric | Before Fix | After Fix |
|---|---|---|
| Trades during LDN/NY | ✅ Working | ✅ Working |
| Trades during TOK/SYD (24/7 profiles) | ❌ Silently blocked | ✅ Now allowed |
| Restricted session profiles (LDN,NY only) | ✅ Working | ✅ Working |
| Capital at risk | None (no trades were placed) | Normal |
Files Modified
src/strategies/rules/SessionRule.ts— Core fix