python ui bs_期权及 Black-Scholes模型的python实现
Black-Scholes模型最早是由Fischer Black和Myron Scholes在1973提出,發表在論文The Pricing of Options and Corporate Liabilities中。此后,該模型為金融市場以市價價格變動的金融衍生品提供了合理的定價基礎。
名詞解釋
option:期權或期權合約,賦予擁有者以一定價格購買或者賣出的權利,而不是義務。Give its owner the right, but not the obligation, to either buy or sell an underlying asset at a given price.
call option: 看漲期權,在未來某個時間可以以某種價格購買某種商品的權利
put option: 看跌期權,在未來某個時間可以以某種價格出售某種商品的權利
strike price: 交割價格或執行價格,事先約定好在為未來購買或者賣出的價格
spot price: 現貨價格,即期權對應標的商品的即期價格
premium: 權利金或期權價格,指期權合約購買方在購買期權時必須支付給期權賣方的費用
期權種類
根據期權的權利劃分:call option: 看漲期權,在未來某個時間可以以某種價格購買某種商品的權利,如果未來該購買價格比商品的實際價格還要高,可以放棄該權利,只有低于商品的價格才會有盈利的機會。每一個期權合約都有一個買方和賣方,買方擁有權利,賣方擁有義務。買方一旦實施該權利,賣方必須履行其義務。
put option: 看跌期權,在未來某個時間可以以某種價格出售某種商品的權利,如果未來該出售價格低于商品的實際價格,可以放棄該權利,不然可以選擇在現貨市場上出售該商品獲取更高的利潤。同樣,也對應于一個買方和賣方,賣方擁有權利,買方擁有義務。
根據買方買方又延伸出四種期權形式:long call: 看漲期權的購買方,擁有權利購買,跟short call相對
short call: 看漲期權的賣出方,擁有義務出售
long put: 看跌期權的購買方,擁有義務出售,跟short put相對
short put: 看跌期權的賣出方,擁有義務購買
根據交割時間劃分:歐式期權:只能在到期日交割
美式期權:在到期日之前和到期日都可以交割
期權的價格
跟股票、黃金的價格一樣,期權也有價格,股票的價格反應了對于公司未來業績的期望,黃金甚至可以等同于貨幣,賦予了流通的屬性。期權的價格并不反映標的物的價值,而是作為風險補償,由期權買方給賣方,作為賣方承擔風險的回報。
期權價格又稱權利金,premium,指期權合約購買方在購買期權時必須支付給期權賣方的費用,因而獲得了一定的權利,買方的風險是已知的,就算未來現貨價格大幅變化時,可以選擇不實施權利,最多損失的就是這部分費用。然而,賣方需要承擔一定的風險甚至損失,例如對于call option的賣方而言,當現貨價格大幅上漲時,仍需要以遠低于現貨價格的交割價格賣給買方。這也是premium的來由,premium的中文意思就是保險費、溢價的意思。
期權的價格主要由內涵價值和時間價值(time value)組成:
期權價格 = 內涵價值 + 時間價值根據期權的內涵價值(intrinsic value)將期權分為:In the money: 價內期權或實值期權,call option時如果交割價格小于現貨價格,put option時如果交割價格大于現貨價格
Out of the money: 價外期權或者虛值期權,call option時如果交割價格大于現貨價格,put option時如果交割價格小于現貨價格
In the mony: 平值期權,不論看漲還是看跌期權,交割價格等于現貨價格
時間價值時間價值是指期權的價格超過內涵價值的部分
指在期權有效期內,標的資產的波動為期權所有者帶來的收益可能性
期權的內涵價值表明了期權合約履行時可以獲得的利潤,交割價格和現貨價格的gap越大,盈利的可能性更大。距離交割期越久,期貨的時間價值越大,因而期貨價格越高
BS模型的重要假設針對歐式期權,即交割期前不能交易
期權有效期內無分紅和其它所得
市場無法預測
無風險利率和波動性均是恒定值
標的物價格遵循對數正態分布
不含分紅的期權定價BS模型
下面是變量的含義:S: t時刻的現貨價格
T: 期權合約的總時間,當前時刻到交割期的時間為T-t
K: t時刻的交割價格
r: 無風險利率
σ: 現貨價格的標準差
N(d)為標準正態分布的累計分布,d為自變量
C(S, t)為t時刻call option的價格,P(S, t)為t時刻put option的價格。BS公式為:
其中:
Python實現
import numpy as np
from scipy.stats import norm
def vanilla_option(S, K, T, r, sigma, option='call'):
"""S: spot priceK: strike priceT: time to maturityr: risk-free interest ratesigma: standard deviation of price of underlying asset"""
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
d2 = (np.log(S/K) + (r - 0.5*sigma**2)*T)/(sigma * np.sqrt(T))
if option == 'call':
p = (S*norm.cdf(d1, 0.0, 1.0) - K*np.exp(-r*T)*norm.cdf(d2, 0.0, 1.0))
elif option == 'put':
p = (K*np.exp(-r*T)*norm.cdf(-d2, 0.0, 1.0) - S*norm.cdf(-d1, 0.0, 1.0))
else:
return None
return p
vanilla_option(50, 100, 1, 0.05, 0.25, option='call')
0.027352509369436617
vanilla_option(50, 100, 1, 0.05, 0.25, option='put')
45.15029495944084
含分紅的期權定價BS模型
除了之前的五個變量,還多了一個變量q:S: t時刻的現貨價格
T: 期權合約的總時間,當前時刻到交割期的時間為T-t
K: t時刻的交割價格
r: 無風險利率
σ: 現貨價格的標準差
q: 分紅率,假設是連續分紅
現在q參數被包含在了C(S, t)和P(S, t)公式中:
其中:
Python實現
def bs_option(S, K, T, r, q, sigma):
"""S: spot priceK: strike priceT: time to maturityr: risk-free interest rateq: rate of continuous dividendsigma: standard deviation of price of underlying asset"""
d1 = (np.log(S/K) + (r - q + 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
d2 = (np.log(S/K) + (r - q - 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
if option == 'call':
p = (S*np.exp(-q*T)*norm.cdf(d1, 0.0, 1.0) - K*np.exp(-r*T)*norm.cdf(d2, 0.0, 1.0))
elif option == 'put':
p = (K*np.exp(-r*T)*norm.cdf(-d2, 0.0, 1.0) - S*np.exp(-q*T)*norm.cdf(-d1, 0.0, 1.0))
else:
return None
return p
總結
以上是生活随笔為你收集整理的python ui bs_期权及 Black-Scholes模型的python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100年前的北京Vlog火了!AI修复古
- 下一篇: websocket python爬虫_p