##导入数据
data2=pd.read_csv('data2.csv', encoding='gbk', index_col='Dates')
data2.index=[dt.datetime.strptime(x,'%Y/%m/%d') for x in data2.index]#计算股票收益率
log_returns=np.log(data2.pct_change()+1)##计算不同权重状态下的股票组合预期收益率和波动率,用于出不同权重状态下股票组合的收益波动分布图
number = 10000 #10000组权重
stock_num=len(log_returns.columns)#股票数量
weights=np.random.rand(number, stock_num)
weights/=np.sum(weights, axis = 1).reshape(number,1) #注意这里一定要加reshape,使得除数的size属性完备
pret=np.dot(weights, log_returns.mean())*252#股票组合的预期年化收益率
pvol=np.diag(np.sqrt(np.dot(weights,np.dot(log_returns.cov()*252,weights.T))))#股票组合的预期年化波动率plt.figure(figsize=(10,6))
plt.scatter(pvol,pret,c=pret/pvol,marker='o')
plt.xlabel('预期波动率')
plt.ylabel('预期收益率')
plt.grid(True)
plt.colorbar(label='夏普比率')##优化计算
import scipy.optimize as sco
##编写目标变量的计算函数(3个) 用于之后求解夏普率最大化,风险最小化,收益最大化的目标组合
def statistics(weights):weights=np.array(weights)pret=np.dot(weights, log_returns.mean())*252#股票组合的预期年化收益率pvol=np.sqrt(np.dot(weights.T,np.dot(log_returns.cov()*252,weights)))#股票组合的预期年化波动率return np.array([pret, pvol, pret/pvol])###求解夏普率最大的组合权重###定义最大化SharpRatio的目标函数
def min_neg_sharp(weights):return -1*statistics(weights)[2]#编写优化的约束条件,minimize函数的约定表达如下
cons=({'type':'eq','fun': lambda x: np.sum(x)-1})#约束是所有参数(权重)的总和为1。
bnd=tuple((0,1) for i in range(stock_num))##我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数#调用minimize函数进行最优化求解
opts_maxSharpRatio = sco.minimize(min_neg_sharp, stock_num*[1/stock_num], method='SLSQP', bounds=bnd, constraints=cons)#  N*[1/N]表示复制N个一维list #'SLSQP'表示Sequential Least SQuares Programming序贯最小二乘规划
print(opts_maxSharpRatio['x'].round(3))#求得优化后组合的权重
print(statistics(opts_maxSharpRatio['x'])) #优化后组合的预期收益率,预期波动率,及SharpRatio##求解波动率最小化的组合权重
#定义目标函数
def min_vol(weights):return statistics(weights)[1]opts_minVolatility = sco.minimize(min_vol, stock_num*[1/stock_num], method='SLSQP',bounds=bnd, constraints=cons)
print(opts_minVolatility['x'].round(3))
print(statistics(opts_minVolatility['x']))##求解最大预期收益的组合权重
def min_neg_pret(weights):return -statistics(weights)[0]
opts_maxReturn=sco.minimize(min_neg_pret, stock_num*[1/stock_num], method='SLSQP', bounds=bnd, constraints=cons)
print(opts_maxReturn['x'].round(3))
print(statistics(opts_maxReturn['x']))##构建有效边界组合
trets=np.linspace(0.04,0.15,50)
tvols=[]for trets_i in trets:cons1=({'type':'eq','fun': lambda x: np.sum(x)-1},{'type':'eq','fun': lambda x: statistics(x)[0]-trets_i})#约束是所有参数(权重)的总和为1,且预期收益等于目标收益res=sco.minimize(min_vol,stock_num*[1/stock_num], method='SLSQP', bounds=bnd, constraints=cons1)tvols.append(res['fun'])
tvols=np.array(tvols)##作图
plt.figure(figsize=(10,6))
plt.scatter(pvol, pret, marker='o', c=pret/pvol)
plt.scatter(tvols, trets,marker='x',c=trets/tvols, label='有效边界')
plt.plot(statistics(opts_maxSharpRatio['x'])[1],statistics(opts_maxSharpRatio['x'])[0],marker='*',markersize=15,label='最大夏普率组合')
plt.plot(statistics(opts_minVolatility['x'])[1],statistics(opts_minVolatility['x'])[0],marker='*',markersize=15,label='最小方差组合')
plt.plot(statistics(opts_maxReturn['x'])[1],statistics(opts_maxReturn['x'])[0],marker='*',markersize=15,label='最大收益组合')
plt.grid(True)
plt.colorbar(label='夏普率')
plt.xlabel('预期波动率')
plt.ylabel('预期收益率')
plt.legend()

基于《Python与量化投资 从基础到实战》内容的练习

