Module Algostream_domain_portfolio.Portfolio

module Position = Position
type portfolio = {
  1. account_id : Base.string;
  2. positions : (Base.string, Position.position) Base.Map.Poly.t;
  3. cash_balance : Base.float;
  4. initial_capital : Base.float;
  5. total_commission_paid : Base.float;
  6. created_at : Timestamp.t;
  7. updated_at : Timestamp.t;
  8. strategy_allocations : (Base.string, Base.float) Base.Map.Poly.t;
}
val stamp : Timestamp.t option -> Timestamp.t
val create_portfolio : ?ts:Timestamp.t -> account_id:Base.string -> initial_capital:Base.float -> unit -> portfolio
val get_position : portfolio -> symbol:Base.string -> Position.position option
val has_position : portfolio -> symbol:Base.string -> Base.bool
val add_trade : ?ts:Timestamp.t -> portfolio -> symbol:Base.string -> trade_quantity:Base__Float.t -> trade_price:Base.float -> commission:Base__Float.t -> ?strategy_id:Base.string -> unit -> portfolio
val update_position_prices : ?ts:Timestamp.t -> portfolio -> price_updates:(Base.string, Base__Float.t) Base.Map.Poly.t -> portfolio
val total_market_value : portfolio -> Base__Float.t
val net_asset_value : portfolio -> Base__Float.t
val total_unrealized_pnl : portfolio -> Base__Float.t
val total_realized_pnl : portfolio -> Base__Float.t
val total_pnl : portfolio -> Base__Float.t
val portfolio_return : portfolio -> Base__Float.t
val gross_exposure : portfolio -> Base__Float.t
val net_exposure : portfolio -> Base__Float.t
val leverage : portfolio -> Base__Float.t
val long_exposure : portfolio -> Base__Float.t
val short_exposure : portfolio -> Base__Float.t
val position_count : portfolio -> int
val largest_position : portfolio -> (Base.string * Position.position * Base.Float.t) option
val diversification_ratio : portfolio -> Base__Float.t
module Risk_metrics : sig ... end
module Portfolio_analytics : sig ... end