每月收费的再平衡策略
Posted
技术标签:
【中文标题】每月收费的再平衡策略【英文标题】:Monthly Rebalancing Strategies with Fees 【发布时间】:2021-03-28 12:03:21 【问题描述】:我对 PerformanceAnalytics 和 Quantstrat 软件包有疑问。我想测试每月重新平衡投资组合策略,但我想结合年费和买卖费用的影响进行重新平衡。
有什么实用的方法吗?在 PerformanceAnalytics 中,我可以轻松测试每月再平衡策略,但费用是有问题的。在 Quantstrat 中,我可以轻松地合并费用,但有没有办法构建每月再平衡结构?
非常感谢,
亲切的问候。
【问题讨论】:
是的,您可以在 quantstrat 中执行此操作(或类似的操作)。看看用applyStrategy.rebalancing()
【参考方案1】:
如果替代包也可以接受:以下是使用 PMwR
包的方法。
从示例数据开始:来自 Kenneth French 网站的 30 个行业系列。
library("NMOF")
library("PMwR")
library("datetimeutils")
library("zoo")
P <- French(tempdir(),
"30_Industry_Portfolios_daily_CSV.zip",
price.series = TRUE, na.rm = TRUE)
P <- zoo(P, as.Date(row.names(P)))
P <- window(P, start = as.Date("2000-1-1"))
现在我们计算交易发生的日期。
eoy <- nth_day(index(P), period = "year", n = "last")
## [1] "2000-12-29" "2001-12-31" "2002-12-31" "2003-12-31"
## [5] "2004-12-31" "2005-12-30" "2006-12-29" "2007-12-31"
## [9] "2008-12-31" "2009-12-31" "2010-12-31" "2011-12-30"
## ....
eom <- nth_day(index(P), period = "month", n = "last")
## [1] "2000-01-31" "2000-02-29" "2000-03-31" "2000-04-28"
## [5] "2000-05-31" "2000-06-30" "2000-07-31" "2000-08-31"
## [9] "2000-09-29" "2000-10-31" "2000-11-30" "2000-12-29"
## ....
对于回测,我将使用PMwR
包中的函数btest
。它将评估目标投资组合的函数signal
作为输入。假设我们想要一个等权重的投资组合;那么signal
可能如下所示:
signal <- function()
k <- ncol(Close())
rep(1/k, k)
btest
还接受参数cashflow
,可用于在现金余额中添加/减去任意金额。以下函数在每年年底扣除总财富的 10%(这只是一个示例)。
cf <- function()
if (Timestamp(0) %in% eoy)
-Wealth()*0.1
else
0
这将处理年费。包含与交易金额成比例的交易费用的最简单方法是通过单独的参数tc
。
还需要运行回测:
bt <- btest(list(coredata(P)),
timestamp = index(P),
signal = signal,
do.signal = eom,
cashflow = cf,
tc = 0.0025, ## 0.25% transaction fees
convert.weights = TRUE,
initial.cash = 100)
summary(bt)
plot(bt)
## ---------------------------------------------------------
## 03 Jan 2000 ==> 30 Oct 2020 (5242 data points, 0 NAs)
## 100 55.2453
## ---------------------------------------------------------
## High 110.97 (28 Dec 2000)
## Low 35.32 (09 Mar 2009)
## ---------------------------------------------------------
## Return (%) -2.8 (annualised)
## ---------------------------------------------------------
## Max. drawdown (%) 68.2
## _ peak 110.97 (28 Dec 2000)
## _ trough 35.32 (09 Mar 2009)
## _ recovery (NA)
## _ underwater now (%) 50.2
## ---------------------------------------------------------
## Volatility (%) 19.1 (annualised)
## _ upside 12.1
## _ downside 14.7
## ---------------------------------------------------------
##
## Monthly returns ▁▁▃▇█▂▁
##
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec YTD
## 2000 0.0 -3.6 8.0 -0.2 -0.8 0.0 0.3 6.0 -2.3 1.4 -3.8 -4.7 -0.7
## 2001 2.8 -3.5 -4.8 7.5 1.8 -3.1 -1.3 -3.0 -11.1 3.6 6.6 -7.1 -12.5
(披露:我是 PMwR
、NMOF
和 datetimeutils
包的维护者。)
【讨论】:
非常感谢。看起来不错。我能找到 PMwR 和 quantstrat 的详细比较吗? 我不使用quantstrat
,所以我真的说不出来;对不起。对于PMwR
,您可以查看enricoschumann.net/R/packages/PMwR/manual/PMwR.html#backtesting 的文档。最近的教程在papers.s-s-rn.com/sol3/papers.cfm?abstract_id=3374195以上是关于每月收费的再平衡策略的主要内容,如果未能解决你的问题,请参考以下文章