QuantLibは、金融工学における数値計算と解析をサポートする強力なオープンソースライブラリです。特にデリバティブの評価、リスク管理、数値最適化において広く使用されています。QuantLibは、Pythonバインディングを通じてPython環境でも利用可能であり、金融分析やアルゴリズムトレーディングにおいて強力なツールとなります。以下に、QuantLibの特徴と実用例を説明します。
QuantLibの特徴
幅広い金融モデルのサポート
QuantLibは、ブラック・ショールズモデル、バリアンツ・ガンマモデル、ヒストリカル・シミュレーションなど、さまざまな金融モデルをサポートしています。
デリバティブの評価
オプション、先物、スワップなど、複雑なデリバティブ商品の評価が可能です。
リスク管理ツール
ポートフォリオのリスク分析や感応度分析など、リスク管理に必要なツールが揃っています。
数値解析機能
数値積分、微分方程式の解法、モンテカルロシミュレーションなど、金融工学に必要な数値解析機能を提供します。
例題1: ブラック・ショールズモデルによるオプション価格の計算
ブラック・ショールズモデルを使用して、ヨーロピアン・コールオプションの価格を計算する例を示します。
import QuantLib as ql
# パラメータの設定
expiry_date = ql.Date(31, 12, 2024)
spot_price = 100
strike_price = 100
volatility = 0.2
dividend_rate = 0.0
risk_free_rate = 0.05
day_count = ql.Actual365Fixed()
calendar = ql.UnitedStates()
# オプションの設定
option_type = ql.Option.Call
payoff = ql.PlainVanillaPayoff(option_type, strike_price)
exercise = ql.EuropeanExercise(expiry_date)
european_option = ql.VanillaOption(payoff, exercise)
# マーケットデータの設定
spot_handle = ql.QuoteHandle(ql.SimpleQuote(spot_price))
flat_ts = ql.YieldTermStructureHandle(ql.FlatForward(0, calendar, risk_free_rate, day_count))
dividend_yield = ql.YieldTermStructureHandle(ql.FlatForward(0, calendar, dividend_rate, day_count))
flat_vol_ts = ql.BlackVolTermStructureHandle(ql.BlackConstantVol(0, calendar, volatility, day_count))
# ブラック・ショールズプロセスの設定
bs_process = ql.BlackScholesMertonProcess(spot_handle, dividend_yield, flat_ts, flat_vol_ts)
# オプション価格の計算
european_option.setPricingEngine(ql.AnalyticEuropeanEngine(bs_process))
option_price = european_option.NPV()
print(f"ヨーロピアン・コールオプションの価格: {option_price:.2f}")
このコードでは、QuantLibを使用してブラック・ショールズモデルに基づくヨーロピアン・コールオプションの価格を計算しています。パラメータを設定し、オプションと市場データを定義し、価格を計算しています。
例題2: 金利スワップの評価
次に、QuantLibを使用して金利スワップの評価を行う例を示します。
import QuantLib as ql
# パラメータの設定
start_date = ql.Date(1, 1, 2024)
maturity_date = ql.Date(1, 1, 2034)
fixed_rate = 0.02
floating_spread = 0.001
notional = 1000000
fixed_leg_freq = ql.Annual
floating_leg_freq = ql.Quarterly
fixed_leg_daycount = ql.Thirty360()
floating_leg_daycount = ql.Actual360()
calendar = ql.UnitedStates()
# 金利スワップのスケジュールの設定
fixed_schedule = ql.Schedule(start_date, maturity_date, ql.Period(fixed_leg_freq), calendar, ql.ModifiedFollowing, ql.ModifiedFollowing, ql.DateGeneration.Forward, False)
floating_schedule = ql.Schedule(start_date, maturity_date, ql.Period(floating_leg_freq), calendar, ql.ModifiedFollowing, ql.ModifiedFollowing, ql.DateGeneration.Forward, False)
# 金利スワップの設定
fixed_leg = ql.FixedRateLeg(fixed_schedule, fixed_leg_daycount, [notional], [fixed_rate])
floating_leg = ql.IborLeg(floating_schedule, ql.USDLibor(ql.Period(3, ql.Months)), [notional], [floating_spread])
# 金利スワップの生成
swap = ql.VanillaSwap(ql.VanillaSwap.Payer, notional, fixed_leg, floating_leg)
swap.setPricingEngine(ql.DiscountingSwapEngine(flat_ts))
# スワップ価格の計算
swap_npv = swap.NPV()
print(f"金利スワップのNPV: {swap_npv:.2f}")
このコードでは、金利スワップの評価を行っています。固定レッグと変動レッグのスケジュールを定義し、スワップを生成して価格を計算しています。
例題3: ボラティリティ曲線の構築
最後に、ボラティリティ曲線を構築し、それを使用してオプション価格を計算する例を示します。
import QuantLib as ql
# パラメータの設定
calculation_date = ql.Date(1, 1, 2024)
ql.Settings.instance().evaluationDate = calculation_date
expiry_dates = [ql.Date(1, 7, 2024), ql.Date(1, 1, 2025), ql.Date(1, 7, 2025)]
volatilities = [0.20, 0.25, 0.30]
# ボラティリティ曲線の構築
calendar = ql.UnitedStates()
day_count = ql.Actual365Fixed()
volatility_curve = ql.BlackVarianceCurve(calculation_date, expiry_dates, volatilities, day_count)
# オプションの設定
spot_price = 100
strike_price = 100
risk_free_rate = 0.05
option_type = ql.Option.Call
expiry_date = ql.Date(1, 7, 2024)
payoff = ql.PlainVanillaPayoff(option_type, strike_price)
exercise = ql.EuropeanExercise(expiry_date)
european_option = ql.VanillaOption(payoff, exercise)
# マーケットデータの設定
spot_handle = ql.QuoteHandle(ql.SimpleQuote(spot_price))
flat_ts = ql.YieldTermStructureHandle(ql.FlatForward(calculation_date, risk_free_rate, day_count))
vol_ts = ql.BlackVolTermStructureHandle(volatility_curve)
# ブラック・ショールズプロセスの設定
bs_process = ql.BlackScholesProcess(spot_handle, flat_ts, vol_ts)
# オプション価格の計算
european_option.setPricingEngine(ql.AnalyticEuropeanEngine(bs_process))
option_price = european_option.NPV()
print(f"ボラティリティ曲線を使用したオプションの価格: {option_price:.2f}")
このコードでは、異なる期限のボラティリティを用いてボラティリティ曲線を構築し、それを用いてヨーロピアン・コールオプションの価格を計算しています。
結論
QuantLibは、金融工学における数値計算と解析を強力にサポートするライブラリです。ブラック・ショールズモデルによるオプション価格の計算、金利スワップの評価、ボラティリティ曲線の構築など、さまざまな金融計算が可能です。QuantLibを活用することで、金融モデルの評価と分析を効率的に行い、複雑な金融問題を解決することができます。