Algostream_normalization.SymbolCanonical cross-exchange symbol.
Resolves exchange-native strings ("BTCUSDT" on Binance, "BTC-USD" on Coinbase) to a common shape. Note that USDT and USD are intentionally treated as DIFFERENT quote currencies — they are not the same instrument and the cross-feed basis between them is a real signal, not a normalization error.
val to_canonical : t -> string"BTC/USDT", "ETH/USD", "AAPL/USD" — strategy-facing form.
val parse : exchange:string -> raw:string -> t optionStatic lookup against a per-exchange table (Binance and Coinbase ship by default). Returns None for unknown exchange or unparseable raw string.
val register : exchange:string -> raw:string -> t -> unitTest hook: register a (exchange, raw) → canonical mapping at runtime. The table is shared process-wide.
val to_exchange : t -> exchange:string -> string optionInverse: given a canonical symbol and a target exchange, produce the exchange-native string (or None if no mapping exists).