import pandas as pd

class _FiinIndicator:
    
    class trend:
        class EMA:
            def __init__(self, column: pd.Series, window: int) -> None: ...
            def ema(self) -> pd.Series: ...

        class SMA:
            def __init__(self, column: pd.Series, window: int) -> None: ...
            def sma(self) -> pd.Series: ...

        class WMA:
            def __init__(self, close: pd.Series, window: int = 9) -> None: ...
            def wma(self) -> pd.Series: ...

        class MACD:
            def __init__(self, column: pd.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9) -> None: ...
            def macd(self) -> pd.Series: ...
            def macd_signal(self) -> pd.Series: ...
            def macd_diff(self) -> pd.Series: ...

        class ADX:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> None: ...
            def adx(self) -> pd.Series: ...
            def adx_pos(self) -> pd.Series: ...
            def adx_neg(self) -> pd.Series: ...

        class PSAR:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, step: float = 0.02, max_step = 0.2) -> None: ...
            def psar(self) -> pd.Series: ...

        class Ichimoku:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52): ...
            def ichimoku_a(self) -> pd.Series: ...           
            def ichimoku_b(self) -> pd.Series: ...
            def ichimoku_base_line(self) -> pd.Series: ...
            def ichimoku_conversion_line(self) -> pd.Series: ...
            def ichimoku_lagging_line(self) -> pd.Series: ...

        class CCI:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, constant: float = 0.015) -> None: ...
            def cci(self) -> pd.Series: ...
        
        class Aroon:
            def __init__(self, high: pd.Series, low: pd.Series, window: int = 25) -> None: ...
            def aroon(self) -> pd.Series: ...
            def aroon_up(self) -> pd.Series: ...
            def aroon_down(self) -> pd.Series: ...


    class momentum:
        class RSI:
            def __init__(self, column: pd.Series, window: int = 14) -> None: ...
            def rsi(self) -> pd.Series: ...

        class Stochastic:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14, smooth_window: int = 3) -> None: ...
            def stoch(self) -> pd.Series: ...
            def stoch_signal(self) -> pd.Series: ...


    class volatility:
        class BollingerBands:
            def __init__(self, column: pd.Series, window: int = 20, window_dev: int = 2) -> None: ...
            def bollinger_hband(self) -> pd.Series: ...
            def bollinger_lband(self) -> pd.Series: ...

        class Supertrend:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14, multiplier: float = 3.0) -> None: ...
            def supertrend(self) -> pd.Series: ...
            def supertrend_hband(self) -> pd.Series: ...
            def supertrend_lband(self) -> pd.Series: ...

        class ATR:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> None: ...
            def atr(self) -> pd.Series: ...


    class volume:
        class MFI:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, window: int = 14) -> None: ...
            def mfi(self) -> pd.Series: ...

        class OBV:
            def __init__(self, column: pd.Series, volume: pd.Series) -> None: ...
            def obv(self) -> pd.Series: ...

        class VWAP:
            def __init__(self, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, window: int = 14) -> None: ...
            def vwap(self) -> pd.Series: ...
    

    class smart_money_concepts:
        class FVG:
            def __init__(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, join_consecutive: bool = True) -> None: ...
            def fvg(self) -> pd.Series: ...
            def fvg_top(self) -> pd.Series: ...
            def fvg_bottom(self) -> pd.Series: ...
            def fvg_mitigatedIndex(self) -> pd.Series: ...

        class Swing_Highs_Lows:
            def __init__(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, swing_length: int = 50) -> None: ...
            def swing_HL(self) -> pd.Series: ...
            def swing_level(self) -> pd.Series: ...

        class Break_Of_Structure_And_Change_Of_Charactor:
            def __init__(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, close_break: bool = True, swing_length: int = 50) -> None: ...
            def break_of_structure(self) -> pd.Series: ...
            def chage_of_charactor(self) -> pd.Series: ...
            def bos_choch_level(self) -> pd.Series: ...
            def broken_index(self) -> pd.Series: ...

        class Oder_Blocks:
            def __init__(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> None: ...
            def top(self) -> pd.Series: ...
            def bottom(self) -> pd.Series: ...    
            def ob_volume(self) -> pd.Series: ...
            def mitigated_index(self) -> pd.Series: ...
            def percetage(self) -> pd.Series: ...

        class Liquidity:
            def __init__(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, range_percent: float = 0.01, swing_length: int = 50) -> None: ...
            def liquidity(self) -> pd.Series: ...
            def liquidity_level(self) -> pd.Series: ...
            def liquidity_end(self) -> pd.Series: ...
            def liquidity_swept(self) -> pd.Series: ...
    
    
    
    
    ##### Function
    
    #### Trend
    def ema(self, column: pd.Series, window: int) -> pd.Series: ...

    def sma(self, column: pd.Series, window: int) -> pd.Series: ...
    
    def wma(self, column: pd.Series, window: int) -> pd.Series: ...

    def macd(self, column: pd.Series, window_slow: int = 26, window_fast: int = 12) -> pd.Series: ...
    
    def macd_signal(self, column: pd.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9) -> pd.Series: ...
    
    def macd_diff(self, column: pd.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9) -> pd.Series: ...
    
    def adx(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> pd.Series: ...
    
    def adx_pos(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> pd.Series: ...
    
    def adx_neg(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> pd.Series: ...
    
    def psar(self, high: pd.Series, low: pd.Series, close: pd.Series, step: float = 0.02, max_step: float = 0.2) -> pd.Series: ...

    def ichimoku_a(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...

    def ichimoku_b(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
    
    def ichimoku_base_line(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...

    def ichimoku_conversion_line(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...
    
    def ichimoku_lagging_line(self, high: pd.Series, low: pd.Series, close: pd.Series, window1: int = 9, window2: int = 26, window3: int = 52) -> pd.Series: ...

    def cci(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 20, constant: float = 0.015) -> pd.Series: ...

    def aroon(self, high: pd.Series, low: pd.Series, window: int = 25) -> pd.Series: ...
    
    def aroon_up(self, high: pd.Series, low: pd.Series, window: int = 25) -> pd.Series: ...
    
    def aroon_down(self, high: pd.Series, low: pd.Series, window: int = 25) -> pd.Series: ...

    
    #### Momentum
    def rsi(self, column: pd.Series, window: int = 14) -> pd.Series: ...

    def stoch(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> pd.Series: ...
  
    def stoch_signal(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14, smooth_window: int = 3) -> pd.Series: ...
    
    
    #### Volatility
    def bollinger_hband(self, column: pd.Series, window: int = 20, window_dev: int = 2) -> pd.Series: ...
    
    def bollinger_lband(self, column: pd.Series, window: int = 20, window_dev: int = 2) -> pd.Series: ...
    
    def supertrend(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14, multiplier: float = 3.0) -> pd.Series: ...
    
    def supertrend_hband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14, multiplier: float = 3.0) -> pd.Series: ...
   
    def supertrend_lband(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14, multiplier: float = 3.0) -> pd.Series: ...

    def atr(self, high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> pd.Series: ...
   

    #### Volume
    def mfi(self, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, window: int = 14) -> pd.Series: ...
  
    def obv(self, column: pd.Series, volume: pd.Series) -> pd.Series: ...

    def vwap(self, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, window: int = 14) -> pd.Series: ...

    
    #### smart_money_concepts
    def fvg(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, join_consecutive: bool = True) -> pd.Series: ...
    
    def fvg_top(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, join_consecutive: bool = True) -> pd.Series: ...
    
    def fvg_bottom(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, join_consecutive: bool = True) -> pd.Series: ...
    
    def fvg_mitigatedIndex(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, join_consecutive: bool = True) -> pd.Series: ...
    
    def swing_HL(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, swing_length: int = 50) -> pd.Series: ...
    
    def swing_level(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, swing_length: int = 50) -> pd.Series: ...
    
    def break_of_structure(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, close_break: bool = True, swing_length: int = 50) -> pd.Series: ...
    
    def chage_of_charactor(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, close_break: bool = True, swing_length: int = 50) -> pd.Series: ...
    
    def bos_choch_level(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, close_break: bool = True, swing_length: int = 50) -> pd.Series: ...
    
    def broken_index(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, close_break: bool = True, swing_length: int = 50) -> pd.Series: ...
    
    def ob(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> pd.Series: ...
    
    def ob_top(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> pd.Series: ...
    
    def ob_bottom(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> pd.Series: ...
    
    def ob_volume(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> pd.Series: ...
    
    def ob_mitigated_index(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> pd.Series: ...
    
    def ob_percetage(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, volume: pd.Series, close_mitigation: bool = False, swing_length: int = 50) -> pd.Series: ...
    
    def liquidity(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, range_percent: float = 0.01, swing_length: int = 50) -> pd.Series: ...
    
    def liquidity_level(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, range_percent: float = 0.01, swing_length: int = 50) -> pd.Series: ...
    
    def liquidity_end(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, range_percent: float = 0.01, swing_length: int = 50) -> pd.Series: ...
    
    def liquidity_swept(self, open: pd.Series, high: pd.Series, low: pd.Series, close: pd.Series, range_percent: float = 0.01, swing_length: int = 50) -> pd.Series: ...
     