2011-08-21 29 views
5

Tôi phải tính toán lợi nhuận của một vectơ cung cấp một chuỗi giá lịch sử của một cổ phiếu. Các vector là một hình thức:Làm cách nào để tính toán lợi nhuận từ một vectơ giá?

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

tôi cần phải tính toán hàng ngày Lãi/lỗ (%) - tức là tăng nó có 10,25-11,26 sau đó 11,26-14 là những gì, vv

Có một chức năng để tính toán tự động này?

Trả lời

17

Sử dụng dữ liệu mẫu của bạn, tôi nghĩ bạn có ý nghĩa như sau:

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

diff trả về vector của sự khác biệt tụt và a[-length(a)] giảm yếu tố cuối cùng của a.

+0

Hmm tôi sẽ nhận được: 9,853659% (từ 10.25 đến 11.26) 24.33393% (từ 11.26 đến 14) -3.142857% (từ 14 đến 13.56) – blakc05

+0

Có, điều này cũng giống như kết quả của tôi. – Andrie

+0

vì vậy tôi phải nhân với 100 – blakc05

18

Bạn có thể tìm thấy các chức năng trong quantmod thích hợp cho công việc của bạn:

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

này sẽ cung cấp cho bạn trở về hình học - trở lại theo một bản phân phối lognormal (ranh giới thấp hơn là -100% kể từ giá luôn không tiêu cực), do đó, ln(prices) theo phân phối bình thường (do đó bạn có thể thấy lợi nhuận nhỏ hơn -1 hoặc -100%).

Đối với phạm vi trả về "bình thường", chênh lệch giữa [P(t+1)-P(t)]/P(t)LN(P(t+1)/P(t)) sẽ không đáng kể. Tôi hi vọng cái này giúp được.

+0

Có, nhưng tại sao lại sử dụng mối quan hệ gần đúng khi không khó để tính chính xác , như trong câu trả lời tôi cung cấp? –

+0

Ngoài ra, nếu bạn đang sử dụng lợi nhuận hàng tháng, hàng năm, v.v ... (sẽ lớn hơn, ví dụ:hàng ngày trả về) các lỗi trong phương pháp này sẽ giúp bạn gặp rắc rối nhanh chóng. –

1

Bạn cũng có thể sử dụng mối quan hệ chính xác trả về bằng với số mũ của nhật ký trả về trừ một. Vì vậy, nếu Prices chứa giá của bạn, sau đây sẽ cung cấp cho bạn lợi nhuận của bạn:

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

Lưu ý rằng đây là một mối quan hệ chính xác, chứ không phải là mối quan hệ gần đúng được đưa ra trong các câu trả lời bằng @PBS.

0

Để bổ sung câu trả lời của PBS, một cách hơi phức tạp để tạo ra nhật ký trả lại là ret<-c(NA,log(a[-1])-log(a[-length(a)])).

+0

Vui lòng xem [câu trả lời này] đầu tiên (https://stackoverflow.com/help/how-to-answer) Câu hỏi này được trả lời trước, rõ ràng là bạn có thể thêm câu trả lời của mình tại đây. Nhưng bạn cần phải hiểu một số điểm trước khi trả lời. Trước tiên, không thêm câu trả lời được thêm trước đó với cùng một mã hoặc đề xuất. Thứ hai, không thêm câu trả lời quá phức tạp nếu người dùng đã hỏi rất cụ thể về vấn đề và những gì anh ấy cần để giải quyết vấn đề này. Thứ ba, Bạn có thể thêm nhận xét nếu bạn muốn đề xuất bất kỳ điều gì liên quan đến câu trả lời hoặc câu hỏi. –

0

Một khả năng khác là ROC chức năng của gói TTR:

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 (mà cũng là mặc định) cho phép đăng nhập trở lại:

ROC(a) 
## [1]   NA 0.09397892 0.21780071 -0.03193305 
Các vấn đề liên quan