俗话说不要将所有的鸡蛋放在同一个篮子里,在投资股票的时候我们也会多买几只以抵抗风险。本文将带领着你使用Python,来分析多只股票投资时的收益和风险,并找到最优的投资组合方案。这是上一篇文章《用Python分析股票的收益和风险》 的多股票升级版本。
本文目录如下:
一、股票数据的在线获取
我们打算用以下9家大公司的股票构建投资组合,并用2017年的历史数据进行回溯测试。
公司名
股票代码
Apple
AAPL
Microsoft
MSFT
Exxon Mobil
XOM
Johnson & Johnson
JNJ
JP Morgan
JPM
Amazon
AMZN
General Electric
GE
FB
AT&T
T
在具体分析前,还是先导入将要用到的Python包。
import pandas as pd
import numpy as np
import quandl # 获取股票数据
from datetime import date
import matplotlib.pyplot as plt
%config InlineBackend.figure_format = 'retina'
我们使用上面导入的 quandl 包从网络获取相应的股票数据,并将每日调整后的收盘价存入数据框 StockPrices 变量中,具体获取方法可参见《如何用Python下载金融数据》一文。
# 创建空的DataFrame变量,用于存储股票数据
StockPrices = pd.DataFrame()
# 设置股票数据的开始和结束的时间
start = date(2016,12,30)
end = date(2017,12,31)
# 创建股票代码的列表
ticker_list = ['AAPL', 'MSFT', 'XOM', 'JNJ', 'JPM', 'AMZN', 'GE', 'FB', 'T']
# 使用循环,挨个获取每只股票的数据,并存储调整后的收盘价
for ticker in ticker_list:
data = quandl.get('WIKI/'+ticker, start_date=start, end_date=end)
StockPrices[ticker] = data['Adj. Close'] # 注意 Adj. 和 Close 之间有一空格
# 输出数据的前5行
print(StockPrices.head())
AAPL MSFT XOM JNJ JPM AMZN \
Date
2016-12-30 114.389454 60.788710 86.960273 112.310940 84.383167 749.87
2017-01-03 114.715378 61.219142 87.567241 112.925087 85.302395 753.67
2017-01-04 114.586983 60.945231 86.603799 112.739868 85.458859 757.18
2017-01-05 115.169696 60.945231 85.312787 113.919421 84.672217 780.45
2017-01-06 116.453639 61.473488 85.264615 113.373512 84.682050 795.99
GE FB T
Date
2016-12-30 30.782801 115.05 40.476170
2017-01-03 30.870473 116.86 40.942507
2017-01-04 30.880215 118.69 40.704580
2017-01-05 30.704870 120.67 40.590375
2017-01-06 30.792542 123.41 39.790940
这里用行来记录每一天的数据,用列记录每只股票的收盘价。然后计算每天的收益率,将数据存储在数据框 StockReturns 变量中。收益率的具体计算方法可参见文章《用Python分析股票的收益和风险》。
# 计算每日收益率,并丢弃缺失值
StockReturns = StockPrices.pct_change().dropna()
# 打印前5行数据
print(StockReturns.head())
AAPL MSFT XOM JNJ JPM AMZN \
Date
2017-01-03 0.002849 0.007081 0.006980 0.005468 0.010893 0.005068
2017-01-04 -0.001119 -0.004474 -0.011002 -0.001640 0.001834 0.004657
2017-01-05 0.005085 0.000000 -0.014907 0.010463 -0.009205 0.030732
2017-01-06 0.011148 0.008668 -0.000565 -0.004792 0.000116 0.019912
2017-01-09 0.009160 -0.003183 -0.016497 -0.000172 0.000697 0.001168
GE FB T
Date
2017-01-03 0.002848 0.015732 0.011521
2017-01-04 0.000316 0.015660 -0.005811
2017-01-05 -0.005678 0.016682 -0.002806
2017-01-06 0.002855 0.022707 -0.019695
20