投資組合管理
計算投資組合的營業額
我正在嘗試計算投資組合策略的營業額。
首先,我生成一些隨機數據並為其分配日期:
data <- replicate(6,rnorm(1000)) data <- as.data.frame(data) dates<-seq(as.Date("1932/09/01"), as.Date("2015/12/01"), by = "1 month",tzone="GMT")-1 rownames(data)<-dates
我將其轉換為 xts 格式:
library(xts) data<-as.xts(data,dateFormat="Date")
然後我使用 Return.portfolio() 函式來計算重新平衡的權重,假設採用等權重策略:
library(PerformanceAnalytics) results <- Return.portfolio(data,rebalance_on="months",geometric=F,verbose=T)
為了計算營業額,我假設我需要期初權重和期末權重。
我從結果中提取這些:
bop <- results$BOP.Weight #beginning of period weights eop <- results$EOP.Weight #end of period weights
然後計算我減去的營業額
bop
並eop
取絕對值:f<-abs(bop-eop)
最後,為了計算營業額,我使用以下公式:
sum(f)*(1/(nrow(data)-1))
然而,當我在真實數據上測試時(我知道營業額應該是多少),我用這種方法得到了巨大的、不切實際的數字。
我究竟做錯了什麼?
我對營業額的定義來自:Demiguel 等人約束投資組合規範http://faculty.london.edu/avmiguel/DeMiguelGarlappiNogalesUppalMS.pdf第 806 頁
定義是:
首先,您使用的是不良數據。min(data) 讓我得到-3.67(這是隨機記住的),這將是-367%,因為該職位破產並取出另外兩個(可能在槓桿式porftolio中)。但是,為了獲得可重複的答案,讓我們使用 edhec 數據集,只需對原始程式碼進行很少的更改。
library(PerformanceAnalytics) data(edhec) results <- Return.portfolio(edhec,rebalance_on="months",verbose=T) bop <- results$BOP.Weight #beginning of period weights eop <- results$EOP.Weight #end of period weights
在權重不相等的情況下,這裡有可能出錯,因為當它應該是以下期間權重時,您從期末權重中減去期初權重。例如,市場改變了你的權重,你需要重新設置。
f<-abs(bop-eop) YourTurnover=sum(f)*(1/(nrow(edhec)-1)) # 0.01242465 SanityCheck=sum(abs(eop-1/ncol(edhec)))/(nrow(edhec)-1) #0.01242465
請注意,上述營業額的定義是所有百分比權重變化的總和除以交易期數。此外,作者不計算他們營業額中的初始分配(例如,從現金到投資的 100% 變化)。健全性檢查僅適用於電子戰案例。
平均營業額為 1.24%,這似乎符合等權重策略。
如果您沒有執行等重策略,我懷疑是 bop-eop 線。因為它應該是 EoP 權重 - 下一個 BoP 權重。