見出し画像

オプションの理論価格をPythonで。


最近、オプションの戦略をよく考える事が多いです。


なぜなら、価格の上下予測より、ボラティリティーの上下の予測の方が難易度が低いと思っているからです。


ですが、オプションのバックテストをしようと思っても、自分がこの時間帯の価格を知りたいな?と思ってもそこでは約定がなかったりで、時系列データがなかったりします。(※ただし、225オプションは理論価格で指していればマーケットメーカーが拾ってくれます。)


なので、バックテストもどきを行うためには理論価格計算ツールがなければ成り立たないことがあります。
今回は、Pythonで完結に済むコードを作ってみました。
最初、とっかかりでPhindに聞いてみたのですが、変な値がでるので、結局は自炊という形になりました。


import math
from scipy.stats import norm

def BS_Call(S0, sigma, r, q, T, K):
 d1 = (math.log(S0 / K) + (r + (sigma ** 2) / 2) * T) / (sigma * math.sqrt(T))
 d2 = d1 - sigma * math.sqrt(T)
 call = S0 * norm.cdf(d1) - K * math.exp(-r * T) * norm.cdf(d2)
 return call

def BS_Put(S0, sigma, r, q, T, K):
  d1 = (math.log(S0 / K) + (r + (sigma ** 2) / 2) * T) / (sigma * math.sqrt(T))
  d2 = d1 - sigma * math.sqrt(T)
  put = -K * math.exp(-r * T) * (norm.cdf(d2)-1) + S0 * (norm.cdf(d1)-1)
  return put

# パラメータ設定
S0 = 33250 # 現物価格
K = 33000 # 権利価格
sigma = 0.160 # ボラティリティ指数
T = 25.0 / 365 # 残存期間(年)
r = 0.01 # 無リスク利率(ここでは0.01とします)
q = 0 # ディビデンド(ここでは0とします)

# コールオプションとプットオプションの価格を計算
call_price = BS_Call(S0, sigma, r, q, T, K)
put_price = BS_Put(S0, sigma, r, q, T, K)


print(f"コールオプションの価格は {call_price} 円です。")
print(f"プットオプションの価格は {put_price} 円です。")


上記コードは日経でなくとも使えるので、
興味ある人は仮想通貨オプションなどでもやってみてはどうでしょうか。
(※小生は仮想通貨オプションはどのようなものか知りません。)


トレーダーは知っている」では理論価格から剥離したオプションを買う事で利益を得ていたという話もあり、理論価格は使える場面は多いと思います。


天才数学者+投資家であるエドワードソープも当初はワラントの理論価格をオプション価格理論式で計算し、剥離しているものを取引していたと書いてありました。

このようにオプションは上下予測ではない、他の収益機会を与えてくれるため、システムの独立性を検討している人にはちょうどよいのかなぁと感じています。


いろいろなポジションがあるので、興味あるひとは勉強してゆきましょう。
そして、理論式を出力してトレード機会があるか見定めて、是非とも取り組んでいただきたいなぁと思っています。


<推薦書ならびに読んだ本>


①エドワードソープの自伝的な本。読み応えはある。


②色々なクオンツの人生を書いた本
よんでいて、こうだったのね!と思う。
ここにももちろんエドワードソープは出てくる。

③こちらもエドワードソープの事が書かれている本。
この本で始めてケリーの公式の事を知りました。

④ディーラーをやっつけろ、は結構有名な本です。エドワードソープがカジノで勝つ内容を書いた本です。


いいなと思ったら応援しよう!