Session rest: a rest across the 5 PM roll reports unsynced; health excuses a wake
A firm resting across the trade-date roll kept reporting its last snapshot, so yesterday's realized P&L and DLL lockouts counted as accounts already traded today (Nik's Topstep read 5/5 traded at 5:31 PM from 3:29 PM data). Its report is now the unsynced one until it logs back in; a rest within one trade date reports as before. /api/health also counts a firm logging back in after a rest as nothing wrong, within its 15-minute grace, rather than reading not ok for the seconds before its first sync. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5eb0ea7760
commit
062ec07f0a
@@ -6,7 +6,7 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {
|
||||
nextSessionOpenAt, planCheckIn, planRest, isNoTradeTime, currentTradeDateCT,
|
||||
nextSessionOpenAt, planCheckIn, planRest, restSnapshotStale, isNoTradeTime, currentTradeDateCT,
|
||||
REST_LEAD_MIN_MS, REST_LEAD_MAX_MS, REST_MIN_MS, CHECK_IN_GAP_MIN_MS, CHECK_IN_GAP_MAX_MS,
|
||||
} from '../lib/trading-logic.ts';
|
||||
|
||||
@@ -168,3 +168,14 @@ test('rests drawn for the same open log back in at different times', () => {
|
||||
for (let i = 0; i < 50; i++) wakes.add(Math.round(planRest(at('2026-10-24T17:00:00Z'), opensAt, rand).wakeAt / MIN));
|
||||
assert.ok(wakes.size >= 20, `only ${wakes.size} distinct wake minutes`);
|
||||
});
|
||||
|
||||
test("a resting snapshot from before the 5 PM roll is stale; one from today's trade date isn't", () => {
|
||||
// 2026-10-21: Nik's Topstep last synced 3:29 PM CT, read at 5:31 PM CT.
|
||||
assert.equal(restSnapshotStale(at('2026-10-21T20:29:00Z'), at('2026-10-21T22:31:00Z')), true);
|
||||
// Either side of the roll, a minute apart.
|
||||
assert.equal(restSnapshotStale(at('2026-10-21T21:59:00Z'), at('2026-10-21T22:01:00Z')), true);
|
||||
// Rested after the evening open, read the next afternoon: the same trade date.
|
||||
assert.equal(restSnapshotStale(at('2026-10-22T00:30:00Z'), at('2026-10-22T19:00:00Z')), false);
|
||||
// Never synced.
|
||||
assert.equal(restSnapshotStale(0, at('2026-10-22T19:00:00Z')), true);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user