投资组合的有效边界及基于目标函数的组合优化相关推荐

  1. 【ML4CO论文精读】基于深度强化学习的组合优化问题研究进展(李凯文, 2020)

    基于深度强化学习的组合优化研究进展 本人研究方向(博士期间):多目标组合优化与决策研究--致力于多约束多目标多任务组合优化算法和多目标决策系统的研究与开发,以及多目标优化技术在一些工程实践中的应用. ...

  2. python 组合优化_python基于粒子群优化的投资组合优化研究

    我今年的研究课题是使用粒子群优化(PSO)的货币进位交易组合优化.在本文中,我将介绍投资组合优化并解释其重要性.其次,我将演示粒子群优化如何应用于投资组合优化.第三,我将解释套利交易组合,然后总结我的 ...

  3. 算法组合 优化算法_算法交易简化了风险价值和投资组合优化

    算法组合 优化算法 Photo by Markus Spiske (left) and Jamie Street (right) on Unsplash Markus Spiske (左)和Jamie ...

  4. matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法

    基于 MATLAB 的水资源优化分配问题动态规划解法 摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了 动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计 算,然后用 matlab 编 ...

  5. m基于ACO蚁群优化的FCM模糊聚类算法matlab仿真

    目录 1.算法概述 2.仿真效果预览 3.核心MATLAB程序 4.完整MATLAB程序 1.算法概述 蚁群算法是通过对自然界中真实蚂蚁的集体行为的观察,模拟而得到一种仿生优化算法,它具有很好的并行性 ...

  6. 基于深度强化学习的组合优化方法在工业应用中的实践

    <统筹方法平话>中有一个例子曾被收录到语文课本中,讲"烧水泡茶"有五道工序:1.烧开水,2.洗茶壶,3.洗茶杯,4.拿茶叶,5.泡茶,其中前四道工序是泡茶的前提,且各道 ...

  7. 基于组合优化的旅行商问题

    基于组合优化的旅行商问题 组合优化 组合优化中的TSP 综述 一.问题叙述 二.图在计算机上的表示 三.TSP问题的暴力解法 四.Prim算法.Kruskal算法拓展 五.利用最小生成树的结果来找旅行 ...

  8. matlab对于椭圆检测的算法,基于弧段组合的椭圆检测算法研究

    摘要: 椭圆检测是图像匹配与识别,图像理解与分析,计算机视觉等领域的一项基础任务,许多研究人员对椭圆检测问题进行了深入研究,提出了多种检测算法.它们大致可以分为三类:投票/聚类,最优化,基于弧段的方法 ...

  9. 10.710.8 基于HyperOpt实现TPE优化基于Optuna实现多种优化

    2 基于HyperOpt实现TPE优化 Hyperopt优化器是目前最为通用的贝叶斯优化器之一,Hyperopt中集成了包括随机搜索.模拟退火和TPE(Tree-structured Parzen E ...

最新文章

  1. 图表2------沪深300指数图+收盘价的EMD分量图+PCA后的特征累计贡献率表+预测模型评估指标公式表
  2. 化学博士6次投毒同事,只因对方给自己安排工作太多....
  3. Openssl和PKCS#11的故事
  4. Zookeeper的内存数据和持久化
  5. php 传递resource参数,php define的第二个参数使用方法_php技巧 - is_resource
  6. 网易云音乐IPO拟至少募30.4亿港元 开售半日已获足额认购
  7. go -生成pb文件 - 上
  8. 数据库中间件01-认识mycat
  9. RubyOnRails 学习网站
  10. IP地址分类及对应范围
  11. 云手机虚拟机服务器配置,云手机虚拟机服务器
  12. 计算机网络原理第3章 数据链路层 (超全知识点+例题)
  13. 山地自行车轮市场前景分析及行业研究报告
  14. 分享渴垂栋懈沁心烟帆新上线的网站如何在几天内优化至首页
  15. k8s删除node节点
  16. wordpress一次性删除草稿和回收站文章代码
  17. [创业之路-48] :动态股权机制 -3- 静态股权分配 VS 动态股权分配
  18. MATLAB和SIMULINK硬件支持包安装的问题总结
  19. 消防系统计算机网络安全,麦积消防中队组织开展网络安全排查
  20. 有限元:有限元法概述

热门文章

  1. python获取小时和分钟_Python:以小时,分钟和秒为单位读取文本文件;和度数,弧分和弧秒...
  2. freeswitch 部署测试流程
  3. 面试题,你觉得产品经理的职责有哪些?
  4. 阿布扎比欢迎全世界所有已接种疫苗的旅行者,该政策9月5日起生效
  5. redis stream持久化_[灌水] Redis 的持久化
  6. 邓亚萍的即刻搜索:推民生产品搜索曝光不良食品
  7. 用shell手撸容器实现批量用openssl签证书
  8. 删除电脑属性制造商_win7系统怎么修改系统制造商信息?
  9. stm32引脚速度GPIO_Speed的区别
  10. html绘制三维坐标系,使用html5绘制三维线框图