python期货,python股票数据分析案例

  

  不要把所有的鸡蛋放在同一个篮子里,这是投资界永恒的智慧。   

  

  预告:下一篇我们将会讲解经典的Markowitz均值-方差模型,它能帮助我们决定如何控制投资组合的配置比例,感兴趣的同学可以关注下。   

  

  为了规避风险,投资者倾向于将其资产分散到不同的金融工具中,如信托、债券、基金、股票、期货、期权甚至房地产市场。那么,在这么多的理财产品中,如何选择才能在风险可控的情况下获得尽可能高的收益呢?资产配置正试图解决这个问题。   

  

  那么,如何衡量我们的组合资产在不同配置下的收益率和风险呢?   

  

  

一、投资组合的收益率计算

  

  

  投资组合的收益率很容易计算。一般来说,它是总收入除以初始投资资本。如果我们投资了n种金融产品,我们投资组合的收益率是:   

  

  入门组合投资:控制风险并利益最大化「Python实战」   

  

  投资组合收益率的计算过程类似于加权平均的计算。我们把每个理财产品的收益率乘以那个产品的投资比例,把结果相加。   

  

  需要注意的是,这里计算的收益率是自始至终的收益率。如果要计算一个速率序列,就不能用这个方法。因为在第一期,我们的配置比例是固定的,但是第一期之后,随着不同产品的不同波动,它们在我们资产配置中的比例发生了变化。所以需要不断迭代更新我们的比值参数,直接用原来的比值是不对的。   

  

  

二、投资组合的风险度量

  

  

  我们仍然通过方差来衡量我们投资组合的风险:   

  

  入门组合投资:控制风险并利益最大化「Python实战」   

  

  从上面的公式可以看出,它不仅包含了每个理财产品的方差和系数的乘积,还包含了两个产品之间的协方差项。换句话说,金融产品之间的相关性越高,风险就越大。   

  

  这里就不推导了。其实我们可以先计算出我们投资组合收益率的序列,然后用方差和下行风险来计算投资组合的风险。这样也可以应对不同时期不同理财产品比例的变化。   

  

  

三、Python实战:收益率

  

  

  然后我们用Python来看看不同的投资比例会对我们的收益率和风险产生什么影响。我们用万科A和东方财富来论证不同配置比例下的整体收益率和风险趋势。   

  

  导入熊猫as PD导入tu share as ts导入numpy as NP #获取该股近两年的行情数据pro=TS . pro _ API()Wanke=pro . daily(TS _ code=' 00002 . SZ ',Start _ date=' 20170101 ')蔡东=pro.daily (TS _ code=' 300059.sz ',start _ date=' 20170101') #数据清理,只做收益率数据df=pd.merge (Wanke,蔡东,onfillna(0)/100 df . columns=[' r _ wanke ',' r _蔡东']   

;">

入门组合投资:控制风险并利益最大化「Python实战」

1. 先计算各产品的整体收益然后加权平均

那么接下来我们来看收益率情况,我们先用期末各资产收益直接加权平均的方式来计算。

import matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snssns.set()mpl.rcParams['font.family'] = 'sans-serif'mpl.rcParams['font.sans-serif'] = 'SimHei'w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wanker_wanke = (df['r_wanke'] + 1).product() - 1r_dongcai = (df['r_dongcai'] + 1).product() - 1returns = [r_wanke * w1 + r_dongcai * w2  for w1, w2 in zip(w_wanke, w_dongcai)]plt.figure(figsize=(10, 6))plt.plot(w_wanke, returns)plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合17年以来收益率', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的收益率', fontsize=20);
入门组合投资:控制风险并利益最大化「Python实战」

由于过去两年万科的收益率是高于东方财富的,所以万科的持有比例越高,组合收益率就越高。不过我们还要看一下风险。

2. 先计算投资组合的收益序列,再累乘

前边提到,我们是可以先计算出投资组合的收益序列,然后再计算整体收益率以及风险的。

import matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snsimport numpy as npsns.set()mpl.rcParams['font.family'] = 'sans-serif'mpl.rcParams['font.sans-serif'] = 'SimHei'# 计算累计毛利率,类似于基金净值,以16年最后一个交易日的收盘价作为成本价df['worth_wanke'] = (df['r_wanke'] + 1).cumprod()df['worth_dongcai'] = (df['r_dongcai'] + 1).cumprod()w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wankereturns = []for w1, w2 in zip(w_wanke, w_dongcai): worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai']) worth_last_day = worth_portfolio.copy() worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1) r_portfolio = worth_portfolio / worth_last_day returns.append(r_portfolio.prod())plt.figure(figsize=(10, 6))plt.plot(w_wanke, returns)plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合17年以来收益率', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的收益率', fontsize=20);

这种方法和上一种方法的计算结果完全一致,但是我们获得了投资组合的收益率序列,后续就可以做更多事情。

四、Python实战:投资组合的风险

一种方法是使用各金融产品的方差及协方差,结合不同金融产品的投资占比,套入公式来计算,这部分留给读者自己探讨,我们接下来看一下另一种方法。

先求投资组合的收益率序列

w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wankerisk = []for w1, w2 in zip(w_wanke, w_dongcai): worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai']) worth_last_day = worth_portfolio.copy() worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1) r_portfolio = worth_portfolio / worth_last_day - 1 risk.append(r_portfolio.std())plt.figure(figsize=(10, 6))plt.plot(w_wanke, risk, '-')plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合17年以来收益率方差', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的风险', fontsize=20);
入门组合投资:控制风险并利益最大化「Python实战」

可以看到,当万科资产配置比例在0.4-0.5左右的时候,投资风险是最低的。但是前边我们也看到了,投资万科的潜在获利空间也比较高,所以我们要结合自己的风险承受能力以及预期获益水平来调整自己的资产配置比例。

下行风险

我们还记得,使用下行风险可以消除方差度量法的一些问题。那么我们就来计算一下不同配置比例下的下行风险。

w_wanke = np.linspace(0, 1, 11)w_dongcai = 1 - w_wankerisk = []for w1, w2 in zip(w_wanke, w_dongcai): worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai']) worth_last_day = worth_portfolio.copy() worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1) r_portfolio = worth_portfolio / worth_last_day - 1 mean = r_portfolio.mean() _r_tmp = r_portfolio - mean _r_tmp = np.array(list(map(lambda x: x if x < 0 else 0, _r_tmp))) _risk = sum(_r_tmp ** 2) risk.append(_risk)plt.figure(figsize=(10, 6))plt.plot(w_wanke, risk, '-')plt.xlabel('万科资产占比', fontsize=16)plt.ylabel('投资组合收益率的标准差', fontsize=16)plt.title('不同比例下组合投资万科A与东方财富的风险(2017年以来数据)', fontsize=20);
入门组合投资:控制风险并利益最大化「Python实战」

可以看到,在万科A与东方财富各占一半时,我们投资组合的下行风险最低。这种方法最大的好处就是不会将向上超出预期的收益计算进来,只会考虑低于预期收益的波动,这样与我们主观上的风险更为一致。

还有其他几种风险量化方式,比如风险价值、最大回撤等,聪明如你,可以自己尝试一下哦。

相关文章