【问题标题】:How can I calculate the moving average with yahoo_fin in Python?如何在 Python 中使用 yahoo_fin 计算移动平均线?
【发布时间】:2020-04-21 14:43:34
【问题描述】:

我正在尝试制作一个程序,当股票价格超过移动平均线时通过电子邮件发送警报,我正在使用库 yahoo_fin(这里是 docs

我正在尝试从 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'),但我需要帮助才能知道如何计算移动平均线这个数据。

【问题讨论】:

  • 你用的是哪个版本的python和yahoo_fin?它适用于python 3.6yahoo_fin 0.8.4。另外,你能提供更多的代码上下文吗?你要导入什么模块?
  • 我正在使用 python 3.7.7 和 yahoo_fin 0.8.4!我只是想让 get_stats('a') 工作,但它给出了一个错误。一旦我得到 get_stats('a') 来显示一些数据,然后我想从该数据中获取移动平均值。只需输入 yahoo_fin.stock_info.get_stats('a') 就会出现上述错误。我也在使用 import yahoo_fin & from yahoo_fin import stock_info
  • 抱歉,我无法复制该问题。它工作得很好python -c "import yahoo_fin; from yahoo_fin import stock_info; print(yahoo_fin.stock_info.get_data('a'))"。尝试不同版本的熊猫?你用的是哪个版本的熊猫?
  • 我正在使用熊猫 1.0.3!我正在尝试使用 get_stats('a') 而不是 get_data('a')。我可以尝试 get_data('a') 但如何从该数据中获得 50 天移动平均线?另外,如何让它不拾取表中不必要的数据?
  • get_stats 也适用于python -c "import yahoo_fin; from yahoo_fin import stock_info; print(yahoo_fin.stock_info.get_stats('a'))",我使用的是相同版本的pandas。对不起

标签: python yahoo-finance stock moving-average


【解决方案1】:

您可以使用代码从get_data 计算 50 天移动平均线:

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)]

【讨论】:

    【解决方案2】:

    我为此推送了一个补丁 - 如果您将 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 天等)。

    【讨论】:

    • 谢谢!我让stock_info.get_stats("a").Value[5] 工作只是为了抓住 50-MA 值!
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2010-10-27
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多