1

100 以上の株式に関する 10 年前の情報を含む株式データのデータ フレームがあります。このデータに対して quantmod で MACD 関数を実行しようとしていますが、異なる銘柄で計算を分割する方法がわかりません。たとえば、私のデータ フレームの一部は次のようになります。

   data<-structure(list(market = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 3L, 3L), .Label = c("AD1", "AD2", "AD3"), class = "factor"), 
date = structure(c(15623, 15624, 15625, 15628, 15623, 15624, 
15625, 15628, 15625, 15628), class = "Date"), open = c(101.52, 
101.68, 102.1, 101.99, 100.73, 100.85, 101.57, 101.01, 100.56, 
100.42), high = c(102.07, 102.39, 102.36, 102.07, 101.4, 
101.59, 101.62, 101.35, 100.56, 100.71), low = c(101.26, 
101.56, 101.63, 101.5, 100.59, 100.85, 101.07, 100.97, 100.56, 
100.41), last = c(101.78, 102.08, 101.76, 101.91, 101.08, 
101.37, 101.06, 101.21, 100.41, 100.56)), .Names = c("market", 
"date", "open", "high", "low", "last"), row.names = c(1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 11L, 12L), class = "data.frame", na.action = structure(9:10,.Names = c("9", 
"10"), class = "omit"))

このデータ フレームを MACD 関数に渡しながら、各市場を個別に計算するにはどうすればよいですか。お手伝いありがとう。私はRが初めてです。

4

2 に答える 2

2

byここを使用してグループ化しmarket、各グループに関数を適用できます。

library(quantmod)
by(data,data$market,function(x)
{
  ## coerece the group to an xts object
  dat.xts <- xts(x[,-c(1:2)],x$date)
  ## EMA ~ MACD with type 'EMA'
  EMA( dat.xts,n=min(nrow(dat.xts),10))

})

data$market: AD1
               [,1]
2012-10-10       NA
2012-10-11       NA
2012-10-12       NA
2012-10-15 101.8225
--------------------------------------------------------------------------------------------------------------- 
data$market: AD2
             [,1]
2012-10-10     NA
2012-10-11     NA
2012-10-12     NA
2012-10-15 101.04
--------------------------------------------------------------------------------------------------------------- 
data$market: AD3
             [,1]
2012-10-12     NA
2012-10-15 100.49
于 2013-04-11T18:49:10.270 に答える
0

まず、MACD関数 inはnotをquantmod期待します。xtsdata.frame

したがって、最初に分割data.frameしてmarketから、それぞれの結果data.frameを関数に変換してから、関数xtsを適用する必要がありmacdます。

LL <- split(data, data$market)

result <- lapply(LL, 
       function(DF) { 
           XTS <- xts(DF[, -2], order.by = as.POSIXct(DF$date, format="%Y-%m-%d", tz="GMT"),tzone='GMT')
           return(MACD(XTS$last))                
       }
      )
于 2013-04-11T18:40:16.807 に答える