Added per‑print NBBO placement tracking into clustering, exposed aggressor mix on
FlowPackets, and used it to adjust sweep/spike confidence. The Flow Packets UI now shows an aggressor mix pill with coverage and inside ratio.
This commit is contained in:
parent
0b0ffa651e
commit
69758d28d9
7 changed files with 247 additions and 12 deletions
|
|
@ -432,6 +432,12 @@ h1 {
|
|||
background: rgba(39, 84, 138, 0.12);
|
||||
}
|
||||
|
||||
.aggressor-tag {
|
||||
border-color: rgba(93, 70, 144, 0.45);
|
||||
color: #5d4690;
|
||||
background: rgba(93, 70, 144, 0.12);
|
||||
}
|
||||
|
||||
.nbbo-meta {
|
||||
font-size: 0.72rem;
|
||||
color: #6f5b39;
|
||||
|
|
|
|||
|
|
@ -179,6 +179,8 @@ const formatTime = (ts: number): string => {
|
|||
|
||||
const formatConfidence = (value: number): string => `${Math.round(value * 100)}%`;
|
||||
|
||||
const formatPct = (value: number): string => `${Math.round(value * 100)}%`;
|
||||
|
||||
const formatUsd = (value: number): string => {
|
||||
if (!Number.isFinite(value)) {
|
||||
return "0.00";
|
||||
|
|
@ -1790,10 +1792,20 @@ export default function HomePage() {
|
|||
const structureRights =
|
||||
typeof features.structure_rights === "string" ? features.structure_rights : "";
|
||||
const structureStrikes = parseNumber(features.structure_strikes, 0);
|
||||
const nbboBid = parseNumber(features.nbbo_bid, Number.NaN);
|
||||
const nbboAsk = parseNumber(features.nbbo_ask, Number.NaN);
|
||||
const nbboMid = parseNumber(features.nbbo_mid, Number.NaN);
|
||||
const nbboSpread = parseNumber(features.nbbo_spread, Number.NaN);
|
||||
const nbboBid = parseNumber(features.nbbo_bid, Number.NaN);
|
||||
const nbboAsk = parseNumber(features.nbbo_ask, Number.NaN);
|
||||
const nbboMid = parseNumber(features.nbbo_mid, Number.NaN);
|
||||
const nbboSpread = parseNumber(features.nbbo_spread, Number.NaN);
|
||||
const aggressiveBuyRatio = parseNumber(
|
||||
features.nbbo_aggressive_buy_ratio,
|
||||
Number.NaN
|
||||
);
|
||||
const aggressiveSellRatio = parseNumber(
|
||||
features.nbbo_aggressive_sell_ratio,
|
||||
Number.NaN
|
||||
);
|
||||
const aggressiveCoverage = parseNumber(features.nbbo_coverage_ratio, Number.NaN);
|
||||
const insideRatio = parseNumber(features.nbbo_inside_ratio, Number.NaN);
|
||||
const nbboAge = parseNumber(packet.join_quality.nbbo_age_ms, Number.NaN);
|
||||
const nbboStale = parseNumber(packet.join_quality.nbbo_stale, 0) > 0;
|
||||
const nbboMissing = parseNumber(packet.join_quality.nbbo_missing, 0) > 0;
|
||||
|
|
@ -1818,6 +1830,15 @@ export default function HomePage() {
|
|||
{structureStrikes > 0 ? ` ${structureStrikes}K` : ""}
|
||||
</span>
|
||||
) : null}
|
||||
{Number.isFinite(aggressiveCoverage) && aggressiveCoverage > 0 ? (
|
||||
<span className="pill aggressor-tag">
|
||||
Agg {formatPct(aggressiveBuyRatio)} / {formatPct(aggressiveSellRatio)}
|
||||
{Number.isFinite(insideRatio) && insideRatio > 0
|
||||
? ` · In ${formatPct(insideRatio)}`
|
||||
: ""}
|
||||
{` · ${formatPct(aggressiveCoverage)} cov`}
|
||||
</span>
|
||||
) : null}
|
||||
{Number.isFinite(nbboBid) && Number.isFinite(nbboAsk) ? (
|
||||
<span>
|
||||
NBBO ${formatPrice(nbboBid)} x ${formatPrice(nbboAsk)}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue