diff --git a/talipp/indicators/ADX.py b/talipp/indicators/ADX.py index 714e82b5..633ecb8a 100644 --- a/talipp/indicators/ADX.py +++ b/talipp/indicators/ADX.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values, previous_if_exists @@ -37,6 +38,7 @@ class ADX(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, di_period: int, @@ -44,10 +46,12 @@ def __init__(self, di_period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=ADXVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.di_period = di_period self.adx_period = adx_period diff --git a/talipp/indicators/ALMA.py b/talipp/indicators/ALMA.py index 20b74fd0..28437e58 100644 --- a/talipp/indicators/ALMA.py +++ b/talipp/indicators/ALMA.py @@ -1,4 +1,5 @@ from math import exp +from datetime import datetime from typing import List, Any from talipp.indicators.Indicator import Indicator, InputModifierType @@ -20,6 +21,7 @@ class ALMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -28,9 +30,11 @@ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period self.offset = offset diff --git a/talipp/indicators/AO.py b/talipp/indicators/AO.py index 6cbe9797..095d2711 100644 --- a/talipp/indicators/AO.py +++ b/talipp/indicators/AO.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -22,6 +23,7 @@ class AO(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_period: int, @@ -30,9 +32,11 @@ def __init__(self, fast_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.fast_period = fast_period self.slow_period = slow_period diff --git a/talipp/indicators/ATR.py b/talipp/indicators/ATR.py index 142864b6..14d765f5 100644 --- a/talipp/indicators/ATR.py +++ b/talipp/indicators/ATR.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class ATR(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super(ATR, self).__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period self.tr = [] diff --git a/talipp/indicators/AccuDist.py b/talipp/indicators/AccuDist.py index 1018ba98..79ac7a00 100644 --- a/talipp/indicators/AccuDist.py +++ b/talipp/indicators/AccuDist.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class AccuDist(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__( input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.initialize(input_values, input_indicator) diff --git a/talipp/indicators/Aroon.py b/talipp/indicators/Aroon.py index 778f6133..9b115ea7 100644 --- a/talipp/indicators/Aroon.py +++ b/talipp/indicators/Aroon.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -33,16 +34,19 @@ class Aroon(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=AroonVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/BB.py b/talipp/indicators/BB.py index 9172a0da..647e4beb 100644 --- a/talipp/indicators/BB.py +++ b/talipp/indicators/BB.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -37,6 +38,7 @@ class BB(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -45,10 +47,12 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=BBVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period self.std_dev_mult = std_dev_mult diff --git a/talipp/indicators/BOP.py b/talipp/indicators/BOP.py index 01ac4ee4..6c6c9b83 100644 --- a/talipp/indicators/BOP.py +++ b/talipp/indicators/BOP.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicators.Indicator import Indicator, InputModifierType @@ -17,14 +18,17 @@ class BOP(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.initialize(input_values, input_indicator) diff --git a/talipp/indicators/CCI.py b/talipp/indicators/CCI.py index b03eb1d1..b72ff464 100644 --- a/talipp/indicators/CCI.py +++ b/talipp/indicators/CCI.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,15 +21,18 @@ class CCI(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.mean_dev = MeanDev(period) self.add_managed_sequence(self.mean_dev) diff --git a/talipp/indicators/CHOP.py b/talipp/indicators/CHOP.py index e31ba9ed..541da40e 100644 --- a/talipp/indicators/CHOP.py +++ b/talipp/indicators/CHOP.py @@ -1,4 +1,5 @@ from math import log10 +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -21,15 +22,18 @@ class CHOP(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/ChaikinOsc.py b/talipp/indicators/ChaikinOsc.py index 6dafa84a..87cd7e57 100644 --- a/talipp/indicators/ChaikinOsc.py +++ b/talipp/indicators/ChaikinOsc.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -22,6 +23,7 @@ class ChaikinOsc(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_period: int, @@ -30,9 +32,11 @@ def __init__(self, fast_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.fast_period = fast_period self.slow_period = slow_period diff --git a/talipp/indicators/ChandeKrollStop.py b/talipp/indicators/ChandeKrollStop.py index 3967fc59..0dfdbdb7 100644 --- a/talipp/indicators/ChandeKrollStop.py +++ b/talipp/indicators/ChandeKrollStop.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -35,6 +36,7 @@ class ChandeKrollStop(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, atr_period: int, @@ -43,10 +45,12 @@ def __init__(self, atr_period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=ChandeKrollStopVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.atr_period = atr_period self.atr_mult = atr_mult diff --git a/talipp/indicators/CoppockCurve.py b/talipp/indicators/CoppockCurve.py index 7d2d76ff..a02af94e 100644 --- a/talipp/indicators/CoppockCurve.py +++ b/talipp/indicators/CoppockCurve.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -22,6 +23,7 @@ class CoppockCurve(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_roc_period: int, @@ -30,9 +32,11 @@ def __init__(self, fast_roc_period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.fast_roc = ROC(fast_roc_period) self.add_sub_indicator(self.fast_roc) diff --git a/talipp/indicators/DEMA.py b/talipp/indicators/DEMA.py index 7d104ed9..6bf88bbb 100644 --- a/talipp/indicators/DEMA.py +++ b/talipp/indicators/DEMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class DEMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/DPO.py b/talipp/indicators/DPO.py index d31bd336..b1c12b5d 100644 --- a/talipp/indicators/DPO.py +++ b/talipp/indicators/DPO.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,6 +21,7 @@ class DPO(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -27,9 +29,11 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/DonchianChannels.py b/talipp/indicators/DonchianChannels.py index 13fa2df4..0397dce3 100644 --- a/talipp/indicators/DonchianChannels.py +++ b/talipp/indicators/DonchianChannels.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -35,15 +36,18 @@ class DonchianChannels(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=DonchianChannelsVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/EMA.py b/talipp/indicators/EMA.py index 123ef421..4dfca8e1 100644 --- a/talipp/indicators/EMA.py +++ b/talipp/indicators/EMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class EMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/EMV.py b/talipp/indicators/EMV.py index ec5227f0..0041193f 100644 --- a/talipp/indicators/EMV.py +++ b/talipp/indicators/EMV.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -21,6 +22,7 @@ class EMV(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -29,9 +31,11 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period self.volume_div = volume_div diff --git a/talipp/indicators/ForceIndex.py b/talipp/indicators/ForceIndex.py index 1cf8b411..11906edb 100644 --- a/talipp/indicators/ForceIndex.py +++ b/talipp/indicators/ForceIndex.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -21,6 +22,7 @@ class ForceIndex(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -28,9 +30,11 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.ma = MAFactory.get_ma(ma_type, period) self.add_managed_sequence(self.ma) diff --git a/talipp/indicators/HMA.py b/talipp/indicators/HMA.py index b601a8b0..96b87d40 100644 --- a/talipp/indicators/HMA.py +++ b/talipp/indicators/HMA.py @@ -1,4 +1,5 @@ from math import sqrt +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,15 +21,18 @@ class HMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/IBS.py b/talipp/indicators/IBS.py index 24cd330b..1b76feec 100644 --- a/talipp/indicators/IBS.py +++ b/talipp/indicators/IBS.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class IBS(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.initialize(input_values, input_indicator) diff --git a/talipp/indicators/Ichimoku.py b/talipp/indicators/Ichimoku.py index ea017afc..4f8a496a 100644 --- a/talipp/indicators/Ichimoku.py +++ b/talipp/indicators/Ichimoku.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicators.Indicator import Indicator, InputModifierType @@ -42,6 +43,7 @@ class Ichimoku(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, kijun_period: int, @@ -52,10 +54,12 @@ def __init__(self, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=IchimokuVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.kijun_period = kijun_period self.tenkan_period = tenkan_period diff --git a/talipp/indicators/Indicator.py b/talipp/indicators/Indicator.py index 794ef07d..8b7efc23 100644 --- a/talipp/indicators/Indicator.py +++ b/talipp/indicators/Indicator.py @@ -1,5 +1,6 @@ from abc import ABCMeta, abstractmethod from collections.abc import MutableSequence, Sequence +from datetime import datetime from typing import List, Any, Callable, Union, Type from warnings import warn @@ -19,6 +20,7 @@ class Indicator(Sequence): input_modifier: Input modifier. output_value_type: Output value type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ __metaclass__ = ABCMeta @@ -26,12 +28,13 @@ class Indicator(Sequence): def __init__(self, input_modifier: InputModifierType = None, output_value_type: Type = float, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): self.input_modifier = input_modifier self.output_value_type = output_value_type self.input_sampler: Sampler = None if input_sampling is not None: - self.input_sampler = Sampler(input_sampling) + self.input_sampler = Sampler(input_sampling, period_start) self.input_values: ListAny = [] self.output_values: ListAny = [] diff --git a/talipp/indicators/KAMA.py b/talipp/indicators/KAMA.py index af291644..da7e7082 100644 --- a/talipp/indicators/KAMA.py +++ b/talipp/indicators/KAMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,6 +21,7 @@ class KAMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -28,9 +30,11 @@ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/KST.py b/talipp/indicators/KST.py index dfefed87..cfa50471 100644 --- a/talipp/indicators/KST.py +++ b/talipp/indicators/KST.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -42,6 +43,7 @@ class KST(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, @@ -58,10 +60,12 @@ def __init__(self, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=KSTVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.roc1 = ROC(roc1_period) self.roc2 = ROC(roc2_period) diff --git a/talipp/indicators/KVO.py b/talipp/indicators/KVO.py index 85e76750..9be3a43b 100644 --- a/talipp/indicators/KVO.py +++ b/talipp/indicators/KVO.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -22,6 +23,7 @@ class KVO(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_period: int, @@ -30,9 +32,11 @@ def __init__(self, fast_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.fast_ma = MAFactory.get_ma(ma_type, fast_period) self.add_managed_sequence(self.fast_ma) diff --git a/talipp/indicators/KeltnerChannels.py b/talipp/indicators/KeltnerChannels.py index 1105c723..7c87b61b 100644 --- a/talipp/indicators/KeltnerChannels.py +++ b/talipp/indicators/KeltnerChannels.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -41,6 +42,7 @@ class KeltnerChannels(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, ma_period: int, @@ -51,10 +53,12 @@ def __init__(self, ma_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=KeltnerChannelsVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.atr_mult_up = atr_mult_up self.atr_mult_down = atr_mult_down diff --git a/talipp/indicators/MACD.py b/talipp/indicators/MACD.py index be7e91c7..7f453632 100644 --- a/talipp/indicators/MACD.py +++ b/talipp/indicators/MACD.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -38,6 +39,7 @@ class MACD(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_period: int, @@ -47,10 +49,12 @@ def __init__(self, fast_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=MACDVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.ma_fast = MAFactory.get_ma(ma_type, fast_period) self.ma_slow = MAFactory.get_ma(ma_type, slow_period) diff --git a/talipp/indicators/MassIndex.py b/talipp/indicators/MassIndex.py index beb14f05..e8737e18 100644 --- a/talipp/indicators/MassIndex.py +++ b/talipp/indicators/MassIndex.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -23,6 +24,7 @@ class MassIndex(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, ma_period: int, @@ -32,9 +34,11 @@ def __init__(self, ma_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.ma_ratio_period = ma_ratio_period diff --git a/talipp/indicators/McGinleyDynamic.py b/talipp/indicators/McGinleyDynamic.py index 5ce6838e..92aabea1 100644 --- a/talipp/indicators/McGinleyDynamic.py +++ b/talipp/indicators/McGinleyDynamic.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class McGinleyDynamic(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/MeanDev.py b/talipp/indicators/MeanDev.py index 1bd893e6..e6277e8a 100644 --- a/talipp/indicators/MeanDev.py +++ b/talipp/indicators/MeanDev.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,6 +21,7 @@ class MeanDev(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -27,9 +29,11 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/OBV.py b/talipp/indicators/OBV.py index 03f3854d..792427b2 100644 --- a/talipp/indicators/OBV.py +++ b/talipp/indicators/OBV.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,14 +19,17 @@ class OBV(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.initialize(input_values, input_indicator) diff --git a/talipp/indicators/ParabolicSAR.py b/talipp/indicators/ParabolicSAR.py index 6b2e73e4..c1c1df49 100644 --- a/talipp/indicators/ParabolicSAR.py +++ b/talipp/indicators/ParabolicSAR.py @@ -1,5 +1,6 @@ import enum from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -50,6 +51,7 @@ class ParabolicSAR(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ SAR_INIT_LEN = 5 @@ -60,10 +62,12 @@ def __init__(self, init_accel_factor: float, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=ParabolicSARVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.init_accel_factor = init_accel_factor self.accel_factor_inc = accel_factor_inc diff --git a/talipp/indicators/PivotsHL.py b/talipp/indicators/PivotsHL.py index 8d83c44d..67d62273 100644 --- a/talipp/indicators/PivotsHL.py +++ b/talipp/indicators/PivotsHL.py @@ -5,6 +5,7 @@ import enum from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.exceptions import TalippException @@ -59,6 +60,7 @@ class PivotsHL(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, high_period: int, @@ -66,10 +68,12 @@ def __init__(self, high_period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=PivotsHLVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.high_period = high_period self.low_period = low_period diff --git a/talipp/indicators/ROC.py b/talipp/indicators/ROC.py index db45a960..2b990fe0 100644 --- a/talipp/indicators/ROC.py +++ b/talipp/indicators/ROC.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class ROC(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/RSI.py b/talipp/indicators/RSI.py index c2a9fc72..c9bbd47b 100644 --- a/talipp/indicators/RSI.py +++ b/talipp/indicators/RSI.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,14 +19,17 @@ class RSI(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/SFX.py b/talipp/indicators/SFX.py index 131628ba..aad35625 100644 --- a/talipp/indicators/SFX.py +++ b/talipp/indicators/SFX.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -41,6 +42,7 @@ class SFX(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, atr_period: int, @@ -50,10 +52,12 @@ def __init__(self, atr_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=SFXVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.atr = ATR(atr_period) self.std_dev = StdDev(std_dev_period, input_modifier=ValueExtractor.extract_close) diff --git a/talipp/indicators/SMA.py b/talipp/indicators/SMA.py index 4be82b19..f9398dd4 100644 --- a/talipp/indicators/SMA.py +++ b/talipp/indicators/SMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class SMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/SMMA.py b/talipp/indicators/SMMA.py index 391333e6..092464f9 100644 --- a/talipp/indicators/SMMA.py +++ b/talipp/indicators/SMMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,14 +19,17 @@ class SMMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/SOBV.py b/talipp/indicators/SOBV.py index 8a7069d8..bc4f7c6a 100644 --- a/talipp/indicators/SOBV.py +++ b/talipp/indicators/SOBV.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,15 +21,18 @@ class SOBV(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/STC.py b/talipp/indicators/STC.py index 73ee2173..e3841d77 100644 --- a/talipp/indicators/STC.py +++ b/talipp/indicators/STC.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -26,6 +27,7 @@ class STC(Indicator): input_modifier: Input modifier. stoch_ma_type: [Stoch][talipp.indicators.Stoch] moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_macd_period: int, @@ -36,9 +38,11 @@ def __init__(self, fast_macd_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, stoch_ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) # use slow_macd_period for signal line as signal line is not relevant here self.macd = MACD(fast_macd_period, slow_macd_period, slow_macd_period) diff --git a/talipp/indicators/StdDev.py b/talipp/indicators/StdDev.py index d42745eb..d90f80c8 100644 --- a/talipp/indicators/StdDev.py +++ b/talipp/indicators/StdDev.py @@ -1,4 +1,5 @@ from math import sqrt +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class StdDev(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/Stoch.py b/talipp/indicators/Stoch.py index c8d6dc9d..48d25306 100644 --- a/talipp/indicators/Stoch.py +++ b/talipp/indicators/Stoch.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -36,6 +37,7 @@ class Stoch(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -44,10 +46,12 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=StochVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/StochRSI.py b/talipp/indicators/StochRSI.py index a0764932..abf79b36 100644 --- a/talipp/indicators/StochRSI.py +++ b/talipp/indicators/StochRSI.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -38,6 +39,7 @@ class StochRSI(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, rsi_period: int, @@ -48,10 +50,12 @@ def __init__(self, rsi_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=StochRSIVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.stoch_period = stoch_period diff --git a/talipp/indicators/SuperTrend.py b/talipp/indicators/SuperTrend.py index d462cedd..af4d43b8 100644 --- a/talipp/indicators/SuperTrend.py +++ b/talipp/indicators/SuperTrend.py @@ -1,5 +1,6 @@ import enum from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -45,6 +46,7 @@ class SuperTrend(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, atr_period: int, @@ -52,10 +54,12 @@ def __init__(self, atr_period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=SuperTrendVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.atr = ATR(atr_period) self.mult = mult diff --git a/talipp/indicators/T3.py b/talipp/indicators/T3.py index af627905..eaf0f06f 100644 --- a/talipp/indicators/T3.py +++ b/talipp/indicators/T3.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -20,6 +21,7 @@ class T3(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -27,9 +29,11 @@ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/TEMA.py b/talipp/indicators/TEMA.py index b3e2ff4c..6bfbc62e 100644 --- a/talipp/indicators/TEMA.py +++ b/talipp/indicators/TEMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class TEMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, +period_start=period_start) self.period = period diff --git a/talipp/indicators/TRIX.py b/talipp/indicators/TRIX.py index c12d5c9d..6fd77050 100644 --- a/talipp/indicators/TRIX.py +++ b/talipp/indicators/TRIX.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class TRIX(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/TSI.py b/talipp/indicators/TSI.py index 2624a8d3..da7e4f97 100644 --- a/talipp/indicators/TSI.py +++ b/talipp/indicators/TSI.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -21,6 +22,7 @@ class TSI(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_period: int, @@ -29,9 +31,11 @@ def __init__(self, fast_period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.EMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.slow_ma = MAFactory.get_ma(ma_type, slow_period) self.add_managed_sequence(self.slow_ma) diff --git a/talipp/indicators/TTM.py b/talipp/indicators/TTM.py index 116fe0b0..b5e34478 100644 --- a/talipp/indicators/TTM.py +++ b/talipp/indicators/TTM.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -38,6 +39,7 @@ class TTM(Indicator): input_modifier: Input modifier. ma_type: Moving average type. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, @@ -47,10 +49,12 @@ def __init__(self, period: int, input_indicator: Indicator = None, input_modifier: InputModifierType = None, ma_type: MAType = MAType.SMA, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=TTMVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/UO.py b/talipp/indicators/UO.py index c22bc57c..704662d1 100644 --- a/talipp/indicators/UO.py +++ b/talipp/indicators/UO.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -21,6 +22,7 @@ class UO(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, fast_period: int, @@ -29,9 +31,11 @@ def __init__(self, fast_period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.fast_period = fast_period self.mid_period = mid_period diff --git a/talipp/indicators/VTX.py b/talipp/indicators/VTX.py index 960cd67e..d82ebaaa 100644 --- a/talipp/indicators/VTX.py +++ b/talipp/indicators/VTX.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -34,16 +35,19 @@ class VTX(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=VTXVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/VWAP.py b/talipp/indicators/VWAP.py index a64f211e..ecb2dbb0 100644 --- a/talipp/indicators/VWAP.py +++ b/talipp/indicators/VWAP.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicators.Indicator import Indicator, InputModifierType @@ -17,14 +18,17 @@ class VWAP(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.sum_price_vol = [] self.sum_vol = [] diff --git a/talipp/indicators/VWMA.py b/talipp/indicators/VWMA.py index bca6d21b..f4245009 100644 --- a/talipp/indicators/VWMA.py +++ b/talipp/indicators/VWMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class VWMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/WMA.py b/talipp/indicators/WMA.py index 81025d9e..8a73a260 100644 --- a/talipp/indicators/WMA.py +++ b/talipp/indicators/WMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -18,15 +19,18 @@ class WMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.period = period diff --git a/talipp/indicators/ZLEMA.py b/talipp/indicators/ZLEMA.py index f6e2ddd0..2517fe19 100644 --- a/talipp/indicators/ZLEMA.py +++ b/talipp/indicators/ZLEMA.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import List, Any from talipp.indicator_util import has_valid_values @@ -19,15 +20,18 @@ class ZLEMA(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ def __init__(self, period: int, input_values: List[float] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.lag = round((period - 1) / 2.0) diff --git a/talipp/indicators/ZigZag.py b/talipp/indicators/ZigZag.py index 4db77f5c..9e55ea73 100644 --- a/talipp/indicators/ZigZag.py +++ b/talipp/indicators/ZigZag.py @@ -1,5 +1,6 @@ import enum from dataclasses import dataclass +from datetime import datetime from typing import List, Any from talipp.exceptions import TalippException @@ -54,6 +55,7 @@ class ZigZag(Indicator): input_indicator: Input indicator. input_modifier: Input modifier. input_sampling: Input sampling type. + period_start: Period start for sampling (optional) """ @dataclass @@ -66,10 +68,12 @@ def __init__(self, sensitivity: float, input_values: List[OHLCV] = None, input_indicator: Indicator = None, input_modifier: InputModifierType = None, - input_sampling: SamplingPeriodType = None): + input_sampling: SamplingPeriodType = None, + period_start: datetime = None): super().__init__(input_modifier=input_modifier, output_value_type=ZigZagVal, - input_sampling=input_sampling) + input_sampling=input_sampling, + period_start=period_start) self.sensitivity = sensitivity self.min_trend_length = min_trend_length diff --git a/talipp/input.py b/talipp/input.py index 47859f26..eebbcce4 100644 --- a/talipp/input.py +++ b/talipp/input.py @@ -83,8 +83,8 @@ class SamplingPeriodType(Enum): DAY_1 = (TimeUnitType.DAY, 1) """1 day""" - - + + class Sampler: """Implementation of timeframe auto-sampling. @@ -120,8 +120,9 @@ class Sampler: TimeUnitType.DAY: 3600 * 24, } - def __init__(self, period_type: SamplingPeriodType): + def __init__(self, period_type: SamplingPeriodType, period_start: datetime = None): self._period_type: SamplingPeriodType = period_type + self._period_start: datetime = period_start def is_same_period(self, first: OHLCV, second: OHLCV) -> bool: """Evaluate whether two [OHLCV][talipp.ohlcv.OHLCV] objects belong to the same period. @@ -145,15 +146,18 @@ def _normalize(self, dt: datetime): period_type = self._period_type.value[0] period_length = self._period_type.value[1] - if period_type == TimeUnitType.SEC: - period_start = datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute) - elif period_type == TimeUnitType.MIN: - period_start = datetime(dt.year, dt.month, dt.day, dt.hour) - elif period_type == TimeUnitType.HOUR: - period_start = datetime(dt.year, dt.month, dt.day) - elif period_type == TimeUnitType.DAY: - period_start = datetime(dt.year, dt.month, 1) - period_start = period_start.replace(tzinfo=dt.tzinfo) + if self._period_start is None: + if period_type == TimeUnitType.SEC: + period_start = datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute) + elif period_type == TimeUnitType.MIN: + period_start = datetime(dt.year, dt.month, dt.day, dt.hour) + elif period_type == TimeUnitType.HOUR: + period_start = datetime(dt.year, dt.month, dt.day) + elif period_type == TimeUnitType.DAY: + period_start = datetime(dt.year, dt.month, 1) + period_start = period_start.replace(tzinfo=dt.tzinfo) + else: + period_start = self._period_start delta = dt - period_start num_periods = delta.total_seconds() // (period_length * Sampler.CONVERSION_TO_SEC[period_type]) diff --git a/test/test_input.py b/test/test_input.py index 20692c98..d0980d45 100644 --- a/test/test_input.py +++ b/test/test_input.py @@ -59,6 +59,14 @@ def test_sample_normalize_5min(self): self.assertFalse(sampler.is_same_period(self.get_ohlcv("01/01/2024 12:34:59"), self.get_ohlcv("01/01/2024 12:35:00"))) + self.assertFalse(sampler.is_same_period(self.get_ohlcv("01/01/2024 09:14:00"), + self.get_ohlcv("01/01/2024 09:16:00"))) + + period_adjusted_sampler = Sampler(SamplingPeriodType.MIN_5, datetime.strptime("01/01/2024 09:14:00", "%d/%m/%Y %H:%M:%S")) + + self.assertTrue(period_adjusted_sampler.is_same_period(self.get_ohlcv("01/01/2024 09:14:00"), + self.get_ohlcv("01/01/2024 09:16:00"))) + def test_sample_normalize_1hour(self): sampler = Sampler(SamplingPeriodType.HOUR_1)