sig
  type t = private {
    stamp : Core.Std.Time.t;
    op : Price.t;
    hi : Price.t;
    lo : Price.t;
    cl : Price.t;
    vo : Volume.t;
    wap : Price.t;
    has_gaps : bool;
    n_trades : int;
  }
  val n_trades : Bar.t -> int
  val has_gaps : Bar.t -> bool
  val wap : Bar.t -> Price.t
  val vo : Bar.t -> Volume.t
  val cl : Bar.t -> Price.t
  val lo : Bar.t -> Price.t
  val hi : Bar.t -> Price.t
  val op : Bar.t -> Price.t
  val stamp : Bar.t -> Core.Std.Time.t
  module Fields :
    sig
      val names : string list
      val n_trades : (Bar.t, int) Fieldslib.Field.readonly_t
      val has_gaps : (Bar.t, bool) Fieldslib.Field.readonly_t
      val wap : (Bar.t, Price.t) Fieldslib.Field.readonly_t
      val vo : (Bar.t, Volume.t) Fieldslib.Field.readonly_t
      val cl : (Bar.t, Price.t) Fieldslib.Field.readonly_t
      val lo : (Bar.t, Price.t) Fieldslib.Field.readonly_t
      val hi : (Bar.t, Price.t) Fieldslib.Field.readonly_t
      val op : (Bar.t, Price.t) Fieldslib.Field.readonly_t
      val stamp : (Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t
      val fold :
        init:'acc__ ->
        stamp:('acc__ ->
               (Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        op:('acc__ -> (Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        hi:('acc__ -> (Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        lo:('acc__ -> (Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        cl:('acc__ -> (Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        vo:('acc__ -> (Bar.t, Volume.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        wap:('acc__ -> (Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'acc__) ->
        has_gaps:('acc__ ->
                  (Bar.t, bool) Fieldslib.Field.readonly_t -> 'acc__) ->
        n_trades:('acc__ -> (Bar.t, int) Fieldslib.Field.readonly_t -> 'acc__) ->
        'acc__
      val iter :
        stamp:((Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t -> unit) ->
        op:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> unit) ->
        hi:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> unit) ->
        lo:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> unit) ->
        cl:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> unit) ->
        vo:((Bar.t, Volume.t) Fieldslib.Field.readonly_t -> unit) ->
        wap:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> unit) ->
        has_gaps:((Bar.t, bool) Fieldslib.Field.readonly_t -> unit) ->
        n_trades:((Bar.t, int) Fieldslib.Field.readonly_t -> unit) -> unit
      val for_all :
        stamp:((Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t -> bool) ->
        op:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        hi:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        lo:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        cl:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        vo:((Bar.t, Volume.t) Fieldslib.Field.readonly_t -> bool) ->
        wap:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        has_gaps:((Bar.t, bool) Fieldslib.Field.readonly_t -> bool) ->
        n_trades:((Bar.t, int) Fieldslib.Field.readonly_t -> bool) -> bool
      val exists :
        stamp:((Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t -> bool) ->
        op:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        hi:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        lo:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        cl:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        vo:((Bar.t, Volume.t) Fieldslib.Field.readonly_t -> bool) ->
        wap:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> bool) ->
        has_gaps:((Bar.t, bool) Fieldslib.Field.readonly_t -> bool) ->
        n_trades:((Bar.t, int) Fieldslib.Field.readonly_t -> bool) -> bool
      val to_list :
        stamp:((Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        op:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        hi:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        lo:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        cl:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        vo:((Bar.t, Volume.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        wap:((Bar.t, Price.t) Fieldslib.Field.readonly_t -> 'elem__) ->
        has_gaps:((Bar.t, bool) Fieldslib.Field.readonly_t -> 'elem__) ->
        n_trades:((Bar.t, int) Fieldslib.Field.readonly_t -> 'elem__) ->
        'elem__ list
      val map_poly :
        ([< `Read ], Bar.t, 'x0) Fieldslib.Field.user -> 'x0 list
      module Direct :
        sig
          val iter :
            Bar.t ->
            stamp:((Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t ->
                   Bar.t -> Core.Std.Time.t -> unit) ->
            op:((Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> unit) ->
            hi:((Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> unit) ->
            lo:((Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> unit) ->
            cl:((Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> unit) ->
            vo:((Bar.t, Volume.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Volume.t -> unit) ->
            wap:((Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                 Bar.t -> Price.t -> unit) ->
            has_gaps:((Bar.t, bool) Fieldslib.Field.readonly_t ->
                      Bar.t -> bool -> unit) ->
            n_trades:((Bar.t, int) Fieldslib.Field.readonly_t ->
                      Bar.t -> int -> unit) ->
            unit
          val fold :
            Bar.t ->
            init:'acc__ ->
            stamp:('acc__ ->
                   (Bar.t, Core.Std.Time.t) Fieldslib.Field.readonly_t ->
                   Bar.t -> Core.Std.Time.t -> 'acc__) ->
            op:('acc__ ->
                (Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> 'acc__) ->
            hi:('acc__ ->
                (Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> 'acc__) ->
            lo:('acc__ ->
                (Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> 'acc__) ->
            cl:('acc__ ->
                (Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Price.t -> 'acc__) ->
            vo:('acc__ ->
                (Bar.t, Volume.t) Fieldslib.Field.readonly_t ->
                Bar.t -> Volume.t -> 'acc__) ->
            wap:('acc__ ->
                 (Bar.t, Price.t) Fieldslib.Field.readonly_t ->
                 Bar.t -> Price.t -> 'acc__) ->
            has_gaps:('acc__ ->
                      (Bar.t, bool) Fieldslib.Field.readonly_t ->
                      Bar.t -> bool -> 'acc__) ->
            n_trades:('acc__ ->
                      (Bar.t, int) Fieldslib.Field.readonly_t ->
                      Bar.t -> int -> 'acc__) ->
            'acc__
        end
    end
  val of_raw : Raw_bar.t -> t
  val to_raw : t -> Raw_bar.t
  val create :
    stamp:Core.Std.Time.t ->
    op:Price.t ->
    hi:Price.t ->
    lo:Price.t ->
    cl:Price.t ->
    vo:Volume.t -> wap:Price.t -> has_gaps:bool -> n_trades:int -> Bar.t
  val ( = ) : Bar.t -> Bar.t -> bool
  val combine : Bar.t -> bar:Bar.t -> Bar.t
  val pp : Format.formatter -> Bar.t -> unit
  val t_of_sexp : Sexplib.Sexp.t -> Bar.t
  val sexp_of_t : Bar.t -> Sexplib.Sexp.t
end