R语言资产配置: 季度战术资产配置策略研究

简介: R语言资产配置: 季度战术资产配置策略研究

概要

有人已经表示有必要在战术资产配置(Tactical Asset Allocation, 简称TAA)策略中使用共同基金而不是ETF。不是使用半月更新(每月两次),而是每季度更新,因为许多平台不允许更频繁地交易共同基金。因此,我们着手开发共同基金的TAA策略。

对于此TAA策略,我从八个不同的资产类别中选择了八个共同基金。每个共同基金的要求都包括与ETF的高度相关性,因此ETF可以根据需要替换共同基金。

我使用回测结果开发共同基金的战术策略。尽管共同基金的历史可以追溯到1996年及以后,但回测只能追溯到2003年。

每个季度选择排名最高的共同基金的指标分别为5个月和20天的收益率,每个加权50%。必须通过3个月的移动平均线才能在任何给定时期内选择排名最高的共同基金。


 
#*****************************************************************

# 载入历史数据

#*****************************************************************

load.packages('quantmod')
           

data <- new.env()

getSymbols.extra(tickers, src = 'yahoo', from = '1970-01-01', env = data, set.symbolnames = T, auto.assign = T)

for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)


# 检查数据

plota.matplot(scale.one(data$prices)

#*****************************************************************

# 设置

#*****************************************************************

data$universe = data$prices > 0
frequency = 'quarters'
# 查找期末,可以是“周”,“月”,“季度”,“年”

commission = list(cps = 0.01, fixed = 10.0, percentage = 0.0)
#价格滞后1天

#prices = mlag(prices)

#*****************************************************************

# 每个重新平衡期间权重相等


#******************************************************************


data$weight[period.ends,] = ntop(prices[period.ends,], n)




策略:

根据每个季度选择排名最高的资产,5个月和20天的总收益率各占50%。必须通过过滤器才能选择排名第一的共同基金,在任何给定期间内。过滤器是3个月的移动平均线。



# 计算3个月移动平均值

sma = bt.apply.matrix(prices, SMA, 3*21)
# 如果价格跌破3个月移动平均线,请套现

go2cash = prices <= sma
go2cash.d = ifna(go2cash, T)
# 计算几个月的移动平均值

sma = bt.apply.matrix(prices, SMA, 3, periodicity='months')
go2cash = prices <= sma
go2cash.m = ifna(go2cash, T)
# 以下所有逻辑均在period.ends完成

#*****************************************************************

# 排名总分

#*****************************************************************

# 分配

# 如果资产高于其3个月移动平均值,则进行分配

weight = iif(go2cash.d, 0, target.allocation)
# 否则,它的权重分配给现金

data$weight[period.ends,] = weight
# 相同,但使用每月移动平均线触发

data$weight[period.ends,] = weight
#*****************************************************************

# 将总分的每个部分排在第一位

#*****************************************************************

# 目标分配

# 如果资产高于其3个月移动平均线,则进行分配

weight = iif(go2cash.d, 0, target.allocation)
#否则,它的权重分配给现金

weight$CASH = 1 - rowSums(weight)
data$weight[] = NA
data$weight[period.ends,] = weight
#相同,但使用每月移动平均线触发现金

weight = iif(go2cash.m, 0, target.allocation)
weight$CASH = 1 - rowSums(weight)
#*****************************************************************

# 报告

#*****************************************************************

plotbt(models)
 

print(plotstrategy(models))
  ew  QTS.d  QTS.m  QTS.RANK.d  QTS.RANK.m

时期  Jun1996 - Mar2015  Jun1996 - Mar2015  Jun1996 - Mar2015  Jun1996 - Mar2015  Jun1996 - Mar2015

复合增长率  8.13  16.08  19.32  16.57  20.12

夏普比率  0.67  0.91  1.07  0.96  1.15

DVR  0.61  0.76  0.81  0.82  0.86

波动性  12.89  18.28  17.99  17.54  17.32

MaxDD  -44.61  -26.78  -26.78  -25  -19.39

AvgDD  -1.55  -3.09  -3.01  -2.87  -2.77

风险价值  -1.16  -1.79  -1.75  -1.71  -1.69

条件风险价值  -1.96  -2.82  -2.72  -2.71  -2.61

Exposure  99.98  99.98  99.98  99.98  99.98

假设每个季度只选择一个最优基金,那么该策略对输入参数很敏感。

最后,让我们查看各个时期:


dates.range = c('2002-12-31::2014-08-15', '::2002-12-31', '2014-08-15::')
print(plot(models1))
}

 

 

 

 

 

 

总之,本文开发的共同基金策略可能对那些必须使用共同基金且只能按季度交易的投资者有所帮助。ETF重复了这种策略,因此,希望减少交易(仅按季度)的投资者可能也会发现此策略有用。


相关文章
|
7月前
|
数据库
R语言关联规则Apriori对抗肿瘤中药数据库知识发现研究(下)
R语言关联规则Apriori对抗肿瘤中药数据库知识发现研究(下)
|
7月前
|
数据可视化 算法 大数据
数据分享|R语言改进Apriori关联规则挖掘研究西安PM2.5含量与天气因素关系数据可视化
数据分享|R语言改进Apriori关联规则挖掘研究西安PM2.5含量与天气因素关系数据可视化
|
4月前
|
数据采集 机器学习/深度学习 数据挖掘
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
|
5月前
|
机器学习/深度学习 算法 数据挖掘
R语言在金融分析中扮演重要角色,用于风险管理、资产定价、量化交易、市场预测和投资组合优化。
【7月更文挑战第2天】R语言在金融分析中扮演重要角色,用于风险管理、资产定价、量化交易、市场预测和投资组合优化。其开源、强大的统计功能和丰富的包(如`PerformanceAnalytics`、`quantstrat`、`forecast`)支持从风险评估到策略回测的各种任务。R的灵活性和社区支持使其成为金融专业人士应对复杂问题的首选工具。
268 1
|
7月前
|
算法 搜索推荐
R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例
R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例
|
7月前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
7月前
|
数据挖掘
R语言主成分、因子分析、聚类对我国城镇私营单位就业人员平均工资数据研究与分析
R语言主成分、因子分析、聚类对我国城镇私营单位就业人员平均工资数据研究与分析
|
7月前
|
机器学习/深度学习 算法 数据库
数据分享|R语言用核Fisher判别方法、支持向量机、决策树与随机森林研究客户流失情况
数据分享|R语言用核Fisher判别方法、支持向量机、决策树与随机森林研究客户流失情况
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
R语言SVM、决策树与因子分析对城市空气质量分类与影响因素可视化研究
R语言SVM、决策树与因子分析对城市空气质量分类与影响因素可视化研究
|
7月前
|
监控 数据可视化 数据挖掘
R语言质量控制图、质量管理研究分析采购订单数量、CPU时间、纸厂产出、钢板数据可视化
R语言质量控制图、质量管理研究分析采购订单数量、CPU时间、纸厂产出、钢板数据可视化
下一篇
DataWorks