Как я могу рассчитать скользящее среднее с yahoo_fin в Python? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать программу, которая отправляет уведомления по электронной почте, когда цена акций пересекает скользящее среднее, и я использую библиотеку yahoo_fin (Вот документы )

Я пытаюсь получить данные скользящего среднего из yahoo_fin.stock_info.get_stats('a'), но я получаю следующую ошибку:

File "lib\site-packages\yahoo_fin\stock_info.py", line 241, in get_stats
  table.columns = ["Attribute" , "Value"]  
File "lib\site-packages\pandas\core\generic.py", line 5287, in __setattr__
  return object.__setattr__(self, name, value)  
File "pandas\_libs\properties.pyx", line 67, in pandas._libs.properties.AxisProperty.__set__  
File "lib\site-packages\pandas\core\generic.py", line 661, in _set_axis
  self._data.set_axis(axis, labels)  
File "lib\site-packages\pandas\core\internals\managers.py", line 178, in set_axis
  f"Length mismatch: Expected axis has {old_len} elements, new "  
ValueError: Length mismatch: Expected axis has 9 elements, new values have 2 elements

Любая помощь по исправлению этой ошибки будет отличной!

Если вы не знаете как чтобы заставить эту конкретную функцию работать, я попробовал другую альтернативу, которая, кажется, работает, - это использовать метод yahoo_fin.stock_info.get_data('a'), но мне нужна помощь, чтобы узнать, как рассчитать скользящее среднее из этих данных.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Я вставил патч для этого - если вы обновите свою версию yahoo_fin до 0.8.5, это должно быть исправлено сейчас.

from yahoo_fin import stock info as si
si.get_stats("a")

Отсюда вы можете получить 50-дневную и 200-дневную скользящие средние. Однако, как упомянуто в ответе @ user7440787, вы можете использовать метод get_data для извлечения истории цен, а затем рассчитать любую скользящую среднюю размера окна, которая вам нужна (10-дневная, 100-дневная, 150-дневная и т. Д. c). .).

0 голосов
/ 21 апреля 2020

Вы можете рассчитать 50-дневную скользящую среднюю из get_data, используя код:

import yahoo_fin
from yahoo_fin import stock_info
yahoo_fin.stock_info.get_data('a', interval='1d')['close'][-50:].mean()

, если вы хотите рассчитать его за определенный период:

df = yahoo_fin.stock_info.get_data('a', interval='1d')
moving_average = [df['close'][i-50:i].mean() for i in range(50, df.shape[0]+1)]
...