「第1回 Japan.R 午後の部」の金融系セッション(資料&プログラム)

第1回 Japan.R 午後の部で金融系セクションを設けていただいて話した。
当日使った資料

PDF版が欲しいという奇特な方はコチラ(PDF)から落として下さい。

以下、上記資料を作成するために使用したコード。
パッケージは適当にinstall.packages()関数でインストールしておいてください。

  • 時系列解析
    • 例1:S&P500リターン時系列をGARCHモデルで分析
#Garchモデルによる時系列分析パッケージ
library(fGarch)
#各種webサイトからデータを取ってこれるパッケージ
library(fImport)
#S&P500 Indexデータを取得 & リターン系列(算術・日次)に変換
sp500.index  <- fredSeries("SP500",from = "2008-01-01")
sp500.return <- sp500.index / lag(sp500.index)-1
sp500.return <- sp500.return[!is.na(sp500.return),]
#Garchモデルによるフィッティングの実行
sp500.fit    <- garchFit( ~ garch(1, 1), data = sp500.return, trace = FALSE)
plot(cbind(sp500.return,volatility=volatility(sp500.fit, type = "sigma")))
    • 例2:株価表示
#株価等の時系列データを美しくPLOT&テクニカル指標を追記できるパッケージ
library(quantmod)
#やほーの株価データ取得
getSymbols('YHOO')
candleChart(to.weekly(YHOO),subset='2009',theme='white.mono',TA="addVo();addEMA();addRSI()",up.col=0)
#アメリカの株価データが入っているパッケージ
library(fEcofin)
#ポートフォリオ分析ができるパッケージ
library(fPortfolio)
#アメリカの株式データ取得
data(berndtInvest)
berndt <- as.timeSeries(berndtInvest)
#マーケットインデックスの値と無リスク金利を除く
data.return <- berndt[, -c(10, 17)]
#効率的フロンティアを計算
frontier <- portfolioFrontier(data.return)
tailoredFrontierPlot(frontier)
#接点ポートの計算
portfolio.tangency <- tangencyPortfolio(data.return)    
#投資ウェイト&リスクウェイトの表示
weightsPie(portfolio.tangency)
covRiskBudgetsPie(portfolio.tangency)
  • リスク管理
    • 例1:クレイトンコピュラと正規コピュラの生成
#コピュラを生成できるパッケージ。他にもfCopulaeもあるが、こちらのほうが優秀
library(copula)
N <- 2000
#2次元クレイトンコピュラオブジェクトの生成
clayton.cop <- claytonCopula(2)
#2次元クレイトンコピュラに従う乱数生成
clayton.r <- rcopula(clayton.cop,N)
#適当に描画
colnames(clayton.r) <- c("x","y")
plot(clayton.r,main="Clayton Copula")
#正規コピュラの生成
gauss.cop <- normalCopula(0.7)
gauss.r   <-rcopula(gauss.cop,N)
#同様、適当に描画
colnames(gauss.r) <- c("x","y")
plot(gauss.r)
#プレーンバニラオプション分析用のパッケージ
library(fOptions)
#行使価格60円・ボラティリティ20%・金利10%・配当なし
price.strike <- 60
volatility    <- 0.2
interest.rate <- 0.1
#outer関数で回すために関数オブジェクトを作成
Delta <- function(x,y){
  GBSGreeks(Selection = "delta", TypeFlag = "c", S = x, X = price.strike
    ,Time = y,r = interest.rate, sigma = volatility, b = interest.rate)
}
Gamma <- function(x,y){
  GBSGreeks(Selection = "gamma", TypeFlag = "c", S = x, X = price.strike
    ,Time = y,r = interest.rate, sigma = volatility, b = interest.rate)
}
#株価と満期のベクトルを作成
price.stock  <- seq(55,65,length=30)
maturity     <- seq(0,0.5,length=30)
#リスク指標のデルタとガンマを上で指定した各株価・満期に対して計算
delta <- outer(price.stock, maturity,Delta)
gamma <- outer(price.stock, maturity,Gamma)
#計算したデルタとガンマを3次元描画
persp(price.stock, maturity, delta, theta = -30, phi = 30,ltheta = -30,
  expand = 0.5, col = rainbow(length(maturity)),shade = 1, ticktype = "detailed")     
persp(price.stock, maturity, gamma, theta = 30, phi = 30,ltheta = 210,
  expand = 0.5, col = rainbow(length(maturity)),shade = 1, ticktype = "detailed")