大类资产配置策略(一)恒定混合策略(Constant-mix Strategy)
关于恒定混合型配置策略主要介绍等权重投资组合(equally weighted portfolio)和60/40投资组合策略。
- 等权重投资组合:在有n种可投资的风险资产时,保持每种资产的投资权重为1/n。该策略实质上是一种反转策略,即在一段时间内,当某类资产获得超常上涨时,其持有数量将被调低;反之将被调高。因此,资产收益呈现均值反转的规律时,该策略能够以此获利。瑞士基金管理人Marc Faber认为,最理想的资产配置策略即等权重投资组合策略,将资产等分地投资在黄金、股票、房地产或房地产股票、债券或现金上,并且认为投资者的目的不应该是获取巨额收益,而应该是在各种环境中实现资产的保值增值。
基于中国市场的测试
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 4 14:46:55 2019@author: Administrator
"""
###
#算法实现:利用华安黄金ETF,中证全指,南华工业品指数,中证全债均分构建等权重投资组合import pandas as pd
import numpy as np
import matplotlib.pyplot as plt###数据处理#导入数据
stock = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\数据\\等权重投资组合\\中证全指全收益.xlsx')
gold = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\数据\\等权重投资组合\\华安黄金ETF.xlsx')
cash = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\数据\\等权重投资组合\\中证全债(利息再投资).xlsx')
goods = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\数据\\等权重投资组合\\南华指数:综合.xlsx')#表格整理
stock_close = pd.DataFrame(list(zip(stock['交易时间'],stock['收盘价'])))
gold_value = pd.DataFrame(list(zip(gold['交易时间'],gold['净值'])))stock_close.columns = ['交易时间','中证全指收盘价']
gold_value.columns = ['交易时间','黄金ETF净值']
goods.columns = ['交易时间','南华指数']
cash.columns = ['交易时间','中证全债收盘价']#数据提取(时间:2013-12-31至2018-12-31)
def getData(data):data = data[(data['交易时间'] > pd.to_datetime('20131231')) & (data['交易时间'] <= pd.to_datetime('20181231'))]data = data.reset_index(drop = True)return datastock_close = getData(stock_close)
gold_value = getData(gold_value)
goods = getData(goods)
cash = getData(cash)#连接表格
data_1 = pd.merge(gold_value, stock_close, how='outer',on=['交易时间'])
data_2 = pd.merge(data_1, cash, how='outer',on=['交易时间'])
data = pd.merge(data_2, goods, how='outer',on=['交易时间'])#处理缺失值
data = data.sort_values(by = '交易时间')
data = data.fillna(method='pad') #用前一个非缺失值去填充该缺失值
data = data.reset_index(drop = True)# (由价格计算收益,无需标准化)
##标准化
#def minmaxscale(data):
# data=(data-data.min())/(data.max()-data.min())
# return data
#
#A = data['交易时间']
#data = minmaxscale(data.drop(["交易时间"],axis=1))
#data =pd.concat([A,data],axis=1)def price_process(year,period,data):#功能:确定单个半年期四项资产的价格 # year,period为 int# time_0,time_1均为 string ;返回值 price为半年期交易日*4的矩阵if period%2 == 0:time_0 = str(year)+'1231'time_1 = str(year+1)+'0630'else:time_0 = str(year)+'0630'time_1 = str(year)+'1231'price = data[(data['交易时间'] > pd.to_datetime(time_0)) & (data['交易时间'] <= pd.to_datetime(time_1))] return pricedef calculate_income(money,price):# 功能:实现一个调仓期间(半年)内收入的计算# money:int,price:一位数组(dataFrame); 返回值income:一维数组A = price['交易时间']price = price.drop(["交易时间"],axis=1)p0 = price.iloc[0] #初始价格weight = [1/p0['黄金ETF净值'],1/p0['中证全指收盘价'],1/p0['中证全债收盘价'],1/p0['南华指数']] B = np.multiply(weight,price)C = B['中证全指收盘价']+B['黄金ETF净值']+B['南华指数']+B['中证全债收盘价']income = pd.concat([A,C],axis=1)return incomeyear = 2013
money = 10000
income=[]
for i in range(10):if i%2 == 1:year = year + 1data_i = price_process( year , i ,data)income_i = calculate_income( money , data_i )income.append(income_i)money = 0.25*money*income_i.iloc[-1][1]Income = pd.concat(income)
Income.columns = ['交易时间','收益']
plt.plot(Income['交易时间'],Income['收益'])
- 60/40投资组合:将60%的资产投资于股票,另外40%投资于债券。60/40分拆的目的是在产生回报的同时将风险降至最低,即使在市场波动期间也是如此。潜在的缺点是它可能不会产生与全股票投资组合一样高的回报。但对于那些没有高风险承受能力但仍希望增长潜力的投资者来说,这是一个不错的选择。
作者:小洋独角兽 链接:https://xueqiu.com/1609209543/124408106 来源:雪球
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
与之相类似的60/40投资组合的对应代码如下,同时实现了两个恒定混合策略的比较
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdate#导入数据
stock = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\模型\\Constant and mix Strategy\\data\\中证全指全收益.xlsx')
cash = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\模型\\Constant and mix Strategy\\data\\中证全债(利息再投资).xlsx')
same_weight = pd.read_excel('C:\\Users\\Administrator\\Desktop\\大类资产配置\\模型\\Constant and mix Strategy\\程序\\等权重投资组合.xlsx')
#表格整理
stock_close = pd.DataFrame(list(zip(stock['交易时间'],stock['收盘价'])))stock_close.columns = ['交易时间','中证全指收盘价']
cash.columns = ['交易时间','中证全债收盘价']#数据提取(时间:2013-12-31至2018-12-31)
def getData(data):data = data[(data['交易时间'] > pd.to_datetime('20131231')) & (data['交易时间'] <= pd.to_datetime('20181231'))]data = data.reset_index(drop = True)return datastock_close = getData(stock_close)
cash = getData(cash)#连接表格
data = pd.merge(stock_close, cash, how='outer',on=['交易时间'])#处理缺失值
data = data.sort_values(by = '交易时间')
data = data.fillna(method='pad') #用前一个非缺失值去填充该缺失值
data = data.reset_index(drop = True)#数据按特定时间提取
def price_process(year,period,data):#功能:确定单个半年期四项资产的价格 # year,period为 int# time_0,time_1均为 string ;返回值 price为半年期交易日*4的矩阵if period%2 == 0:time_0 = str(year)+'1231'time_1 = str(year+1)+'0630'else:time_0 = str(year)+'0630'time_1 = str(year)+'1231'price = data[(data['交易时间'] > pd.to_datetime(time_0)) & (data['交易时间'] <= pd.to_datetime(time_1))] return price# 收入计算
def calculate_income(money,price):# 功能:实现一个调仓期间(半年)内收入的计算# money:int,price:一位数组(dataFrame); 返回值income:一维数组A = price['交易时间']price = price.drop(["交易时间"],axis=1)p0 = price.iloc[0] #初始价格weight = [(money*0.6)/p0['中证全指收盘价'],(money*0.4)/p0['中证全债收盘价']] B = np.multiply(weight,price)C = B['中证全指收盘价']+B['中证全债收盘价']income = pd.concat([A,C],axis=1)return income#等权重投资
year = 2013
money = 10000
income=[]
for i in range(10):if i%2 == 1:year = year + 1data_i = price_process( year , i ,data)income_i = calculate_income( money , data_i )income.append(income_i)money = income_i.iloc[-1][1]Income = pd.concat(income)#采取等权重策略所获得的收益
Income.columns = ['交易时间','收益']
Income.to_excel('6040策略.xlsx',index= False)
plt.plot(Income['交易时间'],Income['收益'])
plt.gca().xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
plt.xlabel('day')
plt.ylabel('Income')
plt.legend()
plt.show()##加入股票的指数以及等权重策略的收益惊醒比较,其中same_weight来自与等权重投资组合中的Income##计算单个资产的点位(可理解为单个资产标准化的过程)
def calculate_index(start,data):S0 = data.iloc[0]wt = start/S0index = np.multiply(wt,data)return indexstock_p = calculate_index(10000,data['中证全指收盘价'])
stock_t = data['交易时间']
stock_p = pd.DataFrame(stock_p)
stock_t = pd.DataFrame(stock_t)
stock_p = pd.concat([stock_t,stock_p],axis=1)
test1 = pd.merge(Income, stock_p, how='outer',on=['交易时间'])
test = pd.merge(test1, same_weight, how='outer',on=['交易时间'])
test = test.sort_values(by = '交易时间')
test = test.fillna(method='pad') #用前一个非缺失值去填充该缺失值
test = test.reset_index(drop = True)
plt.plot(test['交易时间'],test['收益_x'],label='6040')
plt.plot(test['交易时间'],test['收益_y'],label='Equal weight')
plt.plot(test['交易时间'],test['中证全指收盘价'],label='stock')
plt.gca().xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
plt.xlabel('day')
plt.ylabel('Income')
plt.legend()
plt.show()
大类资产配置策略(一)恒定混合策略(Constant-mix Strategy)相关推荐
- 第三届大湾区杯B题思路及代码-基于宏观经济周期的大类资产配置策略构建
B 题 基于宏观经济周期的大类资产配置策略构建 赛题背景介绍: 赛题数据描述: 问题1. 寻找出高频有效的宏观经济指标,将 2001 年-2021 年国内的宏观经济运行状况划 分成不同的经济状态:(比 ...
- 【基金量化研究系列】大类资产配置研究(一)——股债二八配置策略与股债风险平价策略
文章目录 1. 引言 1.1 资产配置简介 1.2 可投标的说明 1.3 市场基本情况与数据库使用的说明 1.4 本文策略基本假设 2. 资产配置策略一--股债二八策略 2.1 策略简介 2.2 基于 ...
- 【基金量化研究系列】大类资产配置研究(二)——股债二八轮动策略
文章目录 1. 引言 2. 股债二八轮动策略 3. 动态再平衡股债二八轮动策略 4. 基于python的策略实现 4.1 策略代码 4.2. 运行结果实证分析 5. 总结 写在最后 1. 引言 在上一 ...
- 【投资策略】2022 年大类资产配置展望:稳中求进-中金公司
猜你喜欢 0.如果你想参与进元宇宙,究竟应该采取怎样的策略?1.未来10年,普通人的赚钱机会在哪里?2.华为2021数字化转型:从战略到执行.pdf3.2021抖音私域运营白皮书.pdf4.营销拓客思 ...
- 用ETF做大类资产配置,夏普比1.84,附源码
原创文章第78篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 财富自由与价值.专家有深刻的关联.成为专家,做生产者. 专家与专注,深度思考,长期主义关联. 成为对 ...
- 大类资产配置(一)均值方差模型MOV
大类资产配置专题(四)均值方差模型(MVO):https://xueqiu.com/9509413026/172746747 MVO的基本思想是:假定投资者都是风险厌恶的,根据各类资产的预期收益和方差 ...
- AI大类资产配置:从风险平价开始
原创文章第84篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 昨天听刘润讲了一个故事:话说韩寒约九球天后潘晓婷打台球.韩寒觉得自己水平就算离潘有差距,但一战之力还 ...
- 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 ...
- (10)大类资产配置一升级版股债平衡
稳定获得高收益的秘密 正确答案是B 负相关性资产的组合更能获得稳定的收益. 稳定获得高收益的秘密 市场上的资金量是一定的,股票市场和债券市场通常是此消彼长的状态. 如何才能实现不同比例的资产配置? 5 ...
最新文章
- python 应声虫怎么做_职场人士如何处理好人际关系:要服从,但不要做毫无主见的应声虫...
- PO、VO、FormBean的思考
- 机器学习/数据挖掘/算法岗位面试题汇总
- 清华计算机本科高中准备 知乎,什么是清华大学的定向生?清华大学定向生到底要不要报考?(知乎...
- 比较文件内容是否相同
- 复制公钥到多个服务器脚本
- boost::hana::always用法的测试程序
- 【Linux系统编程】I/O多路复用select、poll、epoll的区别使用
- 相机标定(二)深入理解四大坐标系与其变换关系
- Linux 命令之 userdel -- 用于删除给定的用户以及与用户相关的文件
- Java集合(二):List列表
- 三种地理参考信息模型:WMS,WFS,WCS(转)
- Vue 监视属性 watch
- 小汤学编程之JAVA基础day04——流程结构
- IOS 10 微信 ajax readystate=0 status=0 解决方法
- 5双机配置_CentOS 7 高可用双机热备实现
- 金蝶k/3 K3云之家消息查询发送是否成功SQL语句
- DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
- 【vtk实例】平面切割
- 基于PHP的简易教务管理系统