https://github.com/justkroft/option-implied-moments
Algorithm to compute higher order return moments (volatility, skewness, kurtosis) from an implied volatility surface.
https://github.com/justkroft/option-implied-moments
asset-management c cython finance options options-trading
Last synced: 3 months ago
JSON representation
Algorithm to compute higher order return moments (volatility, skewness, kurtosis) from an implied volatility surface.
- Host: GitHub
- URL: https://github.com/justkroft/option-implied-moments
- Owner: justkroft
- License: mit
- Created: 2026-02-27T20:11:35.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-27T17:21:12.000Z (3 months ago)
- Last Synced: 2026-03-28T01:41:02.323Z (3 months ago)
- Topics: asset-management, c, cython, finance, options, options-trading
- Language: Python
- Homepage:
- Size: 396 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE
Awesome Lists containing this project
README
[](./README.md)
[](./README.ja.md)
# 株式オプション価格から推定されるモーメント
本リポジトリは、株式オプションデータからオプション・インプライド(すなわちリスク中立的)高次モーメントを計算するためのコードを含んでいる。ボラティリティ、歪度、尖度といった株式リターンの特性は、リスク中立測度 $\mathbb{Q}$ のもとで、アウト・オブ・ザ・マネーの株式オプション契約に基づいて算出される。
[[1]](#1) の手法を用いて、リスク中立的なボラティリティ、歪度、および尖度を計算する。同論文では、アウト・オブ・ザ・マネーのコールおよびプットの集合から、リスク中立リターン分布のモーメントの計算は以下のように定義される。
$$
Var^{\mathbb{Q}} = \frac{e^{r\tau}V_{i,t} - \mu^{2}}{\tau},
$$
$$
Skew^{\mathbb{Q}} = \frac{e^{r\tau}W - 3\mu e^{r\tau}V + 2\mu^{3}}{[e^{r\tau}V-\mu^{2}]^{3/2}},
$$
$$
Kurt^{\mathbb{Q}} = \frac{e^{r\tau}X - 4\mu e^{r\tau}W + 6e^{r\tau}\mu^{2}V - 3\mu^{4}}{[e^{r\tau}V-\mu^{2}]^{2}} - 3
$$
上記の数式では
$$
\mu = e^{r\tau} - 1 - \frac{e^{r\tau}}{2}V - \frac{e^{r\tau}}{6}W - \frac{e^{r\tau}}{24}X
$$
$V$、$W$、および $X$ は、測度 $\mathbb{Q}$ の下で、時点 $t$ から $t+\tau$ までの期間における株式リターンの対数の2乗、3乗、および4乗の期待値をそれぞれ表す。また、$r$ は同期間に対応する連続複利の無リスク金利である。
これらのパラメータを推定するために、 [[2]](#2) における台形則(trapezoidal rule)に基づく実装に従って、コールおよびプット・オプションの離散的なストライク価格を用いる。実装の詳細については、同論文の付録Bを参照してください。
## プログラム実装の詳細
本ライブラリのアーキテクチャは、3つの層から構成される。
> 注意:本ライブラリは、WRDS などのデータプロバイダから取得されるインプライド・ボラティリティ・サーフェス・データを用いる場合に最も良好に動作する。
### C層
数値計算はC言語で実装されている。
- 正規累積分布関数(CDF) — complementary error function(相補誤差関数)を用いて近似される。
$$
\Phi(x) = 0.5 \times \text{erfc}(\frac{-x}{\sqrt(2)})
$$
- ブラック・ショールズ価格付け — アウト・オブ・ザ・マネーのオプション価格は、インプライド・ボラティリティから標準的な閉形式解を用いて計算される。
- コールおよびプットはストライク価格でソートされ、それぞれ価格付けされた後、[[2]](#2) に従い台形則によって個別に積分される。
### Cython層
Cython層は、NumPyとC拡張の橋渡しとして機能する。Cythonの関数は、CSR(Compressed Sparse Row)形式で配置されたフラットなNumPy配列を入力として受け取る。ストライク価格、インプライド・ボラティリティ、およびフラグはすべてのグループにわたって連結され、`indptr` 配列が各グループの境界を示す。
その後、各グループは OpenMP を用いて並列処理される。
### Python層
Python層はデータ前処理のみを担当する。具体的には、アウト・オブ・ザ・マネーのオプションのフィルタリング、コール・プットのフラグの整数の符号化、株および時間区間ごとのデータのソートとグループ化を行って、Cython層が要求するCSR形式を構築する。出力は Polars のDataFrameとして再構築される。
# 使用方法
セットアップ手順および使用例については、[英語版README](./README.md)を参照してください。
# 参考文献
[1]
Bakshi, G., Kapadia, N., & Madan, D. (2003). Stock return characteristics, skew laws, and the differential pricing of individual equity options. *The Review of Financial Studies, 16*(1), 101-143.
[2]
Bali, Turan G. and Hu, Jianfeng and Murray, Scott, Option Implied Volatility, Skewness, and Kurtosis and the Cross-Section of Expected Stock Returns (January 1, 2019). Georgetown McDonough School of Business Research Paper, Available at SSRN: https://ssrn.com/abstract=2322945 or http://dx.doi.org/10.2139/ssrn.2322945