Python for Financeという本
ipython notebookを使って出版されたらしいPython for Financeという本を読みました。
numpy, scipy, pandas, PyMC3をはじめとしたPythonの数値計算、解析系のパッケージを使った金融工学の計算事例と自作ライブラリについての紹介になっています。
Python for Finance: Analyze Big Financial Data
- 作者: Yves Hilpisch
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2014/12/27
- メディア: ペーパーバック
- この商品を含むブログを見る
https://books.google.co.jp/books?id=7tzSBQAAQBAJ&printsec=frontcover&hl=ja&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
著者Yves Hilpischさんは金融業界向けに特化したPythonの実行環境Python Quant,
http://www.pythonquants.com/
とライブラリDX Analysis
http://dx-analytics.com/
の作者でその紹介、説明としての側面があります。
コードは
https://oreilly.quant-platform.com
にあります(ダウンロードに登録が必要なようです)。
内容
1〜3章はPythonそのものとNumpyなどのよく使われるライブラリの紹介
4〜14章では数値計算、モデリングと結果の可視化に使われるライブラリの紹介
15〜18章では DXライブラリでのオプションの価格とリスク計算の実例が説明されています。
1〜3章
Pythonが選択される理由として科学技術計算ライブラリの豊富さとipython notebookでの情報共有を挙げています。
色々なライブラリを一気にインストールでき、自動でアップデートしてくれるAnadoncdaの環境が推奨されています。
4章 データの型
金融業界においては1円( ¢1?)単位で誤差がでない計算が重要視されていると聞いたことがあります。そのような用途においては何も指定しないと数値が浮動小数点として扱われてしまうPythonの様な言語は不適とされそうですが、任意精度の整数が使えるdecimalモジュールを使用することが出来るとしています。numpy arrayのC,fortran formatの違いと計算速度への影響など渋い題材を取り上げています。
5章 可視化
matplotlibの基本的な使い方です。
matplotlib.financeでろうそくチャートが描けます。
6章 金融時系列
pandasはヘッジファンドに勤めていた人が開発したもので、金融時系列を扱うのが特に得意なようです。
pandasはYahoo! Finance, Google Finance等からのデータが読めます*1。
pandas.DatetimeIndexでデータの周期(営業日、月、分など)が指定できます。データセットの中にはある日突然フォーマットが変わってしまったりしてるものがあって大変そうです。
7章 データ入出力
pandasはcsv,SQL,xls,json,htmlなど多彩な入出力が出来ます。
pytablesはHDF5ファイルを扱うことが出来、メモリに載らないデータも処理できるそうです。numexprを使うとIOと同時にデータへ変換を行うことが出来ます。
8章 performance
Cython,numexpr, Numba(pro), Ipython.parallel, multiprocessingなどのライブラリが紹介されています*2。
Numba proでのGPU乱数生成とCPUの結果との比較が行われていて10万サンプル以上になるとGPUのほうが効率が良くなるようです。
9章 数学
numpyの使い方、特にpolyfitによるregressionやスプライン補間(np.polyfit)が紹介されています。
また最適化問題を解く為のscipy.optimizeがあります。
10章 確率
numpyでの乱数生成で 色々な確率過程(幾何的ブラウン運動、Stochastic volatility model, Jump diffuion)に基づいたpathの生成、表示を行っています。アメリカンオプションの価格計算もしています。
11章 統計
確率のところではモデリングとシミュレーションの話だけでしたが、実データを使った解析です。
scipy.stats, statsmodels.apiを用いた検定、現代ポートフォリオ理論(Wikipedia)のnumpy実装と実データへの適用、フロンティア(最適な収益とボラティリティーの関係)の可視化、
PCAを使った ドイツの証券取引所の全銘柄の主成分と30銘柄によるindexの価格変動の比較、
PyMC3を使ったベイズ回帰モデルの説明がされています。PyMC3のサブモジュールのひとつGaussianRandomWalkを使って確率過程をモデル化しており、回帰係数の時間的変動を取り出す為にベイズモデリングが使われているようです。find_MAPにscipy.optimizeの関数fimn_l_bfgs_bを指定することが出来ます。
12章 Excelとの連携
openpyxl,xlswriterなどが紹介されています。
15〜18章
複雑なモデルに従ったオプションの価格のsimulation, valuationの行程を行えるVXライブラリの仕組み、内部実装の話です。前の章より高度なモデルが扱われているようです。
https://github.com/yhilpisch/dx
その他、感想
金融時系列を扱っていますが、単位根検定やARモデルの話はありませんでした。予測の話もないのですぐにお小遣いを回収することはできませんでした。
ほとんどの部分はおそらく
http://ipython.org/ipython-doc/1/interactive/nbconvert.html
の方法を使ってipython notebookの記述をそのまま電子書籍化したようですが、コードと実行結果が地の文に含まれるようなスタイルが題材に非常に合っていて違和感がありませんでした。図や数式も効率的に挿入できているようです。Juliaなら確率過程のモデリングのコーディングの所はさらに自然な記述に出来そうです。
しかしKindle paperwhiteではプロットが白黒で判別できない情報がある。数式が一行の場合は大きすぎ、地の文に埋め込まれている場合は小さすぎる。表示できない文字もあると結構致命的な問題があります。Kindle Fireに課金してしまいそうです。紙の本も出ているのでそちらでは問題ないかもしれません。
一方Rでは
Rを金融時系列を扱う場合は
- 作者: 高柳慎一,井口亮,水木栄,金明哲
- 出版社/メーカー: 共立出版
- 発売日: 2014/08/09
- メディア: 単行本
- この商品を含むブログ (2件) を見る
- 作者: 福島真太朗
- 出版社/メーカー: ソシム
- 発売日: 2014/09/24
- メディア: 単行本
- この商品を含むブログ (2件) を見る
が参考になりそうです。
Reference
Python pandas で日本の株価情報取得とローソク足チャート描画 - StatsFragments
http://python-financial-engineering.com/entry/20140829_Python_Mathematical_Optimization.html
ボラティリティー一定の場合しかなかったと記憶していますが、確率過程や確率微分方程式の解をこの本で学びました。
- 作者: ベァーントエクセンダール
- 出版社/メーカー: シュプリンガー・フェアラーク東京
- 発売日: 1999/03
- メディア: 単行本
- 購入: 3人 クリック: 13回
- この商品を含むブログ (4件) を見る
*1:日本の株式市場のデータの取得は Python pandas で日本の株価情報取得とローソク足チャート描画 - StatsFragments が参考になります
*2:日本語では iPython notebookで研究開発生活 - Qiitaがとても参考になります