Python实现马科维茨有效边界

本文介绍了如何使用Python实现马科维茨有效边界,通过获取沪深股市的股票数据,计算年化收益率和协方差矩阵,模拟投资组合,并绘制马科维茨有效边界图。最终确定最优投资组合,例如最优组合为买入56.1%贵州茅台、6%万科A和38%中国平安,该组合的期望收益率为31.10%,期望波动率为26.49%。
摘要由CSDN通过智能技术生成

Python实现马科维茨有效边界

参考文章

  1. https://mp.weixin.qq.com/s/neCSaWK0c4jzWwCfDVFA6A
  2. https://mp.weixin.qq.com/s/2X_VCZwv8EX4S48wAeL0AQ

导入包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tushare as ts
import scipy.optimize as sco

获取股票数据

原文章中是用美股数据实现的,我试着用沪深的数据实现一下,通过tuhsare来获取选定股票的日收益率。我挑了5只股票:贵州茅台(600519)、格力电器(000651)、万科A(000002)、中国平安(601318)、中国石油(601857)

df = pd.DataFrame()
df = ts.get_hist_data('600519', start='2015-01-05', end='2018-12-28') 
s600519 = df['p_change']
s600519.name = '600519'

df = pd.DataFrame()
df = ts.get_hist_data('000651', start='2015-01-05', end='2018-12-28') 
s000651 = df['p_change']
s000651.name = '000651'

df = pd.DataFrame()
df = ts.get_hist_data('000002', start='2015-01-05', end='2018-12-28') 
s000002 = df['p_change']
s000002.name = '000002'

df = pd.DataFrame()
df = ts.get_hist_data('601318', start='2015-01-05', end='2018-12-28') 
s601318 = df['p_change']
s601318.name = '601318'

df = pd.DataFrame()
df = ts.get_hist_data('601857', start='2015-01-05', end='2018-12-28') 
s601857 = df['p_change']
s601857.name = '601857'

data = pd.DataFrame({
   '600519':s600519,'000651':s000651,'000002':s000002, '601318':s601318,'601857':s601857})
data = data.dropna()

计算年化收益率和协方差矩阵(以一年252个交易日计算)

returns_annual = data.mean() * 252
cov_annual = data.cov() * 252

模拟投资组合

为了得到有效边界,我们模拟了50000个投资组合

number_assets 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值