Session open: a random 0–180 minute delay, kept across restarts
The day's delay was 1–20 minutes. It is now 0–180, so the evening open lands anywhere from 5:05 to 8:05 PM CT. The day's roll is saved as a setting: with a three-hour window, a restart during the wait (an update, a crash) would otherwise roll again and could start the session early. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7866d67676
commit
ff97a59b49
@@ -118,7 +118,7 @@ test('CME trading hours are unchanged, across both DST regimes', () => {
|
||||
for (let m = 0; m < 7 * 24 * 60; m += 7) {
|
||||
const now = new Date(start + m * 60_000);
|
||||
for (const mode of ['full_cme', 'equity_hours']) {
|
||||
for (const jitter of [1, 13, 20]) {
|
||||
for (const jitter of [0, 1, 13, 20, 95, 180]) {
|
||||
assert.equal(isNoTradeTime(now, { everyDay: false, mode, jitterMin: jitter }), oldNoTrade(now, mode, jitter), `${now.toISOString()} ${mode} ${jitter}`);
|
||||
}
|
||||
}
|
||||
@@ -133,6 +133,18 @@ const ct = (iso, offsetHours) => new Date(Date.parse(`${iso}Z`) + offsetHours *
|
||||
const cdt = (iso) => ct(iso, 5); // Central daylight: UTC−5
|
||||
const cst = (iso) => ct(iso, 6); // Central standard: UTC−6
|
||||
|
||||
test('a 180-minute open delay: the evening session starts at 8:05 PM CT', () => {
|
||||
const o = { everyDay: false, mode: 'full_cme', jitterMin: 180 };
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-28T17:05:00'), o), true); // Monday, the usual open
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-28T20:04:00'), o), true);
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-28T20:05:00'), o), false);
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-27T20:04:00'), o), true); // Sunday too
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-27T20:05:00'), o), false);
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-29T10:00:00'), o), false); // the day session is untouched
|
||||
// No delay: 5:05 PM as always.
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-28T17:05:00'), { ...o, jitterMin: 0 }), false);
|
||||
});
|
||||
|
||||
test('every-day firms close only around the roll (CDT)', () => {
|
||||
const o = { everyDay: true, mode: 'full_cme', jitterMin: 7 };
|
||||
assert.equal(isNoTradeTime(cdt('2026-09-26T12:00:00'), o), false); // Saturday noon
|
||||
|
||||
Reference in New Issue
Block a user