Algostream_order_management.VenueTyped trading venue with fee tiers and supported order kinds.
Today the exchange field on Algostream_domain_orders.Order.order is just an untyped string. This module introduces a structured Venue.t consumed by the Routing layer — callers continue to set the exchange string on submitted orders for compatibility, but routing decisions are made against the typed value.
module Asset = Algostream_domain_market.Assetmodule Order = Algostream_domain_orders.Ordertype t = {name : string;asset_class : Asset.asset_class;fee_tiers : fee_tier list;sorted ascending by volume_threshold
base_latency_us : float;supports_iceberg : bool;supports_stop : bool;min_order_size : float;}val create :
name:string ->
asset_class:Asset.asset_class ->
fee_tiers:fee_tier list ->
base_latency_us:float ->
supports_iceberg:bool ->
supports_stop:bool ->
min_order_size:float ->
tval effective_fee_bps : t -> taker:bool -> monthly_volume:float -> floatEffective fee in basis points at the caller's monthly trading volume.
val supports : t -> kind:Order.order_type -> boolWhether the venue supports the given order kind.
val binance_spot : tSensible defaults baked in, mirroring the per-exchange table in lib/normalization/symbol.ml. These are coarse approximations — verify against the venue's published schedule before routing real flow.
val coinbase_advanced : t