# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501

import enum
import typing

from nautilus_trader import model

__all__ = [
    "AdaptiveMovingAverage",
    "ArcherMovingAveragesTrends",
    "AroonOscillator",
    "AverageTrueRange",
    "Bias",
    "BollingerBands",
    "BookImbalanceRatio",
    "CandleBodySize",
    "CandleDirection",
    "CandleSize",
    "CandleWickSize",
    "ChandeMomentumOscillator",
    "CommodityChannelIndex",
    "DirectionalMovement",
    "DonchianChannel",
    "DoubleExponentialMovingAverage",
    "EfficiencyRatio",
    "ExponentialMovingAverage",
    "FuzzyCandle",
    "FuzzyCandlesticks",
    "HullMovingAverage",
    "IchimokuCloud",
    "KeltnerChannel",
    "KeltnerPosition",
    "KlingerVolumeOscillator",
    "LinearRegression",
    "MovingAverageConvergenceDivergence",
    "MovingAverageType",
    "OnBalanceVolume",
    "Pressure",
    "PsychologicalLine",
    "RateOfChange",
    "RelativeStrengthIndex",
    "RelativeVolatilityIndex",
    "SimpleMovingAverage",
    "SpreadAnalyzer",
    "Stochastics",
    "StochasticsDMethod",
    "Swings",
    "VariableIndexDynamicAverage",
    "VerticalHorizontalFilter",
    "VolatilityRatio",
    "VolumeWeightedAveragePrice",
    "WeightedMovingAverage",
    "WilderMovingAverage",
    "ZScore",
]

@typing.final
class AdaptiveMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period_efficiency_ratio(self) -> int: ...
    @property
    def period_fast(self) -> int: ...
    @property
    def period_slow(self) -> int: ...
    @property
    def alpha_fast(self) -> float: ...
    @property
    def alpha_slow(self) -> float: ...
    @property
    def alpha_diff(self) -> float: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def value(self) -> float: ...
    @property
    def count(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls,
        period_efficiency_ratio: int,
        period_fast: int,
        period_slow: int,
        price_type: model.PriceType | None = None,
    ) -> AdaptiveMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class ArcherMovingAveragesTrends:
    def __init__(
        self,
        fast_period: int,
        slow_period: int,
        signal_period: int,
        ma_type: MovingAverageType | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def fast_period(self) -> int: ...
    @property
    def slow_period(self) -> int: ...
    @property
    def signal_period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def long_run(self) -> bool: ...
    @property
    def short_run(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class AroonOscillator:
    def __init__(self, period: int) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def count(self) -> int: ...
    @property
    def aroon_up(self) -> float: ...
    @property
    def aroon_down(self) -> float: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class AverageTrueRange:
    def __init__(
        self,
        period: int,
        ma_type: MovingAverageType | None = None,
        use_previous: bool | None = None,
        value_floor: float | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class Bias:
    def __init__(self, period: int, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class BollingerBands:
    def __init__(self, period: int, k: float, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def k(self) -> float: ...
    @property
    def upper(self) -> float: ...
    @property
    def middle(self) -> float: ...
    @property
    def lower(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class BookImbalanceRatio:
    def __init__(self) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def handle_book(self, book: model.OrderBook) -> None: ...
    def update(
        self, best_bid: model.Quantity | None = None, best_ask: model.Quantity | None = None
    ) -> None: ...
    def reset(self) -> None: ...

@typing.final
class ChandeMomentumOscillator:
    def __init__(self, period: int, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class CommodityChannelIndex:
    def __init__(
        self, period: int, scalar: float, ma_type: MovingAverageType | None = None
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def scalar(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class DirectionalMovement:
    def __init__(self, period: int, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def pos(self) -> float: ...
    @property
    def neg(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class DonchianChannel:
    def __init__(self, period: int) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def upper(self) -> float: ...
    @property
    def middle(self) -> float: ...
    @property
    def lower(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class DoubleExponentialMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls, period: int, price_type: model.PriceType | None = None
    ) -> DoubleExponentialMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class EfficiencyRatio:
    def __init__(self, period: int, price_type: model.PriceType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    @property
    def has_inputs(self) -> bool: ...
    def update_raw(self, value: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class ExponentialMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def alpha(self) -> float: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls, period: int, price_type: model.PriceType | None = None
    ) -> ExponentialMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class FuzzyCandle:
    def __init__(
        self,
        direction: CandleDirection,
        size: CandleSize,
        body_size: CandleBodySize,
        upper_wick_size: CandleWickSize,
        lower_wick_size: CandleWickSize,
    ) -> None: ...
    @property
    def direction(self) -> CandleDirection: ...
    @property
    def size(self) -> CandleSize: ...
    @property
    def body_size(self) -> CandleBodySize: ...
    @property
    def upper_wick_size(self) -> CandleWickSize: ...
    @property
    def lower_wick_size(self) -> CandleWickSize: ...

@typing.final
class FuzzyCandlesticks:
    def __init__(
        self,
        period: int,
        threshold1: float,
        threshold2: float,
        threshold3: float,
        threshold4: float,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def threshold1(self) -> float: ...
    @property
    def threshold2(self) -> float: ...
    @property
    def threshold3(self) -> float: ...
    @property
    def threshold4(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> FuzzyCandle: ...
    @property
    def vector(self) -> list[int]: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, open: float, high: float, low: float, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class HullMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls, period: int, price_type: model.PriceType | None = None
    ) -> HullMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class IchimokuCloud:
    def __init__(
        self,
        tenkan_period: int = 9,
        kijun_period: int = 26,
        senkou_period: int = 52,
        displacement: int = 26,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def tenkan_period(self) -> int: ...
    @property
    def kijun_period(self) -> int: ...
    @property
    def senkou_period(self) -> int: ...
    @property
    def displacement(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def tenkan_sen(self) -> float: ...
    @property
    def kijun_sen(self) -> float: ...
    @property
    def senkou_span_a(self) -> float: ...
    @property
    def senkou_span_b(self) -> float: ...
    @property
    def chikou_span(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class KeltnerChannel:
    def __init__(
        self,
        period: int,
        k_multiplier: float,
        ma_type: MovingAverageType | None = None,
        ma_type_atr: MovingAverageType | None = None,
        use_previous: bool | None = None,
        atr_floor: float | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def k_multiplier(self) -> float: ...
    @property
    def use_previous(self) -> bool: ...
    @property
    def atr_floor(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def upper(self) -> float: ...
    @property
    def middle(self) -> float: ...
    @property
    def lower(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class KeltnerPosition:
    def __init__(
        self,
        period: int,
        k_multiplier: float,
        ma_type: MovingAverageType | None = None,
        ma_type_atr: MovingAverageType | None = None,
        use_previous: bool | None = None,
        atr_floor: float | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def k_multiplier(self) -> float: ...
    @property
    def use_previous(self) -> bool: ...
    @property
    def atr_floor(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class KlingerVolumeOscillator:
    def __init__(
        self,
        fast_period: int,
        slow_period: int,
        signal_period: int,
        ma_type: MovingAverageType | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def fast_period(self) -> int: ...
    @property
    def slow_period(self) -> int: ...
    @property
    def signal_period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float, volume: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class LinearRegression:
    def __init__(self, period: int) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def slope(self) -> float: ...
    @property
    def intercept(self) -> float: ...
    @property
    def degree(self) -> float: ...
    @property
    def cfo(self) -> float: ...
    @property
    def r2(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class MovingAverageConvergenceDivergence:
    def __init__(
        self,
        fast_period: int,
        slow_period: int,
        ma_type: MovingAverageType | None = None,
        price_type: model.PriceType | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def fast_period(self) -> int: ...
    @property
    def slow_period(self) -> int: ...
    @property
    def count(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    @property
    def value(self) -> float: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, close: float) -> None: ...

@typing.final
class OnBalanceVolume:
    def __init__(self, period: int) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, open: float, close: float, volume: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class Pressure:
    def __init__(
        self, period: int, ma_type: MovingAverageType | None = None, atr_floor: float | None = None
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def value_cumulative(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float, volume: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class PsychologicalLine:
    def __init__(self, period: int, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class RateOfChange:
    def __init__(self, period: int, use_log: bool | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def use_log(self) -> bool: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, price: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class RelativeStrengthIndex:
    def __init__(self, period: int, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, value: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def reset(self) -> None: ...

@typing.final
class RelativeVolatilityIndex:
    def __init__(
        self, period: int, scalar: float | None = None, ma_type: MovingAverageType | None = None
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def scalar(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class SimpleMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls, period: int, price_type: model.PriceType | None = None
    ) -> SimpleMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class SpreadAnalyzer:
    @property
    def name(self) -> str: ...
    @property
    def capacity(self) -> int: ...
    @property
    def instrument_id(self) -> model.InstrumentId: ...
    @property
    def current(self) -> float: ...
    @property
    def average(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    @property
    def has_inputs(self) -> bool: ...
    def __new__(cls, instrument_id: model.InstrumentId, capacity: int) -> SpreadAnalyzer: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def reset(self) -> None: ...

@typing.final
class Stochastics:
    def __init__(
        self,
        period_k: int,
        period_d: int,
        slowing: int | None = None,
        ma_type: MovingAverageType | None = None,
        d_method: StochasticsDMethod | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period_k(self) -> int: ...
    @property
    def period_d(self) -> int: ...
    @property
    def slowing(self) -> int: ...
    @property
    def ma_type(self) -> MovingAverageType: ...
    @property
    def d_method(self) -> StochasticsDMethod: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value_k(self) -> float: ...
    @property
    def value_d(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class Swings:
    def __init__(self, period: int) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def direction(self) -> int: ...
    @property
    def changed(self) -> bool: ...
    @property
    def high_datetime(self) -> float: ...
    @property
    def low_datetime(self) -> float: ...
    @property
    def high_price(self) -> float: ...
    @property
    def low_price(self) -> float: ...
    @property
    def length(self) -> int: ...
    @property
    def duration(self) -> int: ...
    @property
    def since_high(self) -> int: ...
    @property
    def since_low(self) -> int: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, timestamp: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class VariableIndexDynamicAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def count(self) -> int: ...
    @property
    def alpha(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    @property
    def cmo_pct(self) -> float: ...
    @property
    def value(self) -> float: ...
    def __new__(
        cls,
        period: int,
        price_type: model.PriceType | None = None,
        cmo_ma_type: MovingAverageType | None = None,
    ) -> VariableIndexDynamicAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class VerticalHorizontalFilter:
    def __init__(self, period: int, ma_type: MovingAverageType | None = None) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class VolatilityRatio:
    def __init__(
        self,
        fast_period: int,
        slow_period: int,
        use_previous: bool | None = None,
        value_floor: float | None = None,
        ma_type: MovingAverageType | None = None,
    ) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def fast_period(self) -> int: ...
    @property
    def slow_period(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def use_previous(self) -> bool: ...
    @property
    def value_floor(self) -> float: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def update_raw(self, high: float, low: float, close: float) -> None: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...

@typing.final
class VolumeWeightedAveragePrice:
    def __init__(self) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def value(self) -> float: ...
    @property
    def initialized(self) -> bool: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float, volume: float, ts: float) -> None: ...

@typing.final
class WeightedMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def value(self) -> float: ...
    @property
    def weights(self) -> list[float]: ...
    @property
    def count(self) -> int: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls, period: int, weights: typing.Sequence[float], price_type: model.PriceType | None = None
    ) -> WeightedMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class WilderMovingAverage:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def alpha(self) -> float: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(
        cls, period: int, price_type: model.PriceType | None = None
    ) -> WilderMovingAverage: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class ZScore:
    @property
    def name(self) -> str: ...
    @property
    def period(self) -> int: ...
    @property
    def price_type(self) -> model.PriceType: ...
    @property
    def count(self) -> int: ...
    @property
    def value(self) -> float: ...
    @property
    def mean(self) -> float: ...
    @property
    def std(self) -> float: ...
    @property
    def has_inputs(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    def __new__(cls, period: int, price_type: model.PriceType | None = None) -> ZScore: ...
    def handle_quote_tick(self, quote: model.QuoteTick) -> None: ...
    def handle_trade_tick(self, trade: model.TradeTick) -> None: ...
    def handle_bar(self, bar: model.Bar) -> None: ...
    def reset(self) -> None: ...
    def update_raw(self, value: float) -> None: ...

@typing.final
class CandleBodySize(enum.Enum):
    None_ = ...
    Small = ...
    Medium = ...
    Large = ...
    Trend = ...

@typing.final
class CandleDirection(enum.Enum):
    Bull = ...
    None_ = ...
    Bear = ...

@typing.final
class CandleSize(enum.Enum):
    None_ = ...
    VerySmall = ...
    Small = ...
    Medium = ...
    Large = ...
    VeryLarge = ...
    ExtremelyLarge = ...

@typing.final
class CandleWickSize(enum.Enum):
    None_ = ...
    Small = ...
    Medium = ...
    Large = ...

@typing.final
class MovingAverageType(enum.Enum):
    Simple = ...
    Exponential = ...
    DoubleExponential = ...
    Wilder = ...
    Hull = ...

@typing.final
class StochasticsDMethod(enum.Enum):
    Ratio = ...
    MovingAverage = ...
