70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
import type { ClassifierConfig, ClassifierHit } from "../src/classifiers";
|
|
import type { FlowPacket } from "@islandflow/types";
|
|
|
|
export const TEST_CLASSIFIER_CONFIG: ClassifierConfig = {
|
|
sweepMinPremium: 40_000,
|
|
sweepMinCount: 3,
|
|
sweepMinPremiumZ: 2,
|
|
spikeMinPremium: 20_000,
|
|
spikeMinSize: 400,
|
|
spikeMinPremiumZ: 2.5,
|
|
spikeMinSizeZ: 2,
|
|
zMinSamples: 12,
|
|
minNbboCoverage: 0.5,
|
|
minAggressorRatio: 0.55,
|
|
zeroDteMaxAtmPct: 0.01,
|
|
zeroDteMinPremium: 20_000,
|
|
zeroDteMinSize: 400
|
|
};
|
|
|
|
export const buildFlowPacket = (
|
|
opts: {
|
|
id?: string;
|
|
source_ts?: number;
|
|
ingest_ts?: number;
|
|
seq?: number;
|
|
trace_id?: string;
|
|
members?: string[];
|
|
features?: FlowPacket["features"];
|
|
join_quality?: FlowPacket["join_quality"];
|
|
} = {}
|
|
): FlowPacket => {
|
|
const id = opts.id ?? "flowpacket:test";
|
|
const source_ts = opts.source_ts ?? Date.parse("2025-01-01T14:30:00Z");
|
|
const ingest_ts = opts.ingest_ts ?? source_ts;
|
|
const seq = opts.seq ?? 1;
|
|
const trace_id = opts.trace_id ?? `trace:${id}`;
|
|
|
|
return {
|
|
source_ts,
|
|
ingest_ts,
|
|
seq,
|
|
trace_id,
|
|
id,
|
|
members: opts.members ?? ["print:1", "print:2"],
|
|
features: {
|
|
count: 1,
|
|
window_ms: 250,
|
|
total_premium: 0,
|
|
total_size: 0,
|
|
first_price: 0,
|
|
last_price: 0,
|
|
total_premium_z: 0,
|
|
total_size_z: 0,
|
|
total_premium_baseline_n: 0,
|
|
total_size_baseline_n: 0,
|
|
nbbo_coverage_ratio: 0,
|
|
nbbo_aggressive_buy_ratio: 0,
|
|
nbbo_aggressive_sell_ratio: 0,
|
|
underlying_mid: 0,
|
|
...opts.features
|
|
},
|
|
join_quality: {
|
|
...opts.join_quality
|
|
}
|
|
};
|
|
};
|
|
|
|
export const getHit = (hits: ClassifierHit[], id: string): ClassifierHit | null => {
|
|
return hits.find((hit) => hit.classifier_id === id) ?? null;
|
|
};
|