python 投资组合
程序员文章站
2024-03-12 13:00:38
...
import yfinance as yf import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set(font='SimHei',rc={'figure.figsize':(15,9)}) tickers = { '000001.SS': '上证综指', '600519.SS': '贵州茅台', '518880.SS': '黄金ETF' } data = yf.download(list(tickers), start='2019-06-01', end='2020-09-01')['Close'] data.rename(columns=tickers, inplace=True) data.head() # 取前五 #画图 (data/data.iloc[0]).plot() #收益率 r_log = np.log(data/data.shift(1)) #年化收益率 r_annual = np.exp(r_log.mean()*252)-1 r_annual #风险 std = np.sqrt(r_log.var()*252) #标准差 # 随机生成权重 def gen_weights(n): w = np.random.rand(n) return w / np.sum(w) n = len(list(tickers)) w = gen_weights(n) list(zip(r_annual.index, w)) #投资收益 def port_ret(w): return np.sum(w * r_annual) #投资风险(组合的标准差) def port_std(w): return np.sqrt(w.T.dot((r_log.cov()*252).dot(w))) port_std(w) # 生成多次随机的投资组合 def gen_ports(times): for p in range(times): w = gen_weights(n) yield (port_std(w), port_ret(w), w) df = pd.DataFrame(gen_ports(3000), columns=['std', 'ret', 'w']) df.head() #夏普比率 df['sharp'] = (df['ret']-0.03)/df['std'] plt.scatter(df['std'],df['ret'],c=df['sharp'],cmap='coolwarm',marker='o') plt.grid(True) plt.xlabel('pstd') plt.ylabel('pret') plt.colorbar(label='sharp') #推荐投资组合 list(zip(r_annual.index,df.loc[df.sharp.idxmax()].w)) sharp = (port_ret(w)-0.03)/port_std(w) sharp
多股票投资组合:
https://blog.csdn.net/asialee_bird/article/details/89417750
利用ARIMA进行时间序列数据分析:
上一篇: java表单提交中文乱码的解决方法
推荐阅读
-
python 投资组合
-
eclipse python 博客分类: pythoneclipse eclipsepython
-
Python3自学--3基础语法-Python编码(上)
-
eclipse python 博客分类: pythoneclipse eclipsepython
-
python3从零学习-4.1、基础语法(上)
-
python爬取代理IP并进行有效的IP测试
-
PHP实现的简单排列组合算法应用示例
-
UML类图关系详解 博客分类: JAVA基础 类之间关系、依赖、聚合、组合、泛化、关联
-
pystun 和 py2exe 以及 NAT类型检测 博客分类: Python分析-设计-架构 stunpystunpy2exewindowscx_freeze
-
深入理解JAVA中的聚集和组合的区别与联系