Add synthetic print and structure features

- Export synthetic market types
- Track special print conditions and derived cluster features
- Add same-size leg symmetry to structure packets
This commit is contained in:
dirtydishes 2026-05-13 22:36:13 -04:00
parent 8dcbcd2201
commit 9076d3b395
4 changed files with 103 additions and 0 deletions

View file

@ -46,6 +46,7 @@ export type StructurePacketPlan = {
nbboAggressiveBuyRatio: number;
nbboAggressiveSellRatio: number;
nbboAggressiveRatio: number;
sameSizeLegSymmetry: number;
source_ts: number;
ingest_ts: number;
seq: number;
@ -132,6 +133,19 @@ const dayDiff = (from: string | null, to: string | null): number | null => {
return Math.round(diffMs / 86_400_000);
};
const sameSizeLegSymmetry = (legs: LegEvidence[]): number => {
const sizes = legs.map((leg) => leg.totalSize).filter((value) => Number.isFinite(value) && value > 0);
if (sizes.length < 2) {
return 0;
}
const min = Math.min(...sizes);
const max = Math.max(...sizes);
if (!Number.isFinite(min) || !Number.isFinite(max) || max <= 0) {
return 0;
}
return min / max;
};
export const shouldEmitStructurePacket = (legs: LegEvidence[], currentLegContractId: string): boolean => {
if (legs.length < 2) {
return false;
@ -250,6 +264,7 @@ export const planStructurePacket = (
nbboAggressiveBuyRatio,
nbboAggressiveSellRatio,
nbboAggressiveRatio,
sameSizeLegSymmetry: roundTo(sameSizeLegSymmetry(legs)),
source_ts: Number.isFinite(source_ts) ? source_ts : 0,
ingest_ts,
seq
@ -320,6 +335,7 @@ export const buildStructureFlowPacket = (
features.nbbo_aggressive_buy_ratio = roundTo(plan.nbboAggressiveBuyRatio);
features.nbbo_aggressive_sell_ratio = roundTo(plan.nbboAggressiveSellRatio);
features.nbbo_aggressive_ratio = roundTo(plan.nbboAggressiveRatio);
features.same_size_leg_symmetry = roundTo(plan.sameSizeLegSymmetry);
const join_quality: Record<string, number> = {
nbbo_coverage_ratio: roundTo(plan.nbboCoverageRatio)