diff --git a/pandas_ta/momentum/stoch.py b/pandas_ta/momentum/stoch.py index b7aae96..b0c53bc 100644 --- a/pandas_ta/momentum/stoch.py +++ b/pandas_ta/momentum/stoch.py @@ -53,7 +53,7 @@ def stoch( fill_method (value, optional): Type of fill method Returns: - pd.DataFrame: %K, %D columns. + pd.DataFrame: %K, %D, Histogram columns. """ # Validate k = v_pos_default(k, 14) @@ -94,27 +94,37 @@ def stoch( stochk_fvi = stoch_k.loc[stoch_k.first_valid_index():, ] stoch_d = ma(mamode, stochk_fvi, length=d) + stoch_h = stoch_k - stoch_d # Histogram + # Offset if offset != 0: stoch_k = stoch_k.shift(offset) stoch_d = stoch_d.shift(offset) + stoch_h = stoch_h.shift(offset) # Fill if "fillna" in kwargs: stoch_k.fillna(kwargs["fillna"], inplace=True) stoch_d.fillna(kwargs["fillna"], inplace=True) + stoch_h.fillna(kwargs["fillna"], inplace=True) if "fill_method" in kwargs: stoch_k.fillna(method=kwargs["fill_method"], inplace=True) stoch_d.fillna(method=kwargs["fill_method"], inplace=True) + stoch_h.fillna(method=kwargs["fill_method"], inplace=True) # Name and Category _name = "STOCH" _props = f"_{k}_{d}_{smooth_k}" stoch_k.name = f"{_name}k{_props}" stoch_d.name = f"{_name}d{_props}" - stoch_k.category = stoch_d.category = "momentum" + stoch_h.name = f"{_name}h{_props}" + stoch_k.category = stoch_d.category = stoch_h.category = "momentum" - data = {stoch_k.name: stoch_k, stoch_d.name: stoch_d} + data = { + stoch_k.name: stoch_k, + stoch_d.name: stoch_d, + stoch_h.name: stoch_h + } df = DataFrame(data, index=close.index) df.name = f"{_name}{_props}" df.category = stoch_k.category diff --git a/pandas_ta/momentum/stochf.py b/pandas_ta/momentum/stochf.py index 99dbb8d..cfa4f9b 100644 --- a/pandas_ta/momentum/stochf.py +++ b/pandas_ta/momentum/stochf.py @@ -97,7 +97,10 @@ def stochf( stochf_d.name = f"{_name}d{_props}" stochf_k.category = stochf_d.category = "momentum" - data = {stochf_k.name: stochf_k, stochf_d.name: stochf_d} + data = { + stochf_k.name: stochf_k, + stochf_d.name: stochf_d + } df = DataFrame(data, index=close.index) df.name = f"{_name}{_props}" df.category = stochf_k.category diff --git a/pandas_ta/momentum/stochrsi.py b/pandas_ta/momentum/stochrsi.py index eaf544e..171fd06 100644 --- a/pandas_ta/momentum/stochrsi.py +++ b/pandas_ta/momentum/stochrsi.py @@ -94,7 +94,10 @@ def stochrsi( stochrsi_d.name = f"{_name}d{_props}" stochrsi_k.category = stochrsi_d.category = "momentum" - data = {stochrsi_k.name: stochrsi_k, stochrsi_d.name: stochrsi_d} + data = { + stochrsi_k.name: stochrsi_k, + stochrsi_d.name: stochrsi_d + } df = DataFrame(data) df.name = f"{_name}{_props}" df.category = stochrsi_k.category diff --git a/pandas_ta/utils/data/yahoofinance.py b/pandas_ta/utils/data/yahoofinance.py index 20da3d2..e42bc3c 100644 --- a/pandas_ta/utils/data/yahoofinance.py +++ b/pandas_ta/utils/data/yahoofinance.py @@ -91,10 +91,11 @@ def yf(ticker: str, **kwargs) -> DataFrame: df = DataFrame() try: df = yfd.history( - period=period, - interval=interval, - proxy=proxy, - **kwargs) + period=period, + interval=interval, + proxy=proxy, + **kwargs + ) except BaseException: if yfra.__version__ == "0.1.60": _yfv1_60 = f"[!] If history is not downloading, see yfinance Issue #760 by user djl0.\n" + \ diff --git a/tests/test_ext_indicator_momentum.py b/tests/test_ext_indicator_momentum.py index 7039d5a..6512fdb 100644 --- a/tests/test_ext_indicator_momentum.py +++ b/tests/test_ext_indicator_momentum.py @@ -222,7 +222,7 @@ class TestMomentumExtension(TestCase): def test_stoch_ext(self): self.data.ta.stoch(append=True) self.assertIsInstance(self.data, DataFrame) - self.assertEqual(list(self.data.columns[-2:]), ["STOCHk_14_3_3", "STOCHd_14_3_3"]) + self.assertEqual(list(self.data.columns[-3:]), ["STOCHk_14_3_3", "STOCHd_14_3_3", "STOCHh_14_3_3"]) def test_stochf_ext(self): self.data.ta.stochf(append=True)