我对 PerformanceAnalytics 和 Quantstrat 软件包有疑问。我想测试每月再平衡投资组合策略,但我想将年费和买卖费用的影响纳入再平衡。
有什么实用的方法可以做到这一点吗?在 PerformanceAnalytics 中,我可以轻松测试每月再平衡策略,但费用是有问题的。在 Quantstrat 中,我可以轻松地合并费用,但有没有办法构建每月再平衡结构?
非常感谢,
亲切的问候。
我对 PerformanceAnalytics 和 Quantstrat 软件包有疑问。我想测试每月再平衡投资组合策略,但我想将年费和买卖费用的影响纳入再平衡。
有什么实用的方法可以做到这一点吗?在 PerformanceAnalytics 中,我可以轻松测试每月再平衡策略,但费用是有问题的。在 Quantstrat 中,我可以轻松地合并费用,但有没有办法构建每月再平衡结构?
非常感谢,
亲切的问候。
如果也可以接受替代包:这是使用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"
## ....
对于回测,我将使用包btest
中的函数PMwR
。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
。)