Source code for highcharts_stock.options.plot_options.oscillators.ppo

from typing import Optional, List

from validator_collection import validators

from highcharts_core.decorators import class_sensitive

from highcharts_stock.options.plot_options.indicators import ParameterBase, ComparableIndicatorOptions


[docs]class PPOParameters(ParameterBase): def __init__(self, **kwargs): self._index = None self._periods = None self.index = kwargs.get('index', None) self.periods = kwargs.get('periods', None) @property def period(self): """Does not apply, so raises an :exc:`AttributeError <python:AttributeError>`.""" raise AttributeError(f"{self.__class__.__name__} has no attribute 'period'") @period.setter def period(self, value): raise AttributeError(f"{self.__class__.__name__} has no attribute 'period'") @property def periods(self) -> Optional[List[int]]: """The periods to use when calculating the Percentage Price Oscillator. Defaults to ``[12, 26]``. .. note:: Expects a two-member iterable of :class:`int <python:int>` instances. :rtype: :class:`list <python:list>` of :class:`int <python:int>`, or :obj:`None <python:None>` """ return self._periods @periods.setter def periods(self, value): if not value: self._periods = None else: value = validators.iterable(value) self._periods = [validators.integer(x, minimum = 0) for x in value] @classmethod def _get_kwargs_from_dict(cls, as_dict): kwargs = { 'index': as_dict.get('index', None), 'periods': as_dict.get('periods', None), } return kwargs def _to_untrimmed_dict(self, in_cls = None) -> dict: untrimmed = { 'index': self.index, 'periods': self.periods, } return untrimmed
[docs]class PPOOptions(ComparableIndicatorOptions): """Options to configure a Percentage Price :term:`Oscillator`, which shows the relationship between two moving averages in percentage terms. .. note:: Defaults to comparing a 26-period and 12-period exponential moving average, though this can be adjusted using :meth:`.params.period <highcharts_stock.options.plot_options.oscillators.PPOOptions.params`. .. figure:: ../../../../_static/cmo-example.png :alt: Chande Momentum Oscillator Example Chart :align: center """ @property def params(self) -> Optional[PPOParameters]: """Parameters used in calculating the indicator's data points. :rtype: :class:`PPOParameters` or :obj:`None <python:None>` """ return self._params @params.setter @class_sensitive(PPOParameters) def params(self, value): self._params = value