sig
  type 'a t constraint 'a = [< Security_type.t ]
  val of_raw : Raw_contract.t -> [< Security_type.t ] t
  val to_raw : [< Security_type.t ] t -> Raw_contract.t
  val sec_type : [< Security_type.t ] Contract.t -> Security_type.t
  val con_id : [< Security_type.t ] Contract.t -> Contract_id.t option
  val symbol : [< Security_type.t ] Contract.t -> Symbol.t
  val exchange : [< Security_type.t ] Contract.t -> Exchange.t
  val listed_on : [< Security_type.t ] Contract.t -> Exchange.t option
  val currency : [< Security_type.t ] Contract.t -> Currency.t
  val local_symbol : [< Security_type.t ] Contract.t -> Symbol.t option
  val sec_id : [< Security_type.t ] Contract.t -> Security_id.t option
  val underlying :
    [< `Fut_opt | `Option ] Contract.t ->
    [< Security_type.t > `Futures `Stock ] Contract.t
  val strike : [< `Fut_opt | `Option ] Contract.t -> Price.t
  val option_right : [< `Fut_opt | `Option ] Contract.t -> Option_right.t
  val expiry :
    [< `Fut_opt | `Futures | `Option ] Contract.t -> Core.Std.Date.t
  val days_to_expiry :
    [< `Fut_opt | `Futures | `Option ] Contract.t ->
    zone:Core.Std.Time.Zone.t -> int
  val multiplier : [< `Fut_opt | `Futures | `Option ] Contract.t -> int
  val to_string : [< Security_type.t ] Contract.t -> string
  val ( = ) :
    ([< Security_type.t ] as 'a) Contract.t -> 'Contract.t -> bool
  val stock :
    ?con_id:Contract_id.t ->
    ?listed_on:Exchange.t ->
    ?local_symbol:Symbol.t ->
    ?sec_id:Security_id.t ->
    ?exchange:Exchange.t ->
    currency:Currency.t ->
    Symbol.t -> [< Security_type.t > `Stock ] Contract.t
  val index :
    ?con_id:Contract_id.t ->
    ?local_symbol:Symbol.t ->
    ?sec_id:Security_id.t ->
    ?exchange:Exchange.t ->
    currency:Currency.t ->
    Symbol.t -> [< Security_type.t > `Index ] Contract.t
  val futures :
    ?con_id:Contract_id.t ->
    ?multiplier:int ->
    ?local_symbol:Symbol.t ->
    ?sec_id:Security_id.t ->
    ?include_expired:bool ->
    ?exchange:Exchange.t ->
    currency:Currency.t ->
    expiry:Core.Std.Date.t ->
    Symbol.t -> [< Security_type.t > `Futures ] Contract.t
  val option :
    ?con_id:Contract_id.t ->
    ?multiplier:int ->
    ?local_symbol:Symbol.t ->
    ?sec_id:Security_id.t ->
    ?exchange:Exchange.t ->
    currency:Currency.t ->
    option_right:Option_right.t ->
    expiry:Core.Std.Date.t ->
    strike:Price.t -> Symbol.t -> [< Security_type.t > `Option ] Contract.t
  val futures_option :
    ?con_id:Contract_id.t ->
    ?multiplier:int ->
    ?local_symbol:Symbol.t ->
    ?sec_id:Security_id.t ->
    ?exchange:Exchange.t ->
    currency:Currency.t ->
    option_right:Option_right.t ->
    expiry:Core.Std.Date.t ->
    strike:Price.t -> Symbol.t -> [< Security_type.t > `Fut_opt ] Contract.t
  val forex :
    ?con_id:Contract_id.t ->
    ?local_symbol:Symbol.t ->
    ?sec_id:Security_id.t ->
    ?exchange:Exchange.t ->
    currency:Currency.t ->
    Symbol.t -> [< Security_type.t > `Forex ] Contract.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> ([< Security_type.t ] as 'a)) ->
    Sexplib.Sexp.t -> 'Contract.t
  val sexp_of_t :
    (([< Security_type.t ] as 'a) -> Sexplib.Sexp.t) ->
    'Contract.t -> Sexplib.Sexp.t
end