200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python量化策略——大类资产配置模型(最小方差模型)

python量化策略——大类资产配置模型(最小方差模型)

时间:2021-05-15 01:50:44

相关推荐

python量化策略——大类资产配置模型(最小方差模型)

最小方差模型

寻求风险最小的大类资产组合。

max⁡=XTΣX\max=X^{T}\Sigma Xmax=XTΣX

s.t.ΣX=1,Xi≥0,i=1,2,3...s.t. \quad \Sigma X=1 ,X_{i} \ge 0,i=1,2,3...s.t.ΣX=1,Xi​≥0,i=1,2,3...

#其中XXX表示资产配置权重向量,Σ\SigmaΣ表示各个资产间的协方差矩阵,我们将选取三个大类资产进行配置,分别是:股票(沪深300),债券(上证国债指数000012),南华商品期货指数(NHCI.NH)进行配置。

代码:

# coding=utf-8import mathimport tushare as tsimport pandas as pdfrom datetime import datetime, date from scipy import stats,integrateimport cvxpy as cpimport numpy as npts.set_token('token码')#获取地址 https://tushare.pro/register?reg=385920pro = ts.pro_api()#读取数据def DF( code='000300.SH'):df = pro.index_daily( ts_code=code, start_date='0101', end_date='')df=df.sort_index(ascending=False)df.index=pd.to_datetime(df.trade_date,format='%Y-%m-%d')#设置日期索引df_close=(df.close/df.close[0])#计算净值return (df_close)ret_nh=DF("NHCI.NH").valuesret_hs300=DF().valuesret_sz=DF('000012.SH').valuesSigma=np.cov( np.vstack([ret_nh,ret_hs300,ret_sz]))#协方差# Create two scalar optimization variables.x = cp.Variable(3)# Create two constraints.constraints = [ x[0]+x[1] +x[2] ==1, x[0]>=0,x[1]>=0,x[2]>=0 ]#必须是凸集才可以# Form objective.obj = cp.Minimize( cp.quad_form(x, Sigma) ) #必须是凸的才可以prob = cp.Problem(obj, constraints)# Solve with ECOS_BB.prob.solve(solver=cp.SCS)print("最优波动率:%.4f" %( prob.value*np.sqrt(252)*100),'%')#最优解print("商品期货:%.2f, 股票: %.2f 债券: %.2f" %(x[0].value,x[1].value,x[2].value))

结果

最优波动率:15.2254 %商品期货:0.52, 股票: 0.01 债券: 0.47

另一种,为四个资产df1 df2 df3 df4按最小风险配置

# coding=utf-8import mathimport tushare as tsimport pandas as pdfrom datetime import datetime, date from scipy import stats,integrateimport cvxpy as cpimport numpy as npfrom scipy.optimize import minimizeimport talibfrom datetime import datetime, datets.set_token('0f14f54c9a2346ec82eb670aeb9a296df74387aaeb88e1e5ca57518a')#获取地址 https://tushare.pro/register?reg=385920pro = ts.pro_api()#读取数据def DF( code='000300.SH'):df = pro.index_daily( ts_code=code, start_date='0101', end_date='')df=df.sort_index(ascending=False)df.index=pd.to_datetime(df.trade_date,format='%Y-%m-%d')#设置日期索引df_close=(df.close/df.close[0])#计算净值return (df_close)ret_nh=DF("NHCI.NH").valuesret_hs300=DF().valuesret_sz=DF('000012.SH').valuesA=np.cov( np.vstack([ret_nh,ret_hs300,ret_sz]))#协方差def objective(x):return x.T@A@xdef constraint1(x):return x[0]+x[1]+x[2] -1# initial guessesn = 3x0 = np.zeros(n)x0[0] = 0.3x0[1] = 0.3x0[2] = 0.4# show initial objectiveprint('Initial SSE Objective: ' + str(objective(x0)))# optimizeb = (0.0,1.0)bnds = (b,b,b)con1 = {'type': 'eq', 'fun': constraint1} #con2 = {'type': 'eq', 'fun': constraint2}#cons = ([con1,con2])solution = minimize(objective,x0,method='SLSQP',bounds=bnds,constraints=con1)x = solution.x# show final objectiveprint('Final SSE Objective: ' + str(objective(x)*np.sqrt(252)))# print solutionprint('Solution')print('x1 = ' + str(x[0]))print('x2 = ' + str(x[1]))print('x3 = ' + str(x[2]))

结果:

Initial SSE Objective: 0.012451694912513387Final SSE Objective: 0.15225413537501667Solutionx1 = 0.5189783250182055x2 = 0.013884606368403066x3 = 0.46713706861339144

两种结果一样

其他量化策略

1.python量化——alpha股票-指数期货对冲策略

2.多因子选股策略

3.海龟交易策略

4.移动平均策略——单/双均线策略

5.改进的美林时钟(介绍)

6.改进的美林时钟策略(一)

7.改进的美林时钟策略(二)

8.改进的美林时钟策略(三)

9.F-F三因子(改进代码+结果)

10.移动波动率策略

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。