2011-08-21 52 views
5

我必須計算給出股票歷史價格序列的向量的回報。載體是形式:如何計算價格向量的回報?

a <- c(10.25, 11.26, 14, 13.56) 

我需要計算每日的收益/損失(%) - 即什麼是從11.26到14它已經從10.25到11.26,則增益等

有一個函數來自動計算這個?

回答

17

使用您的樣本數據,我想你指的是以下幾點:

a <- c(10.25, 11.26, 14, 13.56) 
> diff(a)/a[-length(a)] 
[1] 0.09853659 0.24333925 -0.03142857 

diff返回滯後的差異矢量和a[-length(a)]下降的最後一個元素。

+0

嗯,我應該得到:9.853659%(從10.25至11.26)24.33393%(從11.26至14)-3.142857%(從14至13.56) – blakc05

+0

是的,這與我的結果相同。 – Andrie

+0

所以我必須乘以100 – blakc05

18

您可能會發現功能quantmod相關工作:

> require(quantmod) 
> Delt(a) 
    Delt.1.arithmetic 
[1,]    NA 
[2,]  0.09853659 
[3,]  0.24333925 
[4,]  -0.03142857 
1
ret<-diff(log(a)) 

這會給你的幾何回報 - 返回遵循對數正態分佈(下限爲-100%,因爲價格總是非負),因此ln(prices)遵循正態分佈(因此您可能會看到回報小於-1或-100%)。

對於「正常」收益範圍,[P(t+1)-P(t)]/P(t)LN(P(t+1)/P(t))之間的差異應該可以忽略不計。我希望這有幫助。

+0

是的,但是爲什麼在計算確切的關係時使用近似關係,在我提供的答案中? –

+0

此外,如果您使用的是每月,每年等返回(這將比每日退貨)這種方法中的錯誤會讓你很快陷入困境。 –

1

您也可以使用返回等於log對數的指數減去一的確切關係。因此,如果Prices包含你的價格,下面會給你回報:

Returns = exp(diff(log(Prices))) - 1 

注意,這是一個確切關係,而不是由@PBS答案給出的近似關係。

0

要補充PBS的回答,生成日誌回覆的一個稍微複雜的方法是ret<-c(NA,log(a[-1])-log(a[-length(a)]))

+0

請首先看到[如何回答](https://stackoverflow.com/help/how-to-answer) 這個問題已經回答了,顯然,你可以在這裏添加你的答案。但是在回答之前你需要了解一些觀點。首先,不要添加之前添加了相同代碼或建議的答案。其次,如果用戶非常具體地詢問了問題以及他需要解決什麼問題,請不要添加過於複雜的答案。第三,如果您想就回答或問題提出任何建議,您可以添加評論。 –

0

另一種可能性是TTR包的ROC功能:

library(TTR) 
a <- c(10.25, 11.26, 14, 13.56) 
ROC(a, type = "discrete") 
## [1]   NA 0.09853659 0.24333925 -0.03142857 

type = continuous(這也是默認設置):登錄回報:

ROC(a) 
## [1]   NA 0.09397892 0.21780071 -0.03193305