Simple Option とは? :
スマホでお手軽にオプションの理論価格計算や損益グラフ描画をする為に自作してみたライブラリです。
※オプションって?という方はこちら
楽天証券:はじめてのオプション取引
このページでは:
このページでは「Simple Option」 の簡単な使い方、利用例を紹介します。
※ブラウザ上から手軽に動かしてみる場合はこちらから(Google Colaboratory )
- 実行(インストール)方法
- オプション理論価格の計算と表示
- ギリシャ指標(デルタ、ガンマ、セータ、ベガ)の計算と表示方法
- IV計算方法
- ポートフォリオ損益グラフ作成例
- 内部で用いられてる計算方法(ブラックショールズ)、初期パラメータ、ライブラリ(QuantLib)
## 簡単な実行方法:
最も簡単な実行方法はブラウザから、下のページにアクセスする方法です。
※Google Colaboratory 上のページ
- Google アカウントがあれば、スマホ上でパラメータを変えてグラフ作成、編集等が可能です
筆者の活用例:
筆者の場合、事前に自分の現ポジションや想定されるシナリオをいくつか作成しておき、Googleドライブ等に保存しておきます。また、他のサーバから原資産価格、オプション価格や精算値を取得等、組み合わて活用しています。
実行時の流れ:
Google Colab 上からブラウザ経由で利用する場合、初回はインストールが必要(約20秒)
※ 実際には、実行ボタン(三角のボタンをクリックするだけです)
!pip install simpleOption
※ローカルでインスト―ルする場合はコマンドから pip install simpleOption
Option オブジェクトの作成とプレミアムの理論価格計算
##例1:日経先物オプション(02/C21000)の理論価格:
from simpleOption import *
op = Option('02/C21000')
op.v(20920, 16 , 20190206)
#output: 65.21929983699263 (理論価格)
-
「02/C21000」の表記は、「2月限 Call 権利価格21000」を表します
-
オプション理論価格計算には、下記の書式を用います。
op.v(原資産価格、IV, 評価日[yyyymmdd])
例1では2月6日、IV=16,原資産価格20920円の場合のプレミアム理論価格が表示されています。
##例2:ギリシャ指標(デルタ、ガンマ、セータ、ベガ)の表示方法
print(f'delta= {op.delta():.2}' )
print(f'gamma= {op.gamma():.2}' )
print(f'thetaPerDay= {op.thetaPerDay():.2f}' )
print(f'vega= {op.vega():.2f}' )
output:
delta= 0.39
gamma= 0.0014
thetaPerDay= -26.18
vega= 598.12
###ギリシャ指標とは:
参考:wikipedia
原資産価格をS、オプション価格をV とする。
Δ(デルタ)
原資産が1上昇するときプレミアムが上昇する割合。コールならば正の、プットならば負の値である。また絶対値は、OTMで権利行使価格から離れるほど低くなり、ATMでほぼ0.5となり、ITMにはいると1に近づくが、1以上になることはない。しかし、たとえばデルタ0.2のコールは原資産が100円上昇すれば100×0.2で20円上昇するはずだが、実際そうはならない。後述のガンマによりデルタ自体が変化するからである。なおデルタは権利行使される確率も表している。
γ(ガンマ)
原資産が1上昇するときデルタが上昇する割合。常に正の値でATMで最大である。
κ(カッパ)もしくはベガ
インプライド・ボラティリティ (IV) が1上昇するときプレミアムが上昇する割合。常に正の値でATM付近で最大になる。またSQ算出日までの日数の長いものほどベガは大きくなる。
Θ(セータ)
時間の経過により失われるオプション・プレミアム。常に負の値。原資産が変わらなければSQ算出日に近づけば近づくほど権利行使できる確率が少なくなるため。このように、オプション・プレミアムが時間の経過と共に小さくなっていくことを「タイム・ディケイ」という。
##例3: IVの求め方(例:プレミアム価格90の場合)
print(f'iv= {op.impliedVolatility(90,process):.2f}' )
output:
iv= 0.20
##例4:グラフ描画方法
複合ポジションの例(2月限バタフライの場合)
from simpleOption import *
import pandas as pd
import numpy as np
% matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('darkgrid')
p = Portfolio(
"""
02/C21000[1]
02/C21250[-2]
02/C21500[1]
""")
x = np.arange(20000, 22000) #グラフを描く範囲(現資産価格範囲)
setting(20250, 26, 20190204) #マーケット情報1(IV26%と仮定)
plt.plot(x, np.vectorize(p.v)(x), label= 'Batafly_feb04' )
setting(evaluationDate=20190207) #日付を7日に経過させたものもグラフ描画
plt.plot(x, np.vectorize(p.v)(x), label= 'Batafly_feb07' )
plt.plot(x, np.vectorize(p.pay)(x), label= 'Payoff',linestyle="dashed" )
plt.legend(loc="best")
sq_date関数(SQ期日=権利日を取得)
- ディフォルトでは日本の証券市場カレンダがディフォルト(毎月第二金曜日)
- QuantLib の日付形式で取得する
SQ日付の指定フォーマット(4タイプ)
※ 省略された場合、命令実行時の日時等によって自動補完
- 月のみ指定 (例:「03」)⇒ 「3月」(命令実行時、年&第2週&金曜日 を自動補完)
- 月+週指定(例:「03w1」) ⇒「3月第一週」(命令実行時、年&金曜日を自動補完)
- 年+月指定 (例:201104)⇒「2011年4月」 第2週 金曜日
- 年+月+週指定(201903w1) ⇒ 「2019年3月第一週」金曜日
#### 例:東日本大震災時のP8000価格(記録ではIV123%に暴騰)
Option('201104/P8000').v(9000, 123,20110317)
output: 600.5561382223586
##setting関数(パラメータで環境を設定する関数)
setting(
underlying=20920,
iv=17.6,
evaluationDate=20190206,
rate=0.01
)
op.v()
パラメータ省略した場合は、その直前に設定されたパラメータが適用される。
またディフォルトでは、カレンダーは日本の曜日タイプ、1年間360日計算、金利0.01%が適用される(変更可能)
既定の計算方法と初期値
ディフォルトの状態では、ブラックショールズ式に日本の市場環境の初期値が入った状態で理論価格が計算されます(パラメータや計算方法は変更可能)。ディフォルトでは、QuantLibのライブラリ内のブラックショールズ式を呼びだしています。
##Quantlib へのアクセス方法
「qb.Quantlibライブラリ名」の形式で全てのQuantLibのライブラリに直接アクセス可能です。たとえば1年間を稼働日252で計算するqb.Business252クラス、カナダの市場カレンダー(qb.Canada)、米ドルのLiborを扱うUSDLibor、モンテカルロ法でシミュレーションを行うクラス等、多彩なクラスが利用可能です ⇒ 詳細はQuantLib公式ドキュメント
##例(レシオスプレッドのグラフ)
p = Portfolio(
"""
02/P20750[1]
02/P20000[-4]
""")
x = np.arange(19800, 21000) #グラフを描く範囲(日経平均価格範囲)
setting(20250, 20, 20190204)
d = 20190201
for i in range (4):
d= d+i
setting(evaluationDate=d)
plt.plot(x, np.vectorize(p.v)(x), label= d )
plt.plot(x, np.vectorize(p.pay)(x), label= 'Payoff',linestyle="dashed" )
plt.legend(loc="best")
※20500円より上では、セータ+から-に変化(時間が敵に)