首页 > 解决方案 > 每月收费的再平衡策略

问题描述

我对 PerformanceAnalytics 和 Quantstrat 软件包有疑问。我想测试每月再平衡投资组合策略,但我想将年费和买卖费用的影响纳入再平衡。

有什么实用的方法可以做到这一点吗?在 PerformanceAnalytics 中,我可以轻松测试每月再平衡策略,但费用是有问题的。在 Quantstrat 中,我可以轻松地合并费用,但有没有办法构建每月再平衡结构?

非常感谢,

亲切的问候。

标签: ralgorithmic-tradingquantstratperformanceanalyticsback-testing

解决方案


如果也可以接受替代包:这是使用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中的函数PMwRsignal它将评估目标投资组合的函数作为输入。假设我们想要一个等权重的投资组合;那么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

(披露:我是包的维护者PMwRNMOF并且datetimeutils。)


推荐阅读