Hatena::ブログ(Diary)

My Life as a Mock Quant このページをアンテナに追加 RSSフィード

2013-05-18

CIRモデルで金利の期間構造 by shiny

| 20:41 | CIRモデルで金利の期間構造 by shiny - My Life as a Mock Quant を含むブックマーク

金融工学でいうCIRモデルで表現される金利の期間構造の、モデルパラメーター依存性を見てみたくて、簡単なwebアプリケーションを作ってみた。

CIRモデルについてはリンク先を見て頂くとして、shinyについて簡単に捕捉しておくと、

という事です。

公式サイトはこちらで、日本語での解説記事・資料も

…と結構出ています。


作ったアプリケーションは2つのCIRモデルパラメーターによる金利の期間構造を描画するような簡単なもの。

もともとshiny自体が複雑なもの作るようには出来てないしね。

http://www.hatena.ne.jp/

このアプリケーション自体はShinyホスティングというβ版のサービス上で動いています*1

Shinyホスティングサービス自体は無料でこちらのLINKから登録する事が出来ます。


今回作成したアプリケーションのソースはgistに貼り付けてあります。

Interest rate term structure by CIR(Cox,Ingersoll,Ross)model


ちなみに既にR言語使いで、かつ、手元で既にshiny使ってる方なら

library(shiny)
runGist(5604103)

でこのアプリケーションをローカル環境で立ち上げる事ができます。

この辺のrunGist・runGithub・runUrl系の関数は便利だなぁ。

*1:いつ動かなくなるかもわかりませが…

2012-08-21

幾何ブラウン運動に従うモンテカルロのパスを作る

| 21:12 | 幾何ブラウン運動に従うモンテカルロのパスを作る - My Life as a Mock Quant を含むブックマーク

numpyを使って結構美しく書けたのでメモ。結果はmatplotlibを使って描画。

f:id:teramonagi:20120821211411p:image

幾何ブラウン運動に従うモンテカルロの生成コード

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

#株価の確率微分方程式に従うサンプルパスを生成
#dS/S = r * dt + vol * dW_t
def generate_path(S0, T, r, vol, N, M):
    dt = T/M
    w = np.cumsum(np.reshape(np.random.standard_normal(N*M), (N,M)), 1) * (dt**0.5)
    t = np.cumsum(np.ones((N,M)), 1)*dt   
    return S0 * np.exp((r-0.5*vol**2)*t + vol*w)

if __name__ == "__main__":
    #株価・満期・瞬間金利・ボラティリティ
    S0  = 100.0
    T   = 3.0
    R   = 0.01
    VOL = 0.2
    #パス数・時間刻み数
    N = 50
    M = 200
    #パスの生成&描画
    x = generate_path(S0, T, R, VOL, N, M)
    plt.plot(x.T)
    plt.show()

2012-08-04

「Rで学ぶ『構造型モデル de 倒産確率推定』 at 第25回R勉強会@東京」のソースコードはこちらになります

| 10:10 | 「Rで学ぶ『構造型モデル de 倒産確率推定』 at 第25回R勉強会@東京」のソースコードはこちらになります - My Life as a Mock Quant を含むブックマーク

第25回R勉強会@東京(#TokyoR) : ATNDでお話させていただいた

で使用したソースコード一式をUPしておきます。コピペ&改変は勿論自由ですが、自己責任でご使用下さい。

なお、以下のパッケージ

  • scales
  • reshape2
  • xts
  • ggplot2

が必要なので別途install.packagesでインストールしてください。

今回作成した関数群。

テストケースを兼ねて使用した簡単な例。後で英語版を作るのでコメント・凡例は英語化してます。↑の関数群を読み込んで置いてから使う。

ある企業を模した分析の例。↑の関数群を読み込んで置いてから使う。

2012-01-29

クオンツに興味がある人が読んでおくべき本

| 21:30 | クオンツに興味がある人が読んでおくべき本 - My Life as a Mock Quant を含むブックマーク

金融と関係ない業界で働いている方から

「クオンツという仕事があるのはわかったが、実際にどういうことをやっているのかよくわからない。もっとよく知りたいのでお勧めの書籍があれば紹介してほしい」

という旨のご質問を頂いたので私が読んだ中である程度クオンツに関係してて面白いなーと思った書籍をまとめておきます。専門書じゃなくて読み物です。

物理学者、ウォール街を往く。―クオンツへの転進

私がクオンツに興味を持ったきっかけとなった書物です。素粒子物理学者を志した秀才(not 天才)エマニュエル・ダーマン氏の物理学研究者としての挫折とクオンツへと転身した後の数々の活躍についての自伝。また金融のモデルとは何か・金融理論に物理学のような真理・普遍的な法則はありえるのか等についても記載があり。彼が実際に開発したモデルやコンセプトは今でもよく参照されます。

ザ・クオンツ 世界経済を破壊した天才たち

著名な実在のクオンツ複数人にフォーカスを当て、彼らがどのような経歴を辿りクオンツとして働く事になったのかが詳しく記載されています。また彼らの視点を通して昨今の金融危機で一体何が起こっていたのかという点についての記載も豊富です。この本を読めばクオンツというお仕事は一体何をするものなのかが一通り理解できると思います。

禁断の市場 フラクタルでみるリスクとリターン

「マンデルブロ集合」で有名で2010年に亡くなられた偉大なる「経済」学者マンデルブロ氏の著作で、基本金融工学disの本です。ブラックショールズモデル等よく知られた金融工学のモデルは実際の株価の動きに基づかないいい加減なモデリングをしているので、出てくる結果もでたらめだろ?というわかりやすい主張を展開。フラクタルや複雑ネットワークにも近い話なのでそっちに興味がある人が読んでも面白いかもしれません。第12章の禁断の金融10カ条は常に意識したい所。

市場リスク 暴落は必然か

クオンツクオンツした書物ではないのですが、要所要所にそれっぽい話を見ることができる書物です。例えば(あまりお近づきになりたくない)幻のプログラミング言語APLについても記載があったり。。。また80年代半ばの旧ソロモンブラザーズ(現シティ)には今でいうグーグルに似たノリを感じることができる記載が多く、著者はそれを「クオンツ天国」や「知性のメッカ」と呼んでいる点がおもしろく、いい時代だったんだなーとも感じました。有名どころだとモルガン・スタンレーのAPT(analytic prop-trade)部門についての記載もあります。日本人の債券ディラーで有名だった旧ソロモンブラザーズの「シュガー」明神氏(実在)の話もありなかなか面白い一冊。

巨大投資銀行(バルジブラケット)

こちらもクオンツクオンツした書物ではないですが、今まで紹介した本と違って”日本人”の視点から書かれている金融関係の【小説】です。ちなみに上で書いた「シュガー」明神氏は「ソルト」竜神と名前を変え、クオンツモデルを引っさげて債券ディーラーとして大暴れします。また本小説には2人主人公的なポジションのキャラがいて、竜神氏ともう一人の桂木という登場人物がおり、彼は最終的に現在のみずほコーポレート銀行(旧日本興業銀行)的な銀行の投資銀行化に乗り出すものの・・・

2012-01-05

誘導型モデルを使った信用リスクのある割引債の価格付け−2

| 21:08 | 誘導型モデルを使った信用リスクのある割引債の価格付け−2 - My Life as a Mock Quant を含むブックマーク

前回の記事「誘導型モデルを使った信用リスクのある割引債の価格付け−1 - My Life as a Mock Quant」の続き。

前回の記事の最後に書いたように、作成したプログラムのテストをしたいので今回はまず簡単にできるチェックとして

  • デフォルトがないと仮定した場合、CIRモデルの理論割引債価格と合うか?

を実施してみる。CIRモデルが算出する理論割引債価格を算出するための関数R言語を使って

#CIRモデルの理論割引債価格
CIRZeroBondPrice <- function(t, k, theta, vola, init)
{
  h <- sqrt(k^2 + 2 * vola^2);
  denominator <- 2 * h + (k + h) * (exp(t * h) - 1)
  A <- (2 * h * exp((k + h) * t / 2) / denominator)^(2 * k * theta / vola^2)
  B <- 2 * (exp(t * h) - 1)/ denominator
  A * exp(-B * init)
}

として書いた。この辺の理論的な話は参考に書いたBrigoの本が詳しい。バイブル。聖書。

前回作成したプログラムのデフォルト強度過程のパラメーターを全部0にしてデフォルトしないようにしてから実行し、その結果として出てきた割引債価格を上述のCIRモデルの理論割引債価格と比較してみる。コードは前回のものとほぼ同じだけど、

  • (デフォルトを起こさせないために)デフォルト強度過程のパラメータを全て0に設定
  • CIRモデルの割引債価格計算関数追加

という点だけが異なってて、

となる。実行結果は

> result
[1] 0.9049275
> CIRZeroBondPrice(2, k.ir, theta.ir, vola.ir, init.ir)
[1] 0.9049046

となってデフォルトを起こさないようにシミュレーションさせた結果とCIRモデルの理論割引債価格がほぼ一致していることが確認できるので、デフォルト未考慮の部分は間違ってなさそうだということがわかる。

参考

Interest Rate Models-theory and Practice: With Smile, Inflation and Credit