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:
dirtydishes 2025-12-30 17:31:37 -05:00
parent 0b0ffa651e
commit 69758d28d9
7 changed files with 247 additions and 12 deletions

View file

@ -10,7 +10,9 @@ const baseConfig: ClassifierConfig = {
spikeMinSize: 400,
spikeMinPremiumZ: 2.5,
spikeMinSizeZ: 2,
zMinSamples: 12
zMinSamples: 12,
minNbboCoverage: 0.5,
minAggressorRatio: 0.55
};
const buildPacket = (
@ -66,4 +68,35 @@ describe("classifier z-score behavior", () => {
const hits = evaluateClassifiers(packet, baseConfig);
expect(hits.some((hit) => hit.classifier_id === "large_bullish_call_sweep")).toBe(false);
});
test("aggressor mix adjusts sweep confidence", () => {
const basePacket = {
total_premium: 120_000,
total_size: 900,
count: 4,
nbbo_coverage_ratio: 0.8
};
const lowAgg = buildPacket({
...basePacket,
nbbo_aggressive_buy_ratio: 0.2,
nbbo_aggressive_sell_ratio: 0.2
});
const highAgg = buildPacket({
...basePacket,
nbbo_aggressive_buy_ratio: 0.7,
nbbo_aggressive_sell_ratio: 0.3
});
const lowHit = evaluateClassifiers(lowAgg, baseConfig).find(
(hit) => hit.classifier_id === "large_bullish_call_sweep"
);
const highHit = evaluateClassifiers(highAgg, baseConfig).find(
(hit) => hit.classifier_id === "large_bullish_call_sweep"
);
expect(lowHit).toBeTruthy();
expect(highHit).toBeTruthy();
expect((highHit?.confidence ?? 0)).toBeGreaterThan(lowHit?.confidence ?? 0);
});
});