SPB Git forge
1commits 1branches 0releases
189.0 KBsize
maindefault branch
5 h agolast push
Python 54.7% TypeScript 42.5% SQL 1.9%
5.7 KB · 107 lines typescript
Raw Blame History
1export type ParamSpec = {2  name: string;3  type: "int" | "float" | "bool" | "choice";4  default: unknown;5  min?: number | null;6  max?: number | null;7  step?: number | null;8  choices?: unknown[] | null;9  description?: string;10};11export type StrategyMeta = {12  name: string;13  label: string;14  family: string;15  hypothesis: string;16  universe_note: string;17  experimental: boolean;18  allows_short: boolean;19  min_bars: number;20  params: ParamSpec[];21  failure_modes: string[];22  references: string[];23};24export type OverviewSymbol = {25  symbol: string;26  last: number | null;27  change_pct: number | null;28  bid: number | null;29  ask: number | null;30  volume: number | null;31  spread_bps: number | null;32  age_s: number | null;33  stale: boolean;34  rv_7d_annualized: number | null;35  hourly_bars: number;36};37export type SystemStatus = {38  mode: "offline" | "paper" | "live";39  live_trading_enabled: boolean;40  env: string;41  version: string;42  universe: string[];43  intervals: number[];44  timescale: boolean;45  credentials: { data_key: boolean; trade_key: boolean; withdrawal: string };46  preflight: Record<string, unknown> | null;47  kraken: { status: string; timestamp?: string; rtt_ms?: number; clock_drift_s?: number; error?: string };48  stream: { connected: boolean; last_msg_age: number | null; reconnects: number; checksum_failures: number; messages: number; counts: Record<string, number>; ts: number } | null;49};50export type Candle = { ts: number; open: number; high: number; low: number; close: number; vwap: number; volume: number; count: number; closed: boolean };51export type Book = {52  symbol: string;53  bids: [number, number][];54  asks: [number, number][];55  best_bid: number | null;56  best_ask: number | null;57  spread: number | null;58  spread_bps: number | null;59  imbalance: number;60  timestamp: string | null;61  valid: boolean;62  received_at?: number;63  age_s?: number;64};65export type Trade = { trade_id: number; ts: number; price: number; volume: number; side: "buy" | "sell"; order_type: string };66export type Pair = { pair_id: string; altname: string; wsname: string; base: string; quote: string; status: string; ordermin: number; costmin: number; tick_size: number; pair_decimals: number; lot_decimals: number; in_universe: boolean };67export type Quality = { symbol: string; interval_min: number; bars: number; first_ts: number; last_ts: number; gaps: number; missing_bars: number; lag_bars: number; stale: boolean; coverage_days: number };68export type Gap = { symbol: string; interval_min: number; gap_start: number; gap_end: number; missing_bars: number; detected_at: string };69export type RiskLimits = {70  max_order_notional: number; max_position_notional: number; max_gross_exposure: number; max_net_exposure: number; max_concentration: number;71  daily_loss_limit: number; max_drawdown_limit: number; min_cash: number; max_open_orders: number; max_participation: number; max_price_deviation: number;72  stale_data_seconds: number; max_clock_drift_seconds: number; var_limit_95: number | null;73};74export type KillSwitch = { active: boolean; reason?: string | null; since?: number | null };75export type RiskStatus = { limits: RiskLimits; kill_switch: KillSwitch; mode: string; recent_events: { ts: string; action: string; details: Record<string, unknown> }[] };76export type AuditItem = { id: number; ts: string; actor: string; action: string; entity: string | null; details: Record<string, unknown>; cid: string | null; hash: string };77export type RunRow = {78  id: string; created_at: string; finished_at: string | null; status: string; strategy: string; symbol: string; interval_min: number;79  params: Record<string, unknown>; label: string | null; error: string | null; start_ts: number | null; end_ts: number | null;80  sharpe: string | null; total_return: string | null; max_drawdown: string | null; n_trades: string | null;81};82export type EquityPoint = { ts: number; equity: number; drawdown: number; exposure: number; price: number };83export type Metrics = Record<string, number | null | undefined> & {84  bootstrap?: { sharpe_ci: [number | null, number | null]; cagr_ci: [number | null, number | null]; n_boot: number; block?: number };85  deflated_sharpe?: { dsr: number | null; sr0_annual?: number | null; n_trials?: number };86};87export type TradeRec = { ts: number; side: string; qty: number; price: number; ref_price: number; fee: number; slippage_cost: number; notional: number; reason: string; strategy_target: number; partial: boolean };88export type Artifacts = {89  equity: EquityPoint[];90  rolling_sharpe: { ts: number; sharpe: number }[];91  trades: TradeRec[];92  rejected: { ts: number; side: string; qty: number; reasons: string[] }[];93  benchmarks: Record<string, { metrics: Metrics; equity: EquityPoint[] }>;94  stress: Record<string, Record<string, number | null>>;95  shuffled_trades: { n: number; max_dd_p50?: number; max_dd_p95?: number; max_dd_worst?: number; total_pnl?: number };96  walk_forward: { folds: { fold: number; train: [number, number]; test: [number, number]; best_params: Record<string, unknown>; is_sharpe: number | null; oos_sharpe: number | null; oos_return: number | null; oos_max_dd: number | null }[]; anchored?: boolean; n_trials?: number; grid?: Record<string, unknown[]>; embargo_bars?: number; stitched_oos?: { sharpe: number | null; total_return: number | null; bars: number }; error?: string } | null;97  sensitivity: { x: { name: string; values: unknown[] }; y: { name: string; values: unknown[] }; metric: string; z: (number | null)[][] } | null;98  holdout: { start_ts: number; metrics: Metrics; equity: EquityPoint[] } | null;99  features_tail: Record<string, number>[];100};101export type Run = RunRow & {102  cost_model: Record<string, unknown>;103  metrics: Metrics | null;104  provenance: Record<string, unknown> | null;105  artifacts: Artifacts | null;106};107