from typing import Final

class Bars:
    """
Represents a collection of OHLCV (Open, High, Low, Close, Volume) data
for traditional and Heikin-Ashi bars.

The `Bars` struct contains two vectors: one for standard OHLCV data and
another for Heikin-Ashi bar data. This struct provides an organized way
to manage and manipulate historical price data, facilitating
various analytical and trading strategies.

Attributes:
    ohlcvs (Vec<OHLCV>): A vector containing the standard OHLCV data.
    ha_bars (Vec<OHLCV>): A vector containing Heikin-Ashi OHLCV data.
    """
    @property
    def ha_bars(self): ...
    @property
    def ohlcvs(self): ...
    @property
    def range_bars(self): ...
    @property
    def trades(self): ...
    def write_trades_to_parquet(self, file_path): ...
    def write_ohlcv_to_parquet(self, file_path): ...
    def build_range_bars(self, threshold, is_percentage): ...
    def add_trade(self, trade): ...
    def add_ohlcv(self, ohlcv): ...
    @staticmethod
    def __new__(*args, **kwargs) -> Bars: ...
    def __lt__(self, value): ...
    def __init__(self, *args, **kwargs): ...
    def __hash__(self): ...
    def __eq__(self, value): ...

class OHLCV:
    @property
    def close(self): ...
    @property
    def high(self): ...
    @property
    def low(self): ...
    @property
    def open(self): ...
    @property
    def symbol(self): ...
    @property
    def time(self): ...
    @property
    def timestamp_ms(self): ...
    @property
    def volume(self): ...
    @staticmethod
    def __new__(*args, **kwargs) -> OHLCV: ...
    def __lt__(self, value): ...
    def __init__(self, *args, **kwargs): ...
    def __hash__(self): ...
    def __eq__(self, value): ...

class Side:
    Long: Final[Side]
    Short: Final[Side]
    @staticmethod
    def __new__(*args, **kwargs) -> Side: ...
    def __lt__(self, value): ...
    def __int__(self): ...
    def __init__(self, *args, **kwargs): ...
    def __eq__(self, value): ...

class Trade:
    @property
    def price(self): ...
    @property
    def side(self): ...
    @property
    def size(self): ...
    @property
    def symbol(self): ...
    @property
    def time(self): ...
    @property
    def timestamp_ms(self): ...
    @staticmethod
    def __new__(*args, **kwargs) -> Trade: ...
    def __lt__(self, value): ...
    def __init__(self, *args, **kwargs): ...
    def __hash__(self): ...
    def __eq__(self, value): ...

