hedgequantx 2.9.157 → 2.9.159

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -531,8 +531,17 @@ var require_core = __commonJS({
531
531
  const { contractId, price, volume, timestamp } = tick;
532
532
  const ts = timestamp || Date.now();
533
533
  const vol = volume || 1;
534
+ if (!this._tickCount) this._tickCount = /* @__PURE__ */ new Map();
535
+ const count = (this._tickCount.get(contractId) || 0) + 1;
536
+ this._tickCount.set(contractId, count);
534
537
  let bar = this.currentBar.get(contractId);
535
538
  const barStartTime = Math.floor(ts / this.barIntervalMs) * this.barIntervalMs;
539
+ if (count === 1) {
540
+ this.emit("log", {
541
+ type: "debug",
542
+ message: `[2B] First tick ${contractId}: price=${price}, ts=${ts}, barStart=${barStartTime}`
543
+ });
544
+ }
536
545
  if (!bar || bar.startTime !== barStartTime) {
537
546
  if (bar) {
538
547
  const closedBar = {
@@ -543,6 +552,11 @@ var require_core = __commonJS({
543
552
  close: bar.close,
544
553
  volume: bar.volume
545
554
  };
555
+ const bars = this.barHistory.get(contractId) || [];
556
+ this.emit("log", {
557
+ type: "debug",
558
+ message: `[2B] BAR CLOSE ${contractId} #${bars.length + 1}: O=${closedBar.open.toFixed(2)} H=${closedBar.high.toFixed(2)} L=${closedBar.low.toFixed(2)} C=${closedBar.close.toFixed(2)} V=${closedBar.volume}`
559
+ });
546
560
  const signal = this.processBar(contractId, closedBar);
547
561
  this.currentBar.set(contractId, {
548
562
  startTime: barStartTime,
@@ -554,6 +568,10 @@ var require_core = __commonJS({
554
568
  });
555
569
  return signal;
556
570
  } else {
571
+ this.emit("log", {
572
+ type: "debug",
573
+ message: `[2B] First bar start ${contractId} @ ${new Date(barStartTime).toISOString()}`
574
+ });
557
575
  this.currentBar.set(contractId, {
558
576
  startTime: barStartTime,
559
577
  open: price,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedgequantx",
3
- "version": "2.9.157",
3
+ "version": "2.9.159",
4
4
  "description": "HedgeQuantX - Prop Futures Trading CLI",
5
5
  "main": "src/app.js",
6
6
  "bin": {
@@ -276,59 +276,59 @@ module.exports = {
276
276
  ]),
277
277
 
278
278
  ready: (d) => {
279
- const side = d.delta > 0 ? 'LONG' : d.delta < 0 ? 'SHORT' : 'REVERSAL';
280
- const sideColor = d.delta > 0 ? chalk.green : chalk.red;
279
+ const bias = d.delta > 0 ? 'bullish' : d.delta < 0 ? 'bearish' : 'neutral';
280
+ const biasColor = d.delta > 0 ? chalk.green : d.delta < 0 ? chalk.red : chalk.gray;
281
281
  return pick([
282
- chalk.bgGreen.black(' SWEEP ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' stops')} | ${sideColor(side)}`,
283
- chalk.bgGreen.black(' 2B ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED @ ${chalk.white(d.price)} | OFI shift | ${sideColor(side)}`,
284
- chalk.bgGreen.black(' TRAP ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | Zone rejection | ${sideColor(side)} ENTRY`,
285
- chalk.bgGreen.black(' HUNT ') + ` ${chalk.green(`[${d.sym}]`)} COMPLETE | ${chalk.white(d.price)} | Delta reversal | ${sideColor(side)}`,
286
- chalk.bgGreen.black(' GRAB ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' zones')} swept | ${sideColor(side)}`,
287
- chalk.bgGreen.black(' BREAK ') + ` ${chalk.green(`[${d.sym}]`)} ZONE | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
288
- chalk.bgGreen.black(' REV ') + ` ${chalk.green(`[${d.sym}]`)} TRAP @ ${chalk.white(d.price)} | Stops taken | ${sideColor(side)}`,
289
- chalk.bgGreen.black(' DONE ') + ` ${chalk.green(`[${d.sym}]`)} SWEEP | ${chalk.yellow(d.zones + ' levels')} @ ${chalk.white(d.price)} | ${sideColor(side)}`,
290
- chalk.bgGreen.black(' FAIL ') + ` ${chalk.green(`[${d.sym}]`)} BREAKOUT @ ${chalk.white(d.price)} | Reversal | ${sideColor(side)}`,
291
- chalk.bgGreen.black(' FALSE ') + ` ${chalk.green(`[${d.sym}]`)} BREAK @ ${chalk.white(d.price)} | Swept | ${sideColor(side)}`,
292
- chalk.bgGreen.black(' SIGNAL ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
293
- chalk.bgGreen.black(' ENTRY ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' zones')} | ${sideColor(side)}`,
294
- chalk.bgGreen.black(' TRIGGER ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
295
- chalk.bgGreen.black(' EXEC ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' targets')} | ${sideColor(side)}`,
296
- chalk.bgGreen.black(' 2B ') + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
297
- chalk.bgGreen.black(' SWEEP ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | ${sideColor(side)}`,
298
- chalk.bgGreen.black(' ZONE ') + ` ${chalk.green(`[${d.sym}]`)} TRAP @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
299
- chalk.bgGreen.black(' REV ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} swept | ${sideColor(side)}`,
300
- chalk.bgGreen.black(' STOP ') + ` ${chalk.green(`[${d.sym}]`)} RUN @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
301
- chalk.bgGreen.black(' LIQ ') + ` ${chalk.green(`[${d.sym}]`)} GRAB @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | ${sideColor(side)}`,
302
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | Delta: ${chalk.white(d.delta)}`,
303
- chalk.bgGreen.black(' TRAP ') + ` ${chalk.green(`[${d.sym}]`)} REV @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} swept | ${sideColor(side)}`,
304
- chalk.bgGreen.black(' SWEEP ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
305
- chalk.bgGreen.black(' 2B ') + ` ${chalk.green(`[${d.sym}]`)} ENTRY @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | ${sideColor(side)}`,
306
- chalk.bgGreen.black(' ZONE ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
307
- chalk.bgGreen.black(' LIQ ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} targets`,
308
- chalk.bgGreen.black(' STOP ') + ` ${chalk.green(`[${d.sym}]`)} SWEEP @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
309
- chalk.bgGreen.black(' REV ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones`,
310
- chalk.bgGreen.black(' TRAP ') + ` ${chalk.green(`[${d.sym}]`)} ENTRY @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
311
- chalk.bgGreen.black(' ZONE ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} swept`,
312
- chalk.bgGreen.black(' SWEEP ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
313
- chalk.bgGreen.black(' 2B ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | ${sideColor(side)}`,
314
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} TRIGGER @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
315
- chalk.bgGreen.black(' ENTRY ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} swept | ${sideColor(side)}`,
316
- chalk.bgGreen.black(' EXEC ') + ` ${chalk.green(`[${d.sym}]`)} SWEEP @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
317
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} ENTRY @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones`,
318
- chalk.bgGreen.black(' ZONE ') + ` ${chalk.green(`[${d.sym}]`)} GRAB @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
319
- chalk.bgGreen.black(' LIQ ') + ` ${chalk.green(`[${d.sym}]`)} TRAP @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} targets | ${sideColor(side)}`,
320
- chalk.bgGreen.black(' STOP ') + ` ${chalk.green(`[${d.sym}]`)} TRAP @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
321
- chalk.bgGreen.black(' 2B ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | ${sideColor(side)}`,
322
- chalk.bgGreen.black(' REV ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | ${sideColor(side)}`,
323
- chalk.bgGreen.black(' SWEEP ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} swept | ${sideColor(side)}`,
324
- chalk.bgGreen.black(' ZONE ') + ` ${chalk.green(`[${d.sym}]`)} ENTRY @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${sideColor(side)}`,
325
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} SIGNAL @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones`,
326
- chalk.bgGreen.black(' TRAP ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
327
- chalk.bgGreen.black(' EXEC ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} targets`,
328
- chalk.bgGreen.black(' SIGNAL ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
329
- chalk.bgGreen.black(' ENTRY ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} swept`,
330
- chalk.bgGreen.black(' TRIGGER ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
331
- chalk.bgGreen.black(' CONFIRM ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones`,
282
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' zones')} | ${biasColor(bias)} bias`,
283
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Watching @ ${chalk.white(d.price)} | ${chalk.yellow(d.swings + ' swings')} mapped`,
284
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | Sweep watch`,
285
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Zones active | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
286
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' levels')} | Awaiting sweep`,
287
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Liquidity mapped | ${chalk.white(d.price)} | ${biasColor(bias)}`,
288
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.swings)} pivots | Delta: ${chalk.white(d.delta)}`,
289
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Monitoring @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' zones')}`,
290
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | Zones ready`,
291
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Structure set | ${chalk.white(d.price)} | ${chalk.yellow(d.swings + ' swings')}`,
292
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} flow | ${chalk.yellow(d.zones)} zones`,
293
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Sweep zones mapped | ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
294
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' targets')} | ${biasColor(bias)}`,
295
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Watching levels | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
296
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Liquidity hunt active | ${chalk.yellow(d.zones)} zones`,
297
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Zones locked | ${chalk.white(d.price)} | ${biasColor(bias)} bias`,
298
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.swings + ' pivots')} | Sweep imminent`,
299
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Hunting liquidity | ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
300
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | Primed`,
301
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} 2B setup forming | ${chalk.white(d.price)} | ${biasColor(bias)}`,
302
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Stop hunt watch | ${chalk.yellow(d.zones + ' levels')}`,
303
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Armed @ ${chalk.white(d.price)} | ${chalk.yellow(d.swings)} swings | ${biasColor(bias)}`,
304
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | Zones primed`,
305
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Liquidity levels set | ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones`,
306
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} | Awaiting trigger`,
307
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Pattern forming | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
308
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' zones')} | Sweep watch`,
309
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Targets locked | ${chalk.white(d.price)} | ${biasColor(bias)} flow`,
310
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.swings)} pivots | Delta: ${chalk.white(d.delta)}`,
311
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Monitoring zones | ${chalk.white(d.price)} | ${biasColor(bias)}`,
312
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' levels')} | Armed`,
313
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Ready state | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
314
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Sweep zones active | ${biasColor(bias)}`,
315
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Watching @ ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones ready`,
316
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)} | Primed`,
317
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Structure ready | ${chalk.white(d.price)} | ${chalk.yellow(d.swings + ' swings')}`,
318
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} bias | ${chalk.yellow(d.zones)} zones`,
319
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Levels mapped | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
320
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones + ' targets')} | Watching`,
321
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Zones active | ${chalk.white(d.price)} | ${biasColor(bias)} flow`,
322
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.swings)} pivots | Sweep watch`,
323
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Liquidity hunt | ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
324
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | Armed`,
325
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Awaiting sweep | ${chalk.white(d.price)} | ${biasColor(bias)}`,
326
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)} | ${chalk.yellow(d.zones + ' levels')}`,
327
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Pattern watch | ${chalk.white(d.price)} | ${biasColor(bias)} flow`,
328
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.swings + ' swings')} | Primed`,
329
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Stop hunt mode | ${chalk.white(d.price)} | Delta: ${chalk.white(d.delta)}`,
330
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${chalk.yellow(d.zones)} zones | ${biasColor(bias)}`,
331
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Sweep ready | ${chalk.white(d.price)} | OFI: ${chalk.white(d.delta)}`,
332
332
  ]);
333
333
  },
334
334
  };
@@ -276,59 +276,60 @@ module.exports = {
276
276
  ]),
277
277
 
278
278
  ready: (d) => {
279
- const side = d.rawZScore > 0 ? 'LONG' : 'SHORT';
279
+ const bias = d.rawZScore > 0 ? 'bullish' : 'bearish';
280
280
  const zSign = d.rawZScore > 0 ? '+' : '-';
281
- const sideColor = d.rawZScore > 0 ? chalk.green : chalk.red;
281
+ const biasColor = d.rawZScore > 0 ? chalk.green : chalk.red;
282
282
  return pick([
283
- chalk.bgGreen.black(' Z-SCORE ') + ` ${chalk.green(`[${d.sym}]`)} BREACH | ${sideColor(zSign + d.zScoreAbs + 'σ')} @ ${chalk.white(d.price)} | ${sideColor(side)}`,
284
- chalk.bgGreen.black(' FACTOR ') + ` ${chalk.green(`[${d.sym}]`)} CONSENSUS | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
285
- chalk.bgGreen.black(' STAT ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | VPIN: ${chalk.white(d.vpin + '%')} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
286
- chalk.bgGreen.black(' ALPHA ') + ` ${chalk.green(`[${d.sym}]`)} DETECTED | ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
287
- chalk.bgGreen.black(' REGIME ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
288
- chalk.bgGreen.black(' MODEL ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
289
- chalk.bgGreen.black(' THRESHOLD ') + ` ${chalk.green(`[${d.sym}]`)} BREACH | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
290
- chalk.bgGreen.black(' MEAN ') + ` ${chalk.green(`[${d.sym}]`)} REVERSION | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)} @ ${chalk.white(d.price)}`,
291
- chalk.bgGreen.black(' EDGE ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
292
- chalk.bgGreen.black(' FACTOR ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
293
- chalk.bgGreen.black(' Z ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | ${sideColor(zSign + d.zScoreAbs + 'σ')} @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
294
- chalk.bgGreen.black(' ALPHA ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
295
- chalk.bgGreen.black(' MODEL ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE | ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
296
- chalk.bgGreen.black(' STAT ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | OFI: ${chalk.white(d.ofi)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
297
- chalk.bgGreen.black(' FACTOR ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
298
- chalk.bgGreen.black(' Z ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE | ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
299
- chalk.bgGreen.black(' EDGE ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
300
- chalk.bgGreen.black(' ALPHA ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE | ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
301
- chalk.bgGreen.black(' MODEL ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
302
- chalk.bgGreen.black(' STAT ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
303
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')}`,
304
- chalk.bgGreen.black(' Z ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | ${sideColor(zSign + d.zScoreAbs + 'σ')} @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
305
- chalk.bgGreen.black(' EDGE ') + ` ${chalk.green(`[${d.sym}]`)} EXECUTE | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
306
- chalk.bgGreen.black(' ALPHA ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
307
- chalk.bgGreen.black(' MODEL ') + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)} @ ${chalk.white(d.price)}`,
308
- chalk.bgGreen.black(' STAT ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | VPIN: ${chalk.white(d.vpin + '%')} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
309
- chalk.bgGreen.black(' FACTOR ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)}`,
310
- chalk.bgGreen.black(' Z ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')} | ${sideColor(side)}`,
311
- chalk.bgGreen.black(' EDGE ') + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${sideColor(side)}`,
312
- chalk.bgGreen.black(' ALPHA ') + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${sideColor(side)} @ ${chalk.white(d.price)}`,
313
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} SIGNAL | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)} | ${chalk.white(d.price)}`,
314
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} TRIGGER | VPIN: ${chalk.white(d.vpin + '%')} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')}`,
315
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} EXECUTE | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
316
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} CONFIRMED | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')}`,
317
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} ACTIVE | ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)}`,
318
- chalk.bgGreen.black(' EXEC ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | VPIN: ${chalk.white(d.vpin + '%')} | ${chalk.white(d.price)}`,
319
- chalk.bgGreen.black(' TRIGGER ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)}`,
320
- chalk.bgGreen.black(' CONFIRM ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')}`,
321
- chalk.bgGreen.black(' SIGNAL ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${chalk.white(d.price)}`,
322
- chalk.bgGreen.black(' ENTRY ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | OFI: ${chalk.white(d.ofi)} | VPIN: ${chalk.white(d.vpin + '%')}`,
323
- chalk.bgGreen.black(' ACTIVE ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} @ ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')}`,
324
- chalk.bgGreen.black(' Z-BREAK ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)}`,
325
- chalk.bgGreen.black(' VPIN ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | ${chalk.white(d.vpin + '%')} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')}`,
326
- chalk.bgGreen.black(' OFI ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | ${chalk.white(d.ofi)} | ${chalk.white(d.price)}`,
327
- chalk.bgGreen.black(' QUANT ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | VPIN: ${chalk.white(d.vpin + '%')}`,
328
- chalk.bgGreen.black(' STAT ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
329
- chalk.bgGreen.black(' READY ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | ${chalk.white(d.price)}`,
330
- chalk.bgGreen.black(' GO ') + ` ${chalk.green(`[${d.sym}]`)} ${sideColor(side)} | VPIN: ${chalk.white(d.vpin + '%')} | OFI: ${chalk.white(d.ofi)}`,
331
- chalk.bgGreen.black(` ${side} `) + ` ${chalk.green(`[${d.sym}]`)} @ ${chalk.white(d.price)} | Z: ${sideColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)}`,
283
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | ${biasColor(bias)} bias`,
284
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Watching @ ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')}`,
285
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | Z watch`,
286
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Model active | ${chalk.white(d.price)} | ${biasColor(bias)}`,
287
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | Primed`,
288
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Factors aligned | ${chalk.white(d.price)} | ${biasColor(bias)}`,
289
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')} | ${biasColor(bias)}`,
290
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Monitoring @ ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
291
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | Armed`,
292
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Stat model ready | ${chalk.white(d.price)} | ${biasColor(bias)}`,
293
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} flow | VPIN: ${chalk.white(d.vpin + '%')}`,
294
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Z threshold watch | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
295
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(zSign + d.zScoreAbs + 'σ')} | Watching`,
296
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Alpha scan | ${chalk.white(d.price)} | ${biasColor(bias)} bias`,
297
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${biasColor(bias)}`,
298
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Regime check | ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
299
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')} | Primed`,
300
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Mean rev watch | ${chalk.white(d.price)} | ${biasColor(bias)}`,
301
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | OFI: ${chalk.white(d.ofi)}`,
302
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Edge calculation | ${chalk.white(d.price)} | ${biasColor(bias)}`,
303
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} | VPIN: ${chalk.white(d.vpin + '%')}`,
304
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Factor model | ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
305
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | Armed`,
306
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Quant ready | ${chalk.white(d.price)} | ${biasColor(bias)} flow`,
307
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | Watching`,
308
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Statistical edge | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
309
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} bias | Primed`,
310
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Threshold watch | ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')}`,
311
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | ${biasColor(bias)}`,
312
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Model armed | ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
313
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} | OFI: ${chalk.white(d.ofi)}`,
314
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Z-score monitor | ${chalk.white(d.price)} | ${biasColor(bias)}`,
315
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')} | Armed`,
316
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Stat ready | ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
317
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} flow | Watching`,
318
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} OFI tracking | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
319
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | ${biasColor(bias)}`,
320
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} VPIN watch | ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')}`,
321
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | Primed`,
322
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Awaiting edge | ${chalk.white(d.price)} | ${biasColor(bias)}`,
323
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} bias | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
324
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Model tracking | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
325
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')} | ${biasColor(bias)}`,
326
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Factor scan | ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
327
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | ${biasColor(bias)} | Watching levels`,
328
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Ready state | ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)}`,
329
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')} | Armed`,
330
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Edge monitor | ${chalk.white(d.price)} | ${biasColor(bias)} flow`,
331
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} ${chalk.white(d.price)} | OFI: ${chalk.white(d.ofi)} | Z: ${biasColor(zSign + d.zScoreAbs + 'σ')}`,
332
+ chalk.bgCyan.black(' RDY ') + ` ${chalk.cyan(`[${d.sym}]`)} Quant scan | ${chalk.white(d.price)} | VPIN: ${chalk.white(d.vpin + '%')}`,
332
333
  ]);
333
334
  },
334
335
  };