Module Trading_engine.Fee_schedule

Deterministic, composable execution-fee schedules.

type rounding =
  1. | Up
  2. | Down
  3. | Nearest
    (*

    Rounding is sign-symmetric: Up rounds away from zero, Down rounds toward zero, and Nearest rounds half away from zero.

    *)
type liquidity =
  1. | Maker
  2. | Taker
type applicability =
  1. | Any
  2. | Maker_only
  3. | Taker_only
type basis =
  1. | Fixed of Scalar.Money.t
  2. | Notional_bps of int
  3. | Per_unit of Scalar.Money.t
type component
type t
type calculated_component = private {
  1. name : string;
  2. kind : string;
  3. currency : string;
  4. amount : Scalar.Money.t;
  5. quote_amount : Scalar.Money.t;
}
val create_component : name:string -> currency:string -> basis:basis -> rounding:rounding -> applicability:applicability -> (component, string) Stdlib.result
val create : schedule_id:string -> instrument_id:Id.Instrument.t -> settlement_currency:string -> minimum:Scalar.Money.t option -> maximum:Scalar.Money.t option -> components:component list -> (t, string) Stdlib.result
val schedule_id : t -> string
val instrument_id : t -> Id.Instrument.t
val settlement_currency : t -> string
val minimum : t -> Scalar.Money.t option
val maximum : t -> Scalar.Money.t option
val components : t -> component list
val component_name : component -> string
val component_currency : component -> string
val component_basis : component -> basis
val component_rounding : component -> rounding
val component_applicability : component -> applicability
val rounding_to_string : rounding -> string
val rounding_of_string : string -> (rounding, string) Stdlib.result
val applicability_to_string : applicability -> string
val applicability_of_string : string -> (applicability, string) Stdlib.result
val basis_kind : basis -> string
val calculate : t -> quote_currency:string -> notional:Scalar.Money.t -> quantity:Scalar.Quantity.t -> liquidity:liquidity -> fx_rates:(string * Scalar.Price.t) list -> (calculated_component list * Scalar.Money.t, string) Stdlib.result