"""
Analytics endpoint mixins.

AUTO-GENERATED by scripts/generate_sdk.py - DO NOT EDIT MANUALLY!
Regenerate with: python scripts/generate_sdk.py --category analytics
"""
from __future__ import annotations

from typing import Any, Dict, List, Optional, Union


class _AnalyticsMethodsMixin:
    """annual_returns, annual_volatility, average_drawdown, batch, best_period, burke_ratio, capture_ratio, cumulative_performance, downside_capture, downside_deviation, drawdown, drawdown_duration, egarch_volatility, factor_attribution, factor_regression, gain_loss_ratio, garch_forecast, garch_volatility, hurst_exponent, info, list, log_returns, max_drawdown, momentum, monthly_returns, monthly_volatility, omega_ratio, pain_index, profit_factor, rate_of_change, relative_strength, returns, rolling_alpha, rolling_autocorrelation, rolling_beta, rolling_beta_timing, rolling_cagr, rolling_calmar, rolling_correlation, rolling_covariance, rolling_cvar, rolling_downside_beta, rolling_factor_regression, rolling_garch, rolling_information_ratio, rolling_kurtosis, rolling_r_squared, rolling_regression, rolling_residuals, rolling_sharpe, rolling_skewness, rolling_sortino, rolling_treynor, rolling_upside_beta, rolling_var, rolling_variance, rolling_volatility, semi_deviation, semi_variance, sterling_ratio, tail_ratio, tracking_error, tracking_error_volatility, ulcer_index, upside_capture, upside_deviation, win_rate, worst_period."""

    def annual_returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Annualized returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return self._call_analytics("annual_returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def annual_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Annualized volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("annual_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def average_drawdown(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Average drawdown"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None:
            _payload["period"] = period
        return self._call_analytics("average_drawdown", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def batch(
        self,
        *,
        operations: List[Any],
        currency: Optional[str] = None,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        total_return: Optional[str] = None,
        TR: Optional[str] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Batch analytics

        Execute multiple analytics functions in one call.

        Args:
        operations: List of operations [{function, params}]
        identifiers: List of TepiloraCodes
        prices: Shared prices data
        start_date: Start date (YYYY-MM-DD)
        end_date: End date (YYYY-MM-DD)"""
        _payload: Dict[str, Any] = dict(extra_params)
        _payload["operations"] = operations
        if currency is not None:
            _payload["currency"] = currency
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if total_return is not None:
            _payload["total_return"] = total_return
        if TR is not None:
            _payload["TR"] = TR
        return self._call_analytics("batch", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def best_period(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        n_periods: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Best period return"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if n_periods is not None and (not strict or n_periods != 20):
            _payload["n_periods"] = n_periods
        return self._call_analytics("best_period", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def burke_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Burke ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("burke_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def capture_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Up/down capture ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("capture_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def cumulative_performance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        base: Optional[float] = 100.0,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Cumulative performance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if base is not None and (not strict or base != 100.0):
            _payload["base"] = base
        return self._call_analytics("cumulative_performance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def downside_capture(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Downside capture"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("downside_capture", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def downside_deviation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        MAR: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Downside deviation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if MAR is not None and (not strict or MAR != 0.0):
            _payload["MAR"] = MAR
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("downside_deviation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def drawdown(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Drawdown series"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return self._call_analytics("drawdown", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def drawdown_duration(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Drawdown duration"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return self._call_analytics("drawdown_duration", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def egarch_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        p: Optional[int] = 1,
        o: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """EGARCH volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if o is not None and (not strict or o != 1):
            _payload["o"] = o
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("egarch_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def factor_attribution(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        factors: Optional[Dict[str, Any]] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        model: Optional[str] = "custom",
        use_excess_returns: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Factor attribution"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if factors is not None:
            _payload["factors"] = factors
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if model is not None and (not strict or model != "custom"):
            _payload["model"] = model
        if use_excess_returns is not None and (not strict or use_excess_returns != True):
            _payload["use_excess_returns"] = use_excess_returns
        return self._call_analytics("factor_attribution", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def factor_regression(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        factors: Optional[Dict[str, Any]] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        model: Optional[str] = "custom",
        annualize_alpha: Optional[bool] = True,
        use_excess_returns: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Factor regression (FF3/FF5)"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if factors is not None:
            _payload["factors"] = factors
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if model is not None and (not strict or model != "custom"):
            _payload["model"] = model
        if annualize_alpha is not None and (not strict or annualize_alpha != True):
            _payload["annualize_alpha"] = annualize_alpha
        if use_excess_returns is not None and (not strict or use_excess_returns != True):
            _payload["use_excess_returns"] = use_excess_returns
        return self._call_analytics("factor_regression", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def gain_loss_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Gain/loss ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("gain_loss_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def garch_forecast(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        horizon: Optional[int] = 5,
        p: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """GARCH forecast"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if horizon is not None and (not strict or horizon != 5):
            _payload["horizon"] = horizon
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("garch_forecast", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def garch_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        p: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """GARCH volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("garch_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def hurst_exponent(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Hurst exponent"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("hurst_exponent", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def info(
        self,
        *,
        function: str,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Get function info

        Get detailed info about an analytics function.

        Args:
        function: Function name"""
        _payload: Dict[str, Any] = dict(extra_params)
        _payload["function"] = function
        return self._call_analytics("info", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def list(
        self,
        *,
        category: Optional[str] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """List analytics functions

        List available analytics functions.

        Args:
        category: Filter by category"""
        _payload: Dict[str, Any] = dict(extra_params)
        if category is not None:
            _payload["category"] = category
        return self._call_analytics("list", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def log_returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Log returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return self._call_analytics("log_returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def max_drawdown(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Maximum drawdown"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None:
            _payload["period"] = period
        return self._call_analytics("max_drawdown", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def momentum(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Momentum indicator"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 20):
            _payload["period"] = period
        return self._call_analytics("momentum", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def monthly_returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Monthly returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return self._call_analytics("monthly_returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def monthly_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Monthly volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("monthly_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def omega_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Omega ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        return self._call_analytics("omega_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def pain_index(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Pain index"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("pain_index", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def profit_factor(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Profit factor"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("profit_factor", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rate_of_change(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rate of change"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 20):
            _payload["period"] = period
        return self._call_analytics("rate_of_change", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def relative_strength(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 20,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Relative strength"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 20):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("relative_strength", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Simple returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return self._call_analytics("returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_alpha(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling alpha"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        return self._call_analytics("rolling_alpha", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_autocorrelation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        lag: Optional[int] = 1,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling autocorrelation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if lag is not None and (not strict or lag != 1):
            _payload["lag"] = lag
        return self._call_analytics("rolling_autocorrelation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_beta(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling beta"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("rolling_beta", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_beta_timing(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling beta timing"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("rolling_beta_timing", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_cagr(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling CAGR"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("rolling_cagr", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_calmar(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Calmar ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_calmar", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_correlation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        min_samples: Optional[int] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling correlation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if min_samples is not None:
            _payload["min_samples"] = min_samples
        return self._call_analytics("rolling_correlation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_covariance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        min_samples: Optional[int] = None,
        Annualized: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling covariance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if min_samples is not None:
            _payload["min_samples"] = min_samples
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_covariance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_cvar(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        confidence: Optional[float] = 0.95,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling CVaR (Expected Shortfall)"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if confidence is not None and (not strict or confidence != 0.95):
            _payload["confidence"] = confidence
        return self._call_analytics("rolling_cvar", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_downside_beta(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling downside beta"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("rolling_downside_beta", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_factor_regression(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        factors: Optional[Dict[str, Any]] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        model: Optional[str] = "custom",
        period: Optional[int] = 260,
        Obs: Optional[Any] = "",
        annualize_alpha: Optional[bool] = True,
        use_excess_returns: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling factor regression"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if factors is not None:
            _payload["factors"] = factors
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if model is not None and (not strict or model != "custom"):
            _payload["model"] = model
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if annualize_alpha is not None and (not strict or annualize_alpha != True):
            _payload["annualize_alpha"] = annualize_alpha
        if use_excess_returns is not None and (not strict or use_excess_returns != True):
            _payload["use_excess_returns"] = use_excess_returns
        return self._call_analytics("rolling_factor_regression", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_garch(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        p: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling GARCH"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_garch", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_information_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling information ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_information_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_kurtosis(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        excess: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling kurtosis"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if excess is not None and (not strict or excess != True):
            _payload["excess"] = excess
        return self._call_analytics("rolling_kurtosis", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_r_squared(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling R-squared"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("rolling_r_squared", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_regression(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling regression"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        return self._call_analytics("rolling_regression", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_residuals(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling residuals"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("rolling_residuals", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_sharpe(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Sharpe ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_sharpe", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_skewness(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling skewness"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("rolling_skewness", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_sortino(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        MAR: Optional[float] = 0.0,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Sortino ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if MAR is not None and (not strict or MAR != 0.0):
            _payload["MAR"] = MAR
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_sortino", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_treynor(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Treynor ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_treynor", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_upside_beta(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling upside beta"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("rolling_upside_beta", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_var(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        confidence: Optional[float] = 0.95,
        method: Optional[str] = "historical",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Value at Risk"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if confidence is not None and (not strict or confidence != 0.95):
            _payload["confidence"] = confidence
        if method is not None and (not strict or method != "historical"):
            _payload["method"] = method
        return self._call_analytics("rolling_var", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_variance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling variance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_variance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def rolling_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("rolling_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def semi_deviation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Semi-deviation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("semi_deviation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def semi_variance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Semi-variance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("semi_variance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def sterling_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Sterling ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("sterling_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def tail_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        percentile: Optional[float] = 5.0,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Tail ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if percentile is not None and (not strict or percentile != 5.0):
            _payload["percentile"] = percentile
        return self._call_analytics("tail_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def tracking_error(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Tracking error"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return self._call_analytics("tracking_error", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def tracking_error_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Tracking error volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("tracking_error_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def ulcer_index(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Ulcer index"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("ulcer_index", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def upside_capture(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Upside capture"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return self._call_analytics("upside_capture", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def upside_deviation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Upside deviation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return self._call_analytics("upside_deviation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def win_rate(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Win rate (% positive periods)"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return self._call_analytics("win_rate", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    def worst_period(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        n_periods: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Worst period return"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if n_periods is not None and (not strict or n_periods != 20):
            _payload["n_periods"] = n_periods
        return self._call_analytics("worst_period", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)



class _AsyncAnalyticsMethodsMixin:
    """annual_returns, annual_volatility, average_drawdown, batch, best_period, burke_ratio, capture_ratio, cumulative_performance, downside_capture, downside_deviation, drawdown, drawdown_duration, egarch_volatility, factor_attribution, factor_regression, gain_loss_ratio, garch_forecast, garch_volatility, hurst_exponent, info, list, log_returns, max_drawdown, momentum, monthly_returns, monthly_volatility, omega_ratio, pain_index, profit_factor, rate_of_change, relative_strength, returns, rolling_alpha, rolling_autocorrelation, rolling_beta, rolling_beta_timing, rolling_cagr, rolling_calmar, rolling_correlation, rolling_covariance, rolling_cvar, rolling_downside_beta, rolling_factor_regression, rolling_garch, rolling_information_ratio, rolling_kurtosis, rolling_r_squared, rolling_regression, rolling_residuals, rolling_sharpe, rolling_skewness, rolling_sortino, rolling_treynor, rolling_upside_beta, rolling_var, rolling_variance, rolling_volatility, semi_deviation, semi_variance, sterling_ratio, tail_ratio, tracking_error, tracking_error_volatility, ulcer_index, upside_capture, upside_deviation, win_rate, worst_period."""

    async def annual_returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Annualized returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return await self._call_analytics("annual_returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def annual_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Annualized volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("annual_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def average_drawdown(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Average drawdown"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None:
            _payload["period"] = period
        return await self._call_analytics("average_drawdown", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def batch(
        self,
        *,
        operations: List[Any],
        currency: Optional[str] = None,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        total_return: Optional[str] = None,
        TR: Optional[str] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Batch analytics

        Execute multiple analytics functions in one call.

        Args:
        operations: List of operations [{function, params}]
        identifiers: List of TepiloraCodes
        prices: Shared prices data
        start_date: Start date (YYYY-MM-DD)
        end_date: End date (YYYY-MM-DD)"""
        _payload: Dict[str, Any] = dict(extra_params)
        _payload["operations"] = operations
        if currency is not None:
            _payload["currency"] = currency
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if total_return is not None:
            _payload["total_return"] = total_return
        if TR is not None:
            _payload["TR"] = TR
        return await self._call_analytics("batch", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def best_period(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        n_periods: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Best period return"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if n_periods is not None and (not strict or n_periods != 20):
            _payload["n_periods"] = n_periods
        return await self._call_analytics("best_period", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def burke_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Burke ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("burke_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def capture_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Up/down capture ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("capture_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def cumulative_performance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        base: Optional[float] = 100.0,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Cumulative performance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if base is not None and (not strict or base != 100.0):
            _payload["base"] = base
        return await self._call_analytics("cumulative_performance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def downside_capture(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Downside capture"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("downside_capture", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def downside_deviation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        MAR: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Downside deviation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if MAR is not None and (not strict or MAR != 0.0):
            _payload["MAR"] = MAR
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("downside_deviation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def drawdown(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Drawdown series"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return await self._call_analytics("drawdown", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def drawdown_duration(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Drawdown duration"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return await self._call_analytics("drawdown_duration", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def egarch_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        p: Optional[int] = 1,
        o: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """EGARCH volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if o is not None and (not strict or o != 1):
            _payload["o"] = o
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("egarch_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def factor_attribution(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        factors: Optional[Dict[str, Any]] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        model: Optional[str] = "custom",
        use_excess_returns: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Factor attribution"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if factors is not None:
            _payload["factors"] = factors
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if model is not None and (not strict or model != "custom"):
            _payload["model"] = model
        if use_excess_returns is not None and (not strict or use_excess_returns != True):
            _payload["use_excess_returns"] = use_excess_returns
        return await self._call_analytics("factor_attribution", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def factor_regression(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        factors: Optional[Dict[str, Any]] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        model: Optional[str] = "custom",
        annualize_alpha: Optional[bool] = True,
        use_excess_returns: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Factor regression (FF3/FF5)"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if factors is not None:
            _payload["factors"] = factors
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if model is not None and (not strict or model != "custom"):
            _payload["model"] = model
        if annualize_alpha is not None and (not strict or annualize_alpha != True):
            _payload["annualize_alpha"] = annualize_alpha
        if use_excess_returns is not None and (not strict or use_excess_returns != True):
            _payload["use_excess_returns"] = use_excess_returns
        return await self._call_analytics("factor_regression", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def gain_loss_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Gain/loss ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("gain_loss_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def garch_forecast(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        horizon: Optional[int] = 5,
        p: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """GARCH forecast"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if horizon is not None and (not strict or horizon != 5):
            _payload["horizon"] = horizon
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("garch_forecast", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def garch_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        p: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """GARCH volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("garch_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def hurst_exponent(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Hurst exponent"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("hurst_exponent", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def info(
        self,
        *,
        function: str,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Get function info

        Get detailed info about an analytics function.

        Args:
        function: Function name"""
        _payload: Dict[str, Any] = dict(extra_params)
        _payload["function"] = function
        return await self._call_analytics("info", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def list(
        self,
        *,
        category: Optional[str] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """List analytics functions

        List available analytics functions.

        Args:
        category: Filter by category"""
        _payload: Dict[str, Any] = dict(extra_params)
        if category is not None:
            _payload["category"] = category
        return await self._call_analytics("list", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def log_returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Log returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return await self._call_analytics("log_returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def max_drawdown(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Maximum drawdown"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None:
            _payload["period"] = period
        return await self._call_analytics("max_drawdown", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def momentum(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Momentum indicator"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 20):
            _payload["period"] = period
        return await self._call_analytics("momentum", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def monthly_returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Monthly returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return await self._call_analytics("monthly_returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def monthly_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Monthly volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("monthly_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def omega_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Omega ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        return await self._call_analytics("omega_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def pain_index(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Pain index"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("pain_index", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def profit_factor(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Profit factor"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("profit_factor", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rate_of_change(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rate of change"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 20):
            _payload["period"] = period
        return await self._call_analytics("rate_of_change", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def relative_strength(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 20,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Relative strength"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 20):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("relative_strength", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def returns(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Simple returns"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        return await self._call_analytics("returns", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_alpha(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling alpha"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        return await self._call_analytics("rolling_alpha", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_autocorrelation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        lag: Optional[int] = 1,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling autocorrelation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if lag is not None and (not strict or lag != 1):
            _payload["lag"] = lag
        return await self._call_analytics("rolling_autocorrelation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_beta(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling beta"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("rolling_beta", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_beta_timing(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling beta timing"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("rolling_beta_timing", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_cagr(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling CAGR"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("rolling_cagr", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_calmar(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Calmar ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_calmar", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_correlation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        min_samples: Optional[int] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling correlation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if min_samples is not None:
            _payload["min_samples"] = min_samples
        return await self._call_analytics("rolling_correlation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_covariance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        min_samples: Optional[int] = None,
        Annualized: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling covariance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if min_samples is not None:
            _payload["min_samples"] = min_samples
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_covariance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_cvar(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        confidence: Optional[float] = 0.95,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling CVaR (Expected Shortfall)"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if confidence is not None and (not strict or confidence != 0.95):
            _payload["confidence"] = confidence
        return await self._call_analytics("rolling_cvar", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_downside_beta(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling downside beta"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("rolling_downside_beta", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_factor_regression(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        factors: Optional[Dict[str, Any]] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        model: Optional[str] = "custom",
        period: Optional[int] = 260,
        Obs: Optional[Any] = "",
        annualize_alpha: Optional[bool] = True,
        use_excess_returns: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling factor regression"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if factors is not None:
            _payload["factors"] = factors
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if model is not None and (not strict or model != "custom"):
            _payload["model"] = model
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if annualize_alpha is not None and (not strict or annualize_alpha != True):
            _payload["annualize_alpha"] = annualize_alpha
        if use_excess_returns is not None and (not strict or use_excess_returns != True):
            _payload["use_excess_returns"] = use_excess_returns
        return await self._call_analytics("rolling_factor_regression", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_garch(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        p: Optional[int] = 1,
        q: Optional[int] = 1,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling GARCH"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if p is not None and (not strict or p != 1):
            _payload["p"] = p
        if q is not None and (not strict or q != 1):
            _payload["q"] = q
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_garch", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_information_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling information ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_information_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_kurtosis(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        excess: Optional[bool] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling kurtosis"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if excess is not None and (not strict or excess != True):
            _payload["excess"] = excess
        return await self._call_analytics("rolling_kurtosis", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_r_squared(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling R-squared"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("rolling_r_squared", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_regression(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling regression"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        return await self._call_analytics("rolling_regression", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_residuals(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling residuals"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("rolling_residuals", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_sharpe(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Sharpe ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_sharpe", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_skewness(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling skewness"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("rolling_skewness", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_sortino(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        MAR: Optional[float] = 0.0,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Sortino ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if MAR is not None and (not strict or MAR != 0.0):
            _payload["MAR"] = MAR
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_sortino", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_treynor(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Treynor ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_treynor", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_upside_beta(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling upside beta"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("rolling_upside_beta", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_var(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        confidence: Optional[float] = 0.95,
        method: Optional[str] = "historical",
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling Value at Risk"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if confidence is not None and (not strict or confidence != 0.95):
            _payload["confidence"] = confidence
        if method is not None and (not strict or method != "historical"):
            _payload["method"] = method
        return await self._call_analytics("rolling_var", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_variance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling variance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_variance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def rolling_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Rolling volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("rolling_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def semi_deviation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Semi-deviation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("semi_deviation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def semi_variance(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Semi-variance"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("semi_variance", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def sterling_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        rf: Optional[float] = 0.0,
        rf_frequency: Optional[str] = "annual",
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Sterling ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if rf is not None and (not strict or rf != 0.0):
            _payload["rf"] = rf
        if rf_frequency is not None and (not strict or rf_frequency != "annual"):
            _payload["rf_frequency"] = rf_frequency
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("sterling_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def tail_ratio(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        percentile: Optional[float] = 5.0,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Tail ratio"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if percentile is not None and (not strict or percentile != 5.0):
            _payload["percentile"] = percentile
        return await self._call_analytics("tail_ratio", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def tracking_error(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        Annualized: Optional[Any] = True,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Tracking error"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        if Annualized is not None and (not strict or Annualized != True):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("tracking_error", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def tracking_error_volatility(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Tracking error volatility"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("tracking_error_volatility", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def ulcer_index(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Ulcer index"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("ulcer_index", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def upside_capture(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        y: Optional[str] = None,
        x: Optional[Any] = None,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Upside capture"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if y is not None:
            _payload["y"] = y
        if x is not None:
            _payload["x"] = x
        return await self._call_analytics("upside_capture", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def upside_deviation(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        threshold: Optional[float] = 0.0,
        Annualized: Optional[Any] = False,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Upside deviation"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if threshold is not None and (not strict or threshold != 0.0):
            _payload["threshold"] = threshold
        if Annualized is not None and (not strict or Annualized != False):
            _payload["Annualized"] = Annualized
        return await self._call_analytics("upside_deviation", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def win_rate(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Win rate (% positive periods)"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        return await self._call_analytics("win_rate", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)

    async def worst_period(
        self,
        *,
        identifiers: Optional[Union[str, List[str]]] = None,
        query: Optional[str] = None,
        filter: Optional[Dict[str, Any]] = None,
        prices: Optional[Dict[str, Any]] = None,
        prices_file: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        TR: Optional[bool] = False,
        currency: Optional[str] = None,
        Obs: Optional[Any] = "",
        period: Optional[int] = 260,
        n_periods: Optional[int] = 20,
        options: Optional[Dict[str, Any]] = None,
        context: Optional[Dict[str, Any]] = None,
        response_format: Optional[str] = None,
        as_table: Optional[str] = None,
        strict: bool = False,
        **extra_params: Any,
    ) -> Any:
        """Worst period return"""
        _payload: Dict[str, Any] = dict(extra_params)
        if identifiers is not None:
            _payload["identifiers"] = identifiers
        if query is not None:
            _payload["query"] = query
        if filter is not None:
            _payload["filter"] = filter
        if prices is not None:
            _payload["prices"] = prices
        if prices_file is not None:
            _payload["prices_file"] = prices_file
        if start_date is not None:
            _payload["start_date"] = start_date
        if end_date is not None:
            _payload["end_date"] = end_date
        if TR is not None and (not strict or TR != False):
            _payload["TR"] = TR
        if currency is not None:
            _payload["currency"] = currency
        if Obs is not None and (not strict or Obs != ""):
            _payload["Obs"] = Obs
        if period is not None and (not strict or period != 260):
            _payload["period"] = period
        if n_periods is not None and (not strict or n_periods != 20):
            _payload["n_periods"] = n_periods
        return await self._call_analytics("worst_period", _payload, options=options, context=context, response_format=response_format, as_table=as_table, strict=strict)


