有人已经表示有必要在战术资产配置(Tactical Asset Allocation, 简称TAA)策略中使用共同基金而不是ETF。
不是使用半月更新(每月两次),而是每季度更新,因为许多平台不允许更频繁地交易共同基金。因此,我们着手开发共同基金的TAA策略。
可下载资源
对于此TAA策略,我从八个不同的资产类别中选择了八个共同基金。每个共同基金的要求都包括与ETF的高度相关性,因此ETF可以根据需要替换共同基金。
×
什么是战术性资产配置?战术性资产配置策略。战术性资产配置是根据资本市场环境及经济条件对资产配置状态进行动态调整,从而增加投资组合价值的积极战术性资产配置。投资者可以采取以下三种方法:一是根据市场变化不断改变主要资产的权重,这种战术性资产配置方法在投资组合保险策略上得到某种程度的体现。二是立足选取资产类型中超过平均收益的投资品种(如改变投资组合的日系数和久期)。三是将上述两种方法同时使用,这样就成为积极、主动、动态的跟踪市场变化并随时进行时机选择和个股选择的自查配置策略。
与战略性资产配置过程相比,战术性资产配置策略在动态调整资产配置状态时.需要根据实际情况的改变重新预测不同资产类别的预期收益情况,但战术性资产配置未再次估计投资者偏好与风险承受能力是否发生了变化。
在风险承受能力方面.战术性资产配置是假设投资者的风险承受能力不随市场和白身资产负债状况的变化而改变。这一类投资者将在风险收益报酬较高时比战术性资产配置投资者更多地投资于风险资产,因而从长期来看.他们将战术性资产配置取得更丰厚的投资回报。
我使用回测结果开发共同基金的战术策略。尽管共同基金的历史可以追溯到1996年及以后,但回测只能追溯到2003年。
每个季度选择排名最高的共同基金的指标分别为5个月和20天的收益率,每个加权50%。必须通过3个月的移动平均线才能在任何给定时期内选择排名最高的共同基金。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#***************************************************************** # 载入历史数据 #***************************************************************** 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)) |

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#***************************************************************** # 设置 #***************************************************************** 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个月的移动平均线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# 计算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完成 |

1 |
print(plotstrategy(models)) |
1 2 3 4 5 6 7 8 9 10 11 12 |
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 |
假设每个季度只选择一个最优基金,那么该策略对输入参数很敏感。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#***************************************************************** # 排名总分 #***************************************************************** # 分配 # 如果资产高于其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) |
最后,让我们查看各个时期:
1 2 3 4 |
dates.range = c('2002-12-31::2014-08-15', '::2002-12-31', '2014-08-15::') print(plot(models1)) } |



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