1. 首页
  2. 股票学习

如何用R计算股票收益(用R语言计算简单收益率)

简单收益率的计算公式:

期间收益率=[(期末价格-期初价格)+其他收益-卖出交易成本]/(期初价格+买入交易成本)

如何用R计算股票收益

我们以万科的股票数据(数据如上表所示)来用R语言实现一下:

1)不使用R语言的收益率计算函数

#载入金融量化分析程序包

library(quantmod)

library(PerformanceAnalytics)

#读取CSV文件里面的数据

stock<-read.csv(“stockszA.csv”)

#读取万科股票数据,(万科股票代码是000002,CSV文件中保存的格式是2)

Vanke<-stock[stock$Stkcd==”2″,]

#获取万科股票收盘价数据

close<-Vanke$Clsprc

#查看这个对象的第一个或最后部分

head(close)

[1] 7.99 7.84 7.48 7.43 7.42 7.46

#转化成带日期的格式,即时间序列

close<-xts(close,order.by=as.Date(Vanke$Trddt))

#命名close向量的列名为closeprc

names(close)<-“closeprc”

#查看close数据的前7个

head(close,7)

closeprc2014-01-02 7.992014-01-03 7.842014-01-06 7.482014-01-07 7.432014-01-08 7.422014-01-09 7.462014-01-10 7.38

#将收盘价格滞后一期

lagclose<-lag(close,1)

#查看滞后后的lagclose数据

head(lagclose)

closeprc2014-01-02 NA2014-01-03 7.992014-01-06 7.842014-01-07 7.482014-01-08 7.432014-01-09 7.42

#将这两个收盘价格合并

Calclose<-merge(close,lagclose)

head(Calclose)

closeprc closeprc.12014-01-02 7.99 NA2014-01-03 7.84 7.992014-01-06 7.48 7.842014-01-07 7.43 7.482014-01-08 7.42 7.432014-01-09 7.46 7.42

#用传统的公式法计算简单收益率

simpleret<-(close-lagclose)/lagclose

将这个向量的列名命名为simpleret

names(simpleret)<-“simpleret”

head(simpleret)

simpleret2014-01-02 NA2014-01-03 -0.0187734672014-01-06 -0.0459183672014-01-07 -0.0066844922014-01-08 -0.0013458952014-01-09 0.005390836

#将这个计算的简单收益率与原来的两个收盘价合并

calret<-merge(Calclose,simpleret)

head(calret)

closeprc closeprc.1 simpleret2014-01-02 7.99 NA NA2014-01-03 7.84 7.99 -0.0187734672014-01-06 7.48 7.84 -0.0459183672014-01-07 7.43 7.48 -0.0066844922014-01-08 7.42 7.43 -0.0013458952014-01-09 7.46 7.42 0.005390836

#计算两期的简单收益率,需要将原来的收盘价滞后2期处理,其余相同

simpleret2<-(close-lag(close,2))/lag(close,2) names(simpleret2)<-“simpleret2” calret<-merge(calret,simpleret2) head(calret,7) closeprc closeprc.1 simpleret simpleret22014-01-02 7.99 NA NA NA2014-01-03 7.84 7.99 -0.018773467 NA2014-01-06 7.48 7.84 -0.045918367 -0.0638297872014-01-07 7.43 7.48 -0.006684492 -0.0522959182014-01-08 7.42 7.43 -0.001345895 -0.0080213902014-01-09 7.46 7.42 0.005390836 0.0040376852014-01-10 7.38 7.46 -0.010723861 -0.005390836

#查看1月9号的数据,就是第6行数据

calret[6,] closeprc closeprc.1 simpleret simpleret22014-01-09 7.46 7.42 0.005390836 0.004037685如何用R计算股票收益

2)使用R函数计算简单收益率

#使用PerformanceAnalytics软件包中的CalculateReturns函数

library(PerformanceAnalytics)

# CalculateReturns(close, method = “discrete”)函数,close是要计算的向量,方法是discrete(简单收益率),相比于传统的公式方法大大提高了效率

CRSimpleret<-CalculateReturns(close, method = “discrete”) names(CRSimpleret)<-“CRSimpleret”head(CRSimpleret,7) CRSimpleret2014-01-02 NA2014-01-03 -0.0187734672014-01-06 -0.0459183672014-01-07 -0.0066844922014-01-08 -0.0013458952014-01-09 0.0053908362014-01-10 -0.010723861

#使用quantmod软件包中的periodReturn函数

library(quantmod)

# periodReturn(close, period=”daily”,type=”arithmetic”)函数,close是要计算的股价数据,period是频率,可以选择daily、weekly、monthly、quarterly和yearly几种。Type对应的arithmetic是简单收益率

PRSimpleret<-periodReturn(close, period=”daily”,type=”arithmetic”)head(PRSimpleret,7) daily.returns2014-01-02 0.0000000002014-01-03 -0.0187734672014-01-06 -0.0459183672014-01-07 -0.0066844922014-01-08 -0.0013458952014-01-09 0.0053908362014-01-10 -0.010723861

#或者dailyReturn(close,type=”arithmetic”)

pdailyReturn<-dailyReturn (close,type=”arithmetic”)head(pdailyReturn,7) daily.returns2014-01-02 0.0000000002014-01-03 -0.0187734672014-01-06 -0.0459183672014-01-07 -0.0066844922014-01-08 -0.0013458952014-01-09 0.0053908362014-01-10 -0.010723861

#TTR包中的ROC函数也可以计算简单收益率

ROCSimpleret<- ROC(close,n=1,type=”discrete”) names(ROCSimpleret)<-“ROCSimpleret”head(ROCSimpleret,7) ROCSimpleret2014-01-02 NA2014-01-03 -0.0187734672014-01-06 -0.0459183672014-01-07 -0.0066844922014-01-08 -0.0013458952014-01-09 0.0053908362014-01-10 -0.010723861

#将几个计算结果合并一起,可以看结果是一样的

Simret<-merge(close,simpleret,CRSimpleret,PRSimpleret,ROCSimpleret) head(Simret,7)

closeprc simpleret CRSimpleret daily.returns ROCSimpleret

2014-01-02 7.99 NA NA 0.000000000 NA

2014-01-03 7.84 -0.018773467 -0.018773467 -0.018773467 -0.018773467

2014-01-06 7.48 -0.045918367 -0.045918367 -0.045918367 -0.045918367

2014-01-07 7.43 -0.006684492 -0.006684492 -0.006684492 -0.006684492

2014-01-08 7.42 -0.001345895 -0.001345895 -0.001345895 -0.001345895

2014-01-09 7.46 0.005390836 0.005390836 0.005390836 0.005390836

2014-01-10 7.38 -0.010723861 -0.010723861 -0.010723861 -0.010723861

#计算年化收益率

> Ansimpleret1<-annualReturn(simpleret[-1],scale=252,geometric = TRUE)> Ansimpleret1 yearly.returns

2014-12-31 -6.309810

2015-04-14 -1.174526

#累计的年化收益率

Ansimpleret<-Return.annualized(simpleret[-1],scale=252)> Ansimpleret

simpleret

Annualized Return 0.5886241

数据来源:量化投资以R语言为分析工具

如何用R计算股票收益

原创文章,作者:吾爱财经,如若转载,请注明出处:https://www.190521.com/585.html