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 が初めてなので、これがばかげているように聞こえる場合は申し訳ありません。