循环计算价格 returns
Loop to calculate price returns
我有下面的代码来计算和制作一个data.frame,其中包含我的收盘价 table 的日志返回值。出于某种原因,我只得到 0 个值。不确定问题出在 n 值还是 i 值上。
number <- c(1:505)
n <- nrow(data_all)
for (i in number)
{returns <- log(data_all[2:n, i]) - log(data_all[1:(n-1), i])
if (i == number[1]) returns_all <- returns else
returns_all <- merge(returns_all, returns)
rm(returns)
}
感谢帮助。
我对你的问题提出 demo.according。
代码是
data_all <- as.data.frame(matrix(data = runif(10000,1,50),ncol = 505))
number <- c(1:505)
n <- nrow(data_all)
for (i in number)
{
returns <- log(data_all[2:n, i]) - log(data_all[1:(n-1), i])
if (i == number[1])
returns_all <- returns
else
returns_all <- merge(returns_all, returns)
}
我建议你可以按照下面的方式做,
data_all <- as.data.frame(matrix(data = runif(10000,1,50),ncol = 505))
number <- c(1:505)
n <- nrow(data_all)
returns_all <- NULL #I add
for (i in number)
{
returns <- log(data_all[2:n, i]) - log(data_all[1:(n-1), i])
returns_all <- cbind(returns_all,returns) #I add
}
希望能帮到你。
因为 log(a) - log(b) = log(a/b)
你可以使用 diff
和 log
函数来计算
returns 的价格系列如下:
对于不止一个系列,我建议将系列转换为xts
系列
library("xts")
#if closePx is price series with first column as date with format = 2002-02-12
#specify the corresponding date format , %Y-%m-%d,
#2002/02/12 => %Y/%m/%d
#closePx_xts = xts(closePx[,-1],order.by = as.Date(closePx[,1],format="%Y-%m-%d")
library("quantmod")
#create environment to store price data
stockNames = c("IBM","MSFT")
dataEnv = new.env()
getSymbols(stockNames, env = dataEnv, from = "2002-01-01", to = "2010-01-01")
#check prices
ls(dataEnv)
head(dataEnv$IBM)
head(dataEnv$MSFT)
#combine closing prices, using Cl function on each list member get closing price
#for each stock and use merge.xts to combine prices
#if you have missing prices checkout `zoo::na.locf` function
#i.e. na.locf function from zoo package
closePx = do.call(merge.xts,lapply(dataEnv,Cl))
#closePx = Cl(IBM)
#log returns
logRet = diff(log(closePx))
head(logRet)
# IBM.Close MSFT.Close
#2002-01-02 NA NA
#2002-01-03 0.017621634 0.032144867
#2002-01-04 0.015566342 -0.004778131
#2002-01-07 -0.012417504 -0.004946962
#2002-01-08 0.005226094 0.011889353
#2002-01-09 -0.001685453 -0.009703864
使用滞后函数,您可以计算 discrete/arithmetic returns 如下
#discrete returns
discRet = closePx/lag(closePx) - 1
head(discRet)
# IBM.Close MSFT.Close
#2002-01-02 NA NA
#2002-01-03 0.017777811 0.032667094
#2002-01-04 0.015688128 -0.004766734
#2002-01-07 -0.012340725 -0.004934746
#2002-01-08 0.005239774 0.011960312
#2002-01-09 -0.001684034 -0.009656933
还有 PerformanceAnalytics
包以获得更多实用功能
我有下面的代码来计算和制作一个data.frame,其中包含我的收盘价 table 的日志返回值。出于某种原因,我只得到 0 个值。不确定问题出在 n 值还是 i 值上。
number <- c(1:505)
n <- nrow(data_all)
for (i in number)
{returns <- log(data_all[2:n, i]) - log(data_all[1:(n-1), i])
if (i == number[1]) returns_all <- returns else
returns_all <- merge(returns_all, returns)
rm(returns)
}
感谢帮助。
我对你的问题提出 demo.according。 代码是
data_all <- as.data.frame(matrix(data = runif(10000,1,50),ncol = 505))
number <- c(1:505)
n <- nrow(data_all)
for (i in number)
{
returns <- log(data_all[2:n, i]) - log(data_all[1:(n-1), i])
if (i == number[1])
returns_all <- returns
else
returns_all <- merge(returns_all, returns)
}
我建议你可以按照下面的方式做,
data_all <- as.data.frame(matrix(data = runif(10000,1,50),ncol = 505))
number <- c(1:505)
n <- nrow(data_all)
returns_all <- NULL #I add
for (i in number)
{
returns <- log(data_all[2:n, i]) - log(data_all[1:(n-1), i])
returns_all <- cbind(returns_all,returns) #I add
}
希望能帮到你。
因为 log(a) - log(b) = log(a/b)
你可以使用 diff
和 log
函数来计算
returns 的价格系列如下:
对于不止一个系列,我建议将系列转换为xts
系列
library("xts")
#if closePx is price series with first column as date with format = 2002-02-12
#specify the corresponding date format , %Y-%m-%d,
#2002/02/12 => %Y/%m/%d
#closePx_xts = xts(closePx[,-1],order.by = as.Date(closePx[,1],format="%Y-%m-%d")
library("quantmod")
#create environment to store price data
stockNames = c("IBM","MSFT")
dataEnv = new.env()
getSymbols(stockNames, env = dataEnv, from = "2002-01-01", to = "2010-01-01")
#check prices
ls(dataEnv)
head(dataEnv$IBM)
head(dataEnv$MSFT)
#combine closing prices, using Cl function on each list member get closing price
#for each stock and use merge.xts to combine prices
#if you have missing prices checkout `zoo::na.locf` function
#i.e. na.locf function from zoo package
closePx = do.call(merge.xts,lapply(dataEnv,Cl))
#closePx = Cl(IBM)
#log returns
logRet = diff(log(closePx))
head(logRet)
# IBM.Close MSFT.Close
#2002-01-02 NA NA
#2002-01-03 0.017621634 0.032144867
#2002-01-04 0.015566342 -0.004778131
#2002-01-07 -0.012417504 -0.004946962
#2002-01-08 0.005226094 0.011889353
#2002-01-09 -0.001685453 -0.009703864
使用滞后函数,您可以计算 discrete/arithmetic returns 如下
#discrete returns
discRet = closePx/lag(closePx) - 1
head(discRet)
# IBM.Close MSFT.Close
#2002-01-02 NA NA
#2002-01-03 0.017777811 0.032667094
#2002-01-04 0.015688128 -0.004766734
#2002-01-07 -0.012340725 -0.004934746
#2002-01-08 0.005239774 0.011960312
#2002-01-09 -0.001684034 -0.009656933
还有 PerformanceAnalytics
包以获得更多实用功能