-1

EDIT UPDATED performanceAnalytics の作成者による素晴らしい投稿を見つけました。この記事は基本的に、ポートフォリオの累積リターンの内外をまとめたものですが、著者が示しているように、かなりトリッキーです (彼も間違っていました)。参考までに: https://tradeblotter.wordpress.com/2014/09/25/aggregate-portfolio-contributions-through-time/

だから私は私の2つの数字が合計されるべきであるはずの切り株に少し遭遇しましたが、そうではありません. 以下は、銘柄の選択肢とポートフォリオの重み付けを含むデータフレームの例です。

      stock.choices stock_weights
1          GOOG         0.150
2          AMZN         0.200
3            BA         0.250
4            FB         0.225
5          AAPL         0.175

次に、ポートフォリオのリターンを表示するために、return.portfolio 関数を rich.index = TRUE で使用します。

Portfolio <- merge.xts(GOOG,AMZN,BA,FB,AAPL)
dollar_growth <- Return.portfolio(Portfolio, weights = stock_weights, wealth.index = TRUE)

dygraph を使用して、ドルの成長を視覚化します。

dygraph(dollar_growth, main = "Portfolio Growth Base.$1") %>% dyAxis("y", label = "$")%>%
  dyAnnotation("2017-05-01", text = May1, tooltip = "Initial Investment", width = 70, height = 18, tickHeight = -75)%>%
  dyAnnotation(LastDay, text = Today, tooltip = "Percentage Increase",width = 70,  attachAtBottom = TRUE) %>%
  dyAxis("y", label = "Dollars USD")

この例では、5 月 1 日を投資の開始時点として使用します。このポートフォリオでは、5 月 1 日から 11.5% のリターンを得ています。現在の価値 ($1.37) を 5 月 1 日 ($1.23057) で割って計算すると、11.33% の増加が得られます。

しかし、別の方法を使用すると、奇妙な別の答えが得られます。なぜなら、この 2 番目の方法がポートフォリオのリターンを計算する正確な方法だと思っていたからです。

まず、5 月 1 日の株価と現在の値を含むデータフレームを作成します。次に、両方にポートフォリオのそれぞれの重みを掛けます。出力は次のとおりです。

      May1 Current Stock.Weights    May1C  CurrentC
GOOG 912.57  926.50         0.150 136.8855 138.97500
AMZN 948.23  965.90         0.200 189.6460 193.18000
BA   182.39  238.78         0.250  45.5975  59.69500
FB   152.46  170.95         0.225  34.3035  38.46375
AAPL 146.58  158.63         0.175  25.6515  27.76025

May1C = May1 * Stock.Weights | CurrentC = Current * Stock.Weights

May1C と CurrentC の両方を合計すると、次のようになります。

> sum(df$May1C)
[1] 432.084
> sum(df$CurrentC)
[1] 458.074

ポートフォリオの現在の価値は、株式の選択*それぞれの重みであるため、これは私が考えるものです。これによる増加は 6.015% にすぎません。

私の質問は次のとおりです。return.portfolio 関数は 11.3% の増加を返しますが、2 番目のメソッドは 6.015% を返します。

return.portfolio を使用すると、 verbose = TRUE 関数が時間の経過とともに変化する株式の重みを返すことがわかったコメントに返信して編集します。この出力は、EOP と BOP で経時的に変化する重みを示しています。

参考までに、dygraph 出力を実行するための完全なコードを次に示します。

library(PerformanceAnalytics)
library(quantmod)
library(dygraphs)
library(scales)

daily_stock_returns = function(ticker) {

    symbol <- getSymbols(ticker, src = 'google', auto.assign = FALSE, warnings = FALSE)
    symbol <- xts::last(symbol, "1 year")
    data <- periodReturn(symbol, period = 'daily', type = 'log')
    colnames(data) <- as.character(ticker)
    assign(ticker, data, .GlobalEnv)
}


    daily_stock_returns("GOOG")
    daily_stock_returns("AMZN")
    daily_stock_returns("BA")
    daily_stock_returns("FB")
    daily_stock_returns("AAPL")
    Portfolio <- merge.xts(GOOG,AMZN,BA,FB,AAPL)
    test <- periodReturn(Portfolio, period = 'monthly', type = 'log')
    stock_weights <- c(.15, .20, .25, .225, .175)

    dollar_growth <- Return.portfolio(Portfolio, weights = stock_weights, wealth.index = TRUE)
    May1 <- as.numeric(dollar_growth["2017-05-01"]) 
    format(round(May1, 3), nsmall = 2)
    Today <- as.numeric(xts::last(dollar_growth, "1 day"))
    Today <- ((Today/May1)-1) %>% percent()
    format(round(May1, 3), nsmall = 2)
    LastDay <- xts::last(dollar_growth, "1 day")
    dygraph(dollar_growth, main = "Portfolio Growth Base.$1") 
4

1 に答える 1