每月收费的再平衡策略

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

(披露:我是 PMwRNMOFdatetimeutils 包的维护者。)

【讨论】:

非常感谢。看起来不错。我能找到 PMwR 和 quantstrat 的详细比较吗? 我不使用quantstrat,所以我真的说不出来;对不起。对于PMwR,您可以查看enricoschumann.net/R/packages/PMwR/manual/PMwR.html#backtesting 的文档。最近的教程在papers.s-s-rn.com/sol3/papers.cfm?abstract_id=3374195

以上是关于每月收费的再平衡策略的主要内容,如果未能解决你的问题,请参考以下文章

Kafka-分区分配策略

kafka 再平衡机制

Flink 再平衡和链式策略

股债二八平衡策略

处理不平衡数据的策略

P3380 线段树套平衡树