Module Algostream_domain_pairs.Pair

type pair_relationship =
  1. | Cointegrated of {
    1. half_life : Base.float;
    2. hedge_ratio : Base.float;
    3. adf_statistic : Base.float;
    4. p_value : Base.float;
    }
  2. | Correlated of {
    1. correlation : Base.float;
    2. rolling_window : Base.int;
    3. significance_level : Base.float;
    }
type pair_state =
  1. | Normal
  2. | Diverged of {
    1. z_score : Base.float;
    2. entry_time : Timestamp.t;
    }
  3. | Converging of {
    1. z_score : Base.float;
    2. entry_time : Timestamp.t;
    }
  4. | Position_open of {
    1. long_symbol : Base.string;
    2. short_symbol : Base.string;
    3. entry_spread : Base.float;
    4. entry_time : Timestamp.t;
    }
type trading_pair = {
  1. symbol_a : Base.string;
  2. symbol_b : Base.string;
  3. relationship : pair_relationship;
  4. current_state : pair_state;
  5. spread_series : Base.float Base.list;
  6. z_score_series : Base.float Base.list;
  7. entry_threshold : Base.float;
  8. exit_threshold : Base.float;
  9. stop_loss_threshold : Base.float;
  10. lookback_window : Base.int;
  11. created_at : Timestamp.t;
  12. updated_at : Timestamp.t;
}
val create_pair : symbol_a:Base.string -> symbol_b:Base.string -> relationship:pair_relationship -> entry_threshold:Base.float -> exit_threshold:Base.float -> stop_loss_threshold:Base.float -> lookback_window:Base.int -> trading_pair
val calculate_spread : trading_pair -> price_a:Base__Float.t -> price_b:Base__Float.t -> Base__Float.t
val calculate_z_score : Base__Float.t Base.List.t -> Base__Float.t
val update_pair_data : trading_pair -> price_a:Base__Float.t -> price_b:Base__Float.t -> trading_pair
val should_enter_trade : trading_pair -> Base.float option
val should_exit_trade : trading_pair -> bool
val get_trade_signal : trading_pair -> ([> `Long of Base.string | `Short of Base.string ] * [> `Long of Base.string | `Short of Base.string ]) option
module Statistics : sig ... end
module Pair_analytics : sig ... end