【Python】构建资本市场线(CML)(指数增强策略--1)

本文探讨了如何使用Python构建资本市场线(CML),以沪深300为基准,通过蒙特卡洛模拟和优化算法找到最佳股票组合。计算出了最小波动率和最大夏普比率的投资组合,并指出这些策略可能存在的问题,如行业偏离。最终,这些结果将用于指数增强策略的回测。
摘要由CSDN通过智能技术生成

资本市场线(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
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yolimia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值