做完股票的基础分析后,接下来我们可以做一些简单的风险分析。
首先还是导入数据并进行简单的处理:
from __future__ import division
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#import data
Tesla=pd.read_csv('Tesla_Stock.csv',index_col='Date')
Tesla.index=pd.to_datetime(Tesla.index)
GM=pd.read_csv('GM_stock.csv',index_col='Date')
GM.index=pd.to_datetime(GM.index)
Ford=pd.read_csv('Ford_Stock.csv',index_col='Date')
Ford.index=pd.to_datetime(Ford.index)
#count daily return
GM['Return']=GM['Close'].pct_change(1)
GM=GM.dropna()
Tesla['Return']=Tesla['Close'].pct_change(1)
Tesla=Tesla.dropna()
Ford['Return']=Ford['Close'].pct_change(1)
Ford=Ford.dropna()
#concatenate daily return of three stocks
ret_df=pd.concat([Tesla['Return'],GM['Return'],Ford['Return']],axis=1)
ret_df.columns=['Tesla','GM','Ford']
ret_df.head()
我们可以看下计算出的三只股票的日收益率:
接下来我们可以通过绘图描述每只股票风险与收益率的关系图:
area = np.pi*20
plt.scatter(ret_df.mean(), ret_df.std(),alpha = 0.5,s =area)
plt.xlabel('Expected returns')
plt.ylabel('Risk')
# Label the scatter plots
for label, x, y in zip(ret_df.columns, ret_df.mean(), ret_df.std()):
plt.annotate(
label,
xy = (x, y), xytext = (50, 50),
textcoords = 'offset points', ha = 'right', va = 'bottom',
arrowprops = dict(arrowstyle = '-', connectionstyle = 'arc3,rad=-0.3'))
这里使用了plt.annotate
对每个点进行标注,更多内容,可以查看相关的文档
输出如下:
从图中可以看出福特公司的股票风险最低,但同样收益率也较低,而特斯拉就属于高风险和高收益型股票了,从整张图明显的体现出了投资市场“高风险,高收益”的基本法则。
蒙特卡罗模拟法
接下来,我们通过蒙特卡罗模拟法来模拟计算特斯拉公司股票的风险价值。
风险价值(VaR):即在市场正常波动的条件下,在一定概率水平α%下,某一金融资产或金融资产组合的VaR是在未来特定一段时间Δt内最大可能损失。
现在我们使用蒙特卡罗模拟法进行风险价值的估算。简单来说,蒙特卡罗模拟法即运用历史数据对未来进行多次模拟,以求得未来股价结果的概率分布。蒙特卡罗模拟法的公式如下: