程式

Return.portfolio 和 Return.rebalancing 如何在 R 的性能分析中工作?

  • September 12, 2014

我對R 中 Performance Analytics 包中的函式Return.portfolio/有疑問。Return.rebalancing

我以包中描述的範例為例:

> data(edhec)
> data(weights)
> Return.portfolio(edhec,weights = weights)
          portfolio.returns
2000-01-31      0.0115135339
2000-02-29      0.0218963077
2000-03-31      0.0093379014
2000-04-30      0.0037485690
2000-05-31      0.0056601357
2000-06-30      0.0140301727
2000-07-31      0.0043295816
2000-08-31      0.0190997787
2000-09-30      0.0014645727
2000-10-31      0.0014264155
2000-11-30      0.0061304707
2000-12-31      0.0201417025
2001-01-31      0.0150594011
2001-02-28      0.0066011872
2001-03-31      0.0131395159
2001-04-30      0.0007491561
2001-05-31      0.0091626407
2001-06-30     -0.0000527803
2001-07-31      0.0020738201
2001-08-31      0.0102713727
2001-09-30      0.0002531717
2001-10-31      0.0142380976
2001-11-30     -0.0048429083
2001-12-31      0.0061645640
2002-01-31      0.0093372403
2002-02-28     -0.0011217258
2002-03-31      0.0063415238
2002-04-30      0.0082130861
2002-05-31      0.0058782220
2002-06-30      0.0007565192
2002-07-31     -0.0059246865
2002-08-31      0.0072696705
2002-09-30      0.0026434591
2002-10-31      0.0014298494
2002-11-30      0.0105008400
2002-12-31      0.0127186414
2003-01-31      0.0159481947
2003-02-28      0.0092381495
2003-03-31      0.0001639493
2003-04-30      0.0113937775
2003-05-31      0.0199355028
2003-06-30      0.0020659339
2003-07-31     -0.0039260851
2003-08-31      0.0035691334
2003-09-30      0.0114224214
2003-10-31      0.0116788871
2003-11-30      0.0069773935
2003-12-31      0.0117366500
2004-01-31      0.0137408298
2004-02-29      0.0086731496
2004-03-31      0.0030241495
2004-04-30     -0.0031369461
2004-05-31     -0.0006375207
2004-06-30      0.0039463036
2004-07-31      0.0010463350
2004-08-31      0.0022005523
2004-09-30      0.0065116125
2004-10-31      0.0042086646
2004-11-30      0.0164591318
2004-12-31      0.0094498415
2005-01-31      0.0030113644
2005-02-28      0.0103238498
2005-03-31      0.0008083756
2005-04-30     -0.0052241413
2005-05-31      0.0020622011
2005-06-30      0.0081079582
2005-07-31      0.0118744372
2005-08-31      0.0073621313
2005-09-30      0.0101843734
2005-10-31     -0.0012149988
2005-11-30      0.0076005987
2005-12-31      0.0089111835
2006-01-31      0.0193600000
2006-02-28      0.0050290768
2006-03-31      0.0122895863
2006-04-30      0.0161541728
2006-05-31      0.0028728086
2006-06-30      0.0008591674
2006-07-31      0.0029350825
2006-08-31      0.0061800530
2006-09-30      0.0020263120
2006-10-31      0.0128266559
2006-11-30      0.0129600658
2006-12-31      0.0126486355
2007-01-31      0.0106456451
2007-02-28      0.0105816673
2007-03-31      0.0082080685
2007-04-30      0.0120657529
2007-05-31      0.0130340469
2007-06-30      0.0054403426
2007-07-31     -0.0001698053
2007-08-31     -0.0096513313
2007-09-30      0.0156251014
2007-10-31      0.0171940678
2007-11-30     -0.0113391902
2007-12-31      0.0030447149
2008-01-31     -0.0120408215
2008-02-29      0.0045617517
2008-03-31     -0.0188804492
2008-04-30      0.0121140702
2008-05-31      0.0127356881
2008-06-30     -0.0003266534
2008-07-31     -0.0118233426
2008-08-31     -0.0064733095
2008-09-30     -0.0478450597
2008-10-31     -0.0630740252
2008-11-30     -0.0354050961
2008-12-31     -0.0046962342
2009-01-31      0.0089404911
2009-02-28     -0.0027223978
2009-03-31      0.0050820481
2009-04-30      0.0229829814
2009-05-31      0.0374323984
2009-06-30      0.0111071893
2009-07-31      0.0255805068
2009-08-31      0.0179835194
Warning message:
In Return.portfolio(edhec, weights = weights) :
 number of assets in beginning_weights is less than number of columns in returns, so subsetting returns.
> sum(as.numeric(edhec[151,1:11])*as.numeric(weights[8,]))
[1] 0.02614121
>

這些回報是如何計算的Return.portfolio?與 edhec 相比,權重缺失了兩列。這就是我拍的原因

edhec[151,1:11]

此外,我們看到 weights 是一個xts只有 8 行的對象。是否Return.portfolio檢查日期並在該期間採用正確的權重?此外,與 有什麼區別Return.rebalancing

是否正確,如果我們總結前 10 個元素

Return.portfolio(edhec,weights = weights)

我們會及時得到總回報 $ t=10 $ ?

參考:使用的軟體包是R程式語言,用於數據分析和視覺化,包括統計和圖形。R 是一套用於數據處理、計算和圖形顯示的集成軟體設施。R 項目是開源的,可在http://www.r-project.org/

此外,R 統計程序有大量可供整個社區使用的項目儲存庫,https://r-forge.r-project.org/ 其中一個項目是**ReturnAnalytics——**金融時間序列的績效和風險分析,包括 PerformanceAnalytics 和 PortfolioAnalytics 包。該項目可通過匿名訪問獲得:svn checkout svn://svn.r-forge.r-project.org/svnroot/returnanalytics/

我要把你的問題一分為二。

您要問的關鍵是 Return.rebalancing 如何處理您的不同頻率和數量的資產收益和權重對象。

數據:

它對 R 的第一個 ncol(weight) 列進行子集化(如 ncol(edhec) > ncol(weights)

ncol R 現在是 11。檢查 R 中的第一個日期是否小於 W 中的第一個日期如果為 true,則從 2000-01-02/" 開始將 R 子集 nrow(R) 現在是 116,因為您不能有返回系列在初始權重之前。

數據處理:

然後它呼叫 Return.portfolio.geometric,它只是將收益乘以這兩個矩陣的權重。

因為權重是每年一次,而 edhec 是每月一次。

它需要計算中間年份

所以它抓住了中間時期的回歸系列。

循環遍歷所有返回子系列,計算權重 * 返回期間的前一個數量(本質上是浮動它並在權重矩陣上重新平衡)。它取收益序列中每個週期的總值,然後除以該週期的起始值,計算出週期收益。

一個簡單的展示如下。

  1. 取初始權益值 (1)
  2. 取再平衡年初始權重
  3. 計算期末權益(初始權益權重回報)
  4. 計算期間的回報
  5. 在權重矩陣中指定的每個重新平衡日期重複兩次。

eop_value

$$ k, $$= (1 + coredata(返回$$ j, $$)) * bop_value$$ k, $$ eop_value_total$$ k $$=總和(eop_value$$ k, $$) 對

$$ k $$= eop_value_total$$ k $$/end_value - 1 end_value = eop_value_total$$ k $$

上面的程式碼計算每個倉位的新總淨值並將其相加。

因此,它類似於您的權重浮動,然後在權重矩陣中的每個日期重置。

引用自:https://quant.stackexchange.com/questions/14661