用python构建多只股票日收益率直方图_用Python分析多股票的投资组合

本文介绍了如何使用Python获取并分析多只股票的历史数据,计算每日收益率,构建不同的投资组合策略,包括预设权重、等权重和市值加权,并通过相关性和协方差矩阵评估风险。最终,通过蒙特卡洛模拟找到风险最小和夏普比率最优的投资组合,以实现收益与风险的平衡。
摘要由CSDN通过智能技术生成

俗话说不要将所有的鸡蛋放在同一个篮子里,在投资股票的时候我们也会多买几只以抵抗风险。本文将带领着你使用Python,来分析多只股票投资时的收益和风险,并找到最优的投资组合方案。这是上一篇文章《用Python分析股票的收益和风险》 的多股票升级版本。

本文目录如下:

一、股票数据的在线获取

我们打算用以下9家大公司的股票构建投资组合,并用2017年的历史数据进行回溯测试。

公司名

股票代码

Apple

AAPL

Microsoft

MSFT

Exxon Mobil

XOM

Johnson & Johnson

JNJ

JP Morgan

JPM

Amazon

AMZN

General Electric

GE

Facebook

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值