资本市场线(Capital Market Line,CML)是投资学中的一个概念,用于描述在给定风险水平下,投资组合的最佳选择。它是由风险无关的资产和风险资产组成的投资组合线。
资本市场线是由风险无关的资产(risk-free asset)和风险资产(risky asset)的组合构成的。资本市场线上的每个点代表着一种不同的风险水平。该线上的每个投资组合都是由风险无关的资产和风险资产的不同权重组成的,以实现给定风险水平下的最高预期回报率,表示每单位风险资产带来的额外预期回报。
本文以沪深300为市场基准/投资标的,找出最优股票组合。
导入必要库:
import akshare as ak
import pandas as pd
import numpy as np
from pylab import plt, mpl
import scipy.optimize as sco
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Kline, Line, Bar, Grid, Scatter
import warnings
warnings.simplefilter('ignore') # 忽略警告信息;
数据获取 + 整理 + 观察行业权重:
# 查询股票代码
stock_list = ak.index_stock_cons_weight_csindex(symbol="000300")
# 查询行业 + 重构表格(这一步可以省略,作者是想看一下指数的行业权重)
data = []
for i in range(300):
所属行业 = ak.stock_individual_info_em(symbol=stock_list['成分券代码'][i])['value'][2]
data.append([stock_list['成分券代码'][i], stock_list['权重'][i], 所属行业])
# 绘图看一下行业分布
data = pd.DataFrame(data, columns = ['代码','权重','行业'])
行业权重 = data[['权重','行业']].groupby('行业').sum().sort_values('权重').round(2)
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS, width='800px', height='1200px'))
.add_xaxis(行业权重.index.tolist())
.add_yaxis('行业权重',行业权重['权重'].tolist())
.reversal_axis()
.set_seri