gpt4 book ai didi

python - 移动平均线计算不正确

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:20 24 4
gpt4 key购买 nike

我正在使用从 Quandl 中提取的数据对 Microsoft 股票进行时间序列分析。我想根据移动平均线绘制收盘价。当我绘制移动平均线时,它们不会一直走到图表的右侧。

我认为存在缺口是有道理的(例如 200 天移动平均线要到第 200 天才能开始),但我担心缺口在右侧。这意味着它是从最近的日期开始的(这在一定程度上是有道理的,因为最近的日期在时间序列中排在第一位),这显然不是正确的做法。

我可以只反转系列(新数据框升序而不是降序),但我相信它也会绘制从最近日期开始的图表,这显然是 Not Acceptable 。

#calculate moving averages for Microsoft

roll100 = MSFT_data['Adj. Close'].rolling(100).mean()
roll200 = MSFT_data['Adj. Close'].rolling(200).mean()
roll50 = MSFT_data['Adj. Close'].rolling(50).mean()
roll10 = MSFT_data['Adj. Close'].rolling(10).mean()


roll200.plot(label = '200 Day Moving Average')
roll50.plot(label = '50 Day Moving Average')
roll100.plot(label = '100 Day Moving Average')
MSFT_data['Adj. Close'].plot(label = 'MSFT Closing Price', color = 'blue')
plt.legend(loc = 'upper left')

由于移动平均线应该总是从最早的日期开始计算,我假设我缺少一个简单的命令来这​​样做。

更新:有人建议我将移动平均线作为原始数据框的一部分(我假设它们与日期索引相关联)但我得到了相同的结果:


MSFT_data['roll100'] = MSFT_data['Adj. Close'].rolling(100).mean()
MSFT_data['roll200'] = MSFT_data['Adj. Close'].rolling(200).mean()
MSFT_data['roll50'] = MSFT_data['Adj. Close'].rolling(50).mean()
MSFT_data['roll10'] = MSFT_data['Adj. Close'].rolling(10).mean()

#plot Microsoft Price along with moving averages

fig = plt.figure()
fig.set_figheight(8)
fig.set_figwidth(10)

MSFT_data['roll200'].plot(label = '200 Day Moving Average')
MSFT_data['roll50'].plot(label = '50 Day Moving Average')
MSFT_data['roll100'].plot(label = '100 Day Moving Average')
MSFT_data['Adj. Close'].plot(label = 'MSFT Closing Price', color = 'blue')
plt.legend(loc = 'upper left')

Graph

此外,如果我检查列,例如:

MSFT_data['roll10'].head(12)

Date
2017-12-29 NaN
2017-12-28 NaN
2017-12-27 NaN
2017-12-26 NaN
2017-12-22 NaN
2017-12-21 NaN
2017-12-20 NaN
2017-12-19 NaN
2017-12-18 NaN
2017-12-15 85.796
2017-12-14 85.711
2017-12-13 85.674
Name: roll10, dtype: float64

我可以看到最近的 9 个值为 NaN。相反,如果我创建一个新的数据框并尝试重新索引升序,则尾部的最后 9 个值为 NaN。

最佳答案

我不确定这是否对您有帮助,但如果我尝试重现它,我不会在右边有任何间隙。我认为您的问题是您没有向原始 df 添加 MA。这是我的代码

%matplotlib inline
import pandas as pd
import numpy as np
N = 400
dates = pd.date_range(start='2018-01-01', periods=N, freq="T")
df = pd.DataFrame({"Date":dates, "Adj. Close":np.random.rand(N)})
for ma in [10,50, 100,200]:
df["MA{}".format(ma)] = df["Adj. Close"].rolling(ma).mean()

df.plot(x="Date").legend(bbox_to_anchor=(1, 1));

关于python - 移动平均线计算不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com