绘制股价的对数正态分布

时间:2019-08-18 17:38:07

标签: python matplotlib scipy

我有Yahoo从2000年1月1日至2018年12月31日的特定股票的每日价格数据。我了解股票价格的每日百分比变化遵循正态分布,因此我执行了以下操作:

df['pct_change'] = df['Adj Close'].pct_change()
df = df.dropna()

# Plot normal distribution of daily returns
mu = df['pct_change'].mean()
std = df['pct_change'].std()
x = np.linspace(mu - 5*std, mu + 5*std,100)
plt.plot(x, stats.norm.pdf(x, mu, std))
plt.show()

现在,我想用对数正态分布来绘制股票价格,但是我对stats.lognorm.pdf()函数和要包含的参数感到非常困惑。由于价格的日志是正态分布的,我应该在原始数据框中创建Adj Price列的日志的新列吗?如果有帮助,请参见数据框的head()。谢谢。

            High       Low      Open     Close       Volume        Adj Close  \
Date                                                                         
2000-01-03  4.017857  3.631696  3.745536  3.997768  133949200.0   3.488905   
2000-01-04  3.950893  3.613839  3.866071  3.660714  128094400.0   3.194754   
2000-01-05  3.948661  3.678571  3.705357  3.714286  194580400.0   3.241507   
2000-01-06  3.821429  3.392857  3.790179  3.392857  191993200.0   2.960991   
2000-01-07  3.607143  3.410714  3.446429  3.553571  115183600.0   3.101249   

              pct_change  
Date                    
2000-01-03    0.088754  
2000-01-04   -0.084310  
2000-01-05    0.014634  
2000-01-06   -0.086539  
2000-01-07    0.047368 

1 个答案:

答案 0 :(得分:0)

假设您要使用MLE估计对数正态的参数,并且特别对df.Close的值感兴趣,则可以使用lognorm.fit

shape, location, scale = stats.lognorm.fit(df.Close)

从那里,您可以像对正态分布情况一样绘制分布,并通过

获得密度。
stats.lognorm.pdf(x, s=shape, loc=location, scale=scale)