1

30 日ローリング ボラティリティを計算する関数を設計しようとしています。日付と 2 株の毎日のリターンの 3 つの列を持つファイルがあります。

これどうやってするの?私のボリュームを取得するために最初の 30 エントリを合計する際に問題があります。

編集:

したがって、日付と日次の 3 つの列を持つ Excel ファイルを読み取ります。

Daily.ret = read.csv("abc.csv")

例 日付 在庫 1 在庫 2 2000 年 1 月 1 日 0.01 0.02

などなど、何年ものデータがあります。ローリング 30 日間の年換算ボリュームを計算したい。これは私の機能です:

calc_30day_vol = function()
{
stock1 = abc$stock1^2
stock2 = abc$stock1^2
j = 30
approx_days_in_year = length(abc$stock1)/10
vol_1 = 1: length(a1) 
vol_2 = 1: length(a2)

for (i in 1 : length(a1))
{
vol_1[j] = sqrt( (approx_days_in_year / 30 ) * rowSums(a1[i:j])

vol_2[j] = sqrt( (approx_days_in_year / 30 ) * rowSums(a2[i:j])


j = j + 1
}

}

つまり、在庫 1 と在庫 2 は、出来高を計算するために必要な、Excel ファイルからの毎日の収益の 2 乗です。vol_1 と vol_2 のエントリ 1 ~ 30 は、30 日間のボリュームを計算しているため、空です。rowSums 関数を使用して、最初の 30 エントリの日次収益の二乗を合計し、反復ごとにインデックスを下に移動しようとしています。1日目から30日目、2日目から31日目、3日目から32日目など、なぜ「j」を定義したのか。

私は R が初めてなので、これがばかげているように聞こえる場合は申し訳ありません。

4

1 に答える 1

5

これで始められるはずです。

まず、あなたが説明したようなデータを作成する必要があります

library(quantmod)
getSymbols(c("SPY", "DIA"), src='yahoo')
m <- merge(ROC(Ad(SPY)), ROC(Ad(DIA)), all=FALSE)[-1, ]
dat <- data.frame(date=format(index(m), "%m/%d/%Y"), coredata(m))
tmpfile <- tempfile()
write.csv(dat, file=tmpfile, row.names=FALSE)

これで、非常に特定の形式のデータを含む csv ができました。csv を読み取り、xts オブジェクトに変換するために使用read.zooします (R にデータを読み取る方法は多数あります。R データのインポート/エクスポートを参照してください) 。

r <- as.xts(read.zoo(tmpfile, sep=",", header=TRUE, format="%m/%d/%Y"))
# each column of r has daily log returns for a stock price series
# use `apply` to apply a function to each column.
vols.mat <- apply(r, 2, function(x) {
    #use rolling 30 day window to calculate standard deviation.
    #annualize by multiplying by square root of time
    runSD(x, n=30) * sqrt(252)
})
#`apply` returns a `matrix`; `reclass` to `xts`
vols.xts <- reclass(vols.mat, r) #class as `xts` using attributes of `r`
tail(vols.xts)
#           SPY.Adjusted DIA.Adjusted
#2012-06-22    0.1775730    0.1608266
#2012-06-25    0.1832145    0.1640912
#2012-06-26    0.1813581    0.1621459
#2012-06-27    0.1825636    0.1629997
#2012-06-28    0.1824120    0.1630481
#2012-06-29    0.1898351    0.1689990

#Clean-up
unlink(tmpfile)
于 2012-07-01T19:22:54.767 に答える