from typing import Optional
from validator_collection import validators
from highcharts_core.decorators import class_sensitive
from highcharts_stock import errors
from highcharts_stock.options.plot_options.indicators import ParameterBase, ComparableIndicatorOptions
[docs]class PivotPointsParameters(ParameterBase):
def __init__(self, **kwargs):
self._algorithm = None
self.algorithm = kwargs.get('algorithm', None)
super().__init__(**kwargs)
@property
def index(self):
"""Does not apply, so raises an :exc:`AttributeError <python:AttributeError>`."""
raise AttributeError(f"{self.__class__.__name__} has no attribute 'index'")
@index.setter
def index(self, value):
raise AttributeError(f"{self.__class__.__name__} has no attribute 'index'")
@property
def algorithm(self) -> Optional[str]:
"""Algorithm used to calculate ressistance and support lines based on pivot
points. Defaults to ``'standard'``.
Supports the following values:
* ``'standard'``
* ``'fibonacci'``
* ``'camarilla'``
:rtype: :class:`str <python:str>` or :obj:`None <python:None>`
"""
return self._algorithm
@algorithm.setter
def algorithm(self, value):
if not value:
self._algorithm = None
else:
value = validators.string(value)
value = value.lower()
if value not in ['standard', 'fibonacci', 'camarilla']:
raise errors.HighchartsValueError(f'algorithm expects either "standard", '
f'"fibonacci", or "camarilla". '
f'Received: "{value}"')
self._algorithm = value
@classmethod
def _get_kwargs_from_dict(cls, as_dict):
kwargs = {
'period': as_dict.get('period', None),
'algorithm': as_dict.get('algorithm', None),
}
return kwargs
def _to_untrimmed_dict(self, in_cls = None) -> dict:
untrimmed = {
'period': self.period,
'algorithm': self.algorithm,
}
return untrimmed
[docs]class PivotPointsOptions(ComparableIndicatorOptions):
"""Options to configure a Pivot Points :term:`indicator <techincal indicator>`,
which are typically used to identify trends and reversals in intraday trading.
.. figure:: ../../../_static/pivot-points-example.png
:alt: Pivot Points Example Chart
:align: center
"""
@property
def params(self) -> Optional[PivotPointsParameters]:
"""Parameters used in calculating the indicator's data points.
:rtype: :class:`PivotPointsParameters` or :obj:`None <python:None>`
"""
return self._params
@params.setter
@class_sensitive(PivotPointsParameters)
def params(self, value):
self._params = value