OpenFOAMのFinancialFoamを使ってブラック–ショールズ方程式の例

シミュレーション

こんにちは。今回はCFD(流体解析の方。差金決済取引の方ではありません)で有名なOpenFOAMを金融工学パッケージが用意されており、ブラック–ショールズ方程式を解くチュートリアルを紹介します。Mac + Homebrew環境でのセットアップから、ケース作成、実行、結果の可視化まで行います。


1. ブラック–ショールズ方程式のおさらい

ブラック–ショールズ方程式は、ヨーロッパ型オプションの価格 \(V(S,t)\)を求める偏微分方程式です:

以下の通り

$$\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + r S \frac{\partial V}{\partial S} – r V = 0$$

  • \(s\) : 原資産価格
  • \(t\) : 時間
  • \(\sigma\) : ボラティリティ
  • \(r\): 無リスク利子率

OpenFOAMのFinancialFoamは、この方程式を数値的に解くことができます。


2. MacでのOpenFOAM環境準備

2-1. OpenFOAMのインストール

Homebrewを使うと簡単です。

# HomebrewでOpenFOAMをインストール
brew install openfoam

これでfinancialFoamが使える状態になります。

2-2. ParaViewのインストール(可視化用)

OpenFOAMの計算結果を可視化するにはParaViewが便利です。

brew install --cask paraview

インストール後はアプリケーションフォルダから起動するか、Terminalで paraview と入力して起動します。


3. ケースディレクトリの作成

OpenFOAMは「ケースディレクトリ」にすべての設定を入れます。例として、チュートリアルれいをコピーし、「europeanCall」を作ります。

mkdir -p $FOAM_RUN #(フォルダがない初回のみ、runフォルダの作成)

cp-r $FOAM_TUTORIALS/financial/financialFoam/europeanCall/ $FOAM_RUN
run #runフォルダへ移動

ケースディレクトリには以下の3つのフォルダを作成しますが、チュートリアルそのままで構いません:

  • 0/ : 初期条件
  • constant/ : パラメータ(σ、rなど)
  • system/ : 数値スキームや時間設定

3-1. 初期条件の設定(0ディレクトリ)

0/V に初期のオプション価格を設定します。ヨーロッパコールオプションなら次のようにします:

internalField   uniform 0;
boundaryField
{
    min
    {
        type            fixedValue;
        value           uniform 0;
    }
    max
    {
        type            fixedValue;
        value           uniform 100;
    }
}

3-2. 金融パラメータの設定(constantディレクトリ)

constant/financialProperties に金融パラメータを記入します。

strike          40;  #オプションの権利行使価格
r               0.1; #リスクフリーレート[%]
sigma           0.2; #ボラティリティ[%]

3-3. 数値スキームと時間設定(systemディレクトリ)

system/controlDict にアプリケーションや時間設定を記入します。

application     financialFoam;
startFrom       startTime;
startTime       0;
stopAt          endTime;
endTime         1;   #時間[年]
deltaT          0.002;
writeControl    timeStep;
writeInterval   50; #結果出力間隔
purgeWrite      0;

その他、fvSchemesfvSolution も標準設定でOKです。


4. 実行

ケースが整ったら、Terminalで以下を実行します。

financialFoam

計算が進むと、時間ごとのオプション価格 \(V(S,t)\)がディレクトリに出力されます。


5. 結果の可視化

ParaViewを使うと、時間ごとのオプション価格分布を直感的に確認できます。

paraFoam

ParaView上で:

  1. plot over lineを用いて、x軸方向を選択し、項目はVを選択
  2. 横軸:原資産価格 \(S\)
  3. 縦軸:オプション価格 \(V(S,t)\)

数値的にブラック–ショールズ曲線が再現されているのが分かります。


6. まとめ

  • Mac + HomebrewでOpenFOAMとParaViewを簡単にインストールできる
  • FinancialFoamでブラック–ショールズ方程式を数値的に解ける
  • 初期条件・金融パラメータ・数値スキームを設定するだけでシミュレーション可能

次回は「プットオプションや異なる境界条件でのリスク分析」に挑戦してみると面白いです。

コメント