如何计算 yahoo_fin 在 Python 中的移动平均线?
How can I calculate the moving average with yahoo_fin in Python?
我正在尝试制作一个程序,当股价超过移动平均线时通过电子邮件发送警报,我正在使用库 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')
,但我需要帮助才能知道如何计算此数据的移动平均值。
您可以使用代码从 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)]
我为此推送了一个补丁 - 如果您将 yahoo_fin 的版本升级到 0.8.5,现在应该可以解决这个问题。
from yahoo_fin import stock info as si
si.get_stats("a")
据此,您可以获得 50 天和 200 天移动平均线。但是,正如@user7440787 的回复中提到的,您可以使用 get_data 方法来拉取历史价格,然后计算您需要的任何 window 大小的移动平均线(10 天、100 天、 150 天等)。
我正在尝试制作一个程序,当股价超过移动平均线时通过电子邮件发送警报,我正在使用库 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')
,但我需要帮助才能知道如何计算此数据的移动平均值。
您可以使用代码从 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)]
我为此推送了一个补丁 - 如果您将 yahoo_fin 的版本升级到 0.8.5,现在应该可以解决这个问题。
from yahoo_fin import stock info as si
si.get_stats("a")
据此,您可以获得 50 天和 200 天移动平均线。但是,正如@user7440787 的回复中提到的,您可以使用 get_data 方法来拉取历史价格,然后计算您需要的任何 window 大小的移动平均线(10 天、100 天、 150 天等)。