Pythonでデリバティブのリスクと価格をC++速度で計算する方法
Pythonでオプション、スワップ、債券などの価格計算用の金融モデルを作成しようとしたことがあるなら、有名なジレンマに遭遇したことがあるかもしれません。一方では、Monte Carloシミュレーションに時間がかかりすぎる遅い純粋なPythonがあります。他方にはQuantLibのようなC++ラッパーを備えた重量級ライブラリがあり、ソースコードを読んだりモデルの動作をデバッグしたりすることが簡単ではありません。
FinancePyライブラリは、別の道を提供します。これは、EDHECビジネススクールの元金融教授で、金融業界で12年の経験を持つDominic O'Kaneによって作成されました。彼は、すべてのコードがPythonで記述され、計算結果がBloombergのようなプロフェッショナルシステムにできるだけ近いオープンなツールを作成することを決意しました。
プロジェクトの構造
ライブラリアーキテクチャは明確なコンセプトを中心にしています。あらゆる評価計算は次の公式で表されます:
Valuation = Product + Model + Market
コードでは、これは論理的です。ライブラリモジュールはいくつかの主要ディレクトリに分割されています:
- utils: 日付、金融カレンダー、支払スケジュールジェネレーター
- market: 金利曲線、ボラティリティ曲面、市場価格
- models: Black-ScholesからVasicekモデルまでの数学的価格計算モデル
- products: 債券、信用、エクイティ、FX、金利のカテゴリに分類された特定の金融商品
各商品にはvalue()メソッドがあります。金融商品オブジェクトを作成し、モデルと現在の市場状況を渡し、価値またはリスクパラメータを取得します。ほとんどの商品について、著者はMonte Carloシミュレーションを追加しました。これにより、契約支払いが時間とともにどのように機能するかを理解できます。
速度の達成方法
FinancePyは純粋なPythonで書かれていますが、Numbaライブラリを積極的に使用しています。最初の関数呼び出しで、JITコンパイラはモデルの数学を機械語に変換します。このため、モジュールの最初のインポートには数秒かかる場合があります。
ただし、以降すべての呼び出しはミリ秒の何分の1かで完了します。コンパイルされた関数はキャッシュに保存されます。その結果、C/C++レベルの速度 얻으면서も、ソースコードファイルを開いてアルゴリズムを1行ずつ読めるなくなります。CythonのコンパイルやC拡張の記述必要はありません。
明確な例とノートブック
インストールは標準的なpip呼び出しで行います:
pip install financepy
次に、日付ユーティリティをインポートできます:
from financepy.utils import Date
start_date = Date(19, 2, 2026)
future_date = start_date.add_days(2)
print(future_date) # 21-FEB-2026
開発者はソースコードから関数シグネチャを推測する必要はありません。リポジトリには、90以上の готов-made Jupyterノートブックがあります。これらには詳細なシナリオが含まれています:基本的な社債評価や通貨バリアオプションから、複雑なディスカウントカーブやクレジットデフォルトリwapの構築まで。
コードスタイルとコントリビューティング
著者は意図的に複雑な継承やオーバーロードされたアーキテクチャを避けています。巧妙な言語の裏技よりも、可読性とパフォーマンスが優先されます。複雑なリスト内包表記よりも、シンプルなforループがFinancePyコードでは好まれます。これは、Numbaが通常のループをより効果的に最適化するためです。
プロジェクトにプルリクエストを送信したい場合は、著者は明確な要件を設定しています:
- PEP8標準の厳格な遵守
- すべての関数とクラスの明確なコメント
- ユニットテストの存在と、各メソッドに対して少なくとも1つの統合テスト
使用する価値があるか
FinancePyは、迅速な価格と感応度の検証のための明確なツールを必要とするクオンツアナリスト、リスクおよびポートフォリオマネージャー適しています。このプロジェクトは、デリバティブ数学を学ぶための金融コースの学生や教師にも役立ちます。
このプロジェクトはNumPy、SciPy、Numbaのみを依存関係として必要とします。GPL-3.0ライセンスはすべてのソースコードへのアクセスを提供します。プロジェクトはベータステータスであり、日付生成や補間方法がプロプライエタリターミナルと異なる可能性があることを著者は正直に警告しています。ただし、個人研究、トレーディング戦略のテスト、迅速なデリバティブ評価には、ライブラリの機能で十分です。
関連プロジェクト