python ui bs_期权及 Black-Scholes模型的python实现
Black-Scholes模型最早是由Fischer Black和Myron Scholes在1973提出,發(fā)表在論文The Pricing of Options and Corporate Liabilities中。此后,該模型為金融市場以市價價格變動的金融衍生品提供了合理的定價基礎(chǔ)。
名詞解釋
option:期權(quán)或期權(quán)合約,賦予擁有者以一定價格購買或者賣出的權(quán)利,而不是義務(wù)。Give its owner the right, but not the obligation, to either buy or sell an underlying asset at a given price.
call option: 看漲期權(quán),在未來某個時間可以以某種價格購買某種商品的權(quán)利
put option: 看跌期權(quán),在未來某個時間可以以某種價格出售某種商品的權(quán)利
strike price: 交割價格或執(zhí)行價格,事先約定好在為未來購買或者賣出的價格
spot price: 現(xiàn)貨價格,即期權(quán)對應(yīng)標(biāo)的商品的即期價格
premium: 權(quán)利金或期權(quán)價格,指期權(quán)合約購買方在購買期權(quán)時必須支付給期權(quán)賣方的費用
期權(quán)種類
根據(jù)期權(quán)的權(quán)利劃分:call option: 看漲期權(quán),在未來某個時間可以以某種價格購買某種商品的權(quán)利,如果未來該購買價格比商品的實際價格還要高,可以放棄該權(quán)利,只有低于商品的價格才會有盈利的機會。每一個期權(quán)合約都有一個買方和賣方,買方擁有權(quán)利,賣方擁有義務(wù)。買方一旦實施該權(quán)利,賣方必須履行其義務(wù)。
put option: 看跌期權(quán),在未來某個時間可以以某種價格出售某種商品的權(quán)利,如果未來該出售價格低于商品的實際價格,可以放棄該權(quán)利,不然可以選擇在現(xiàn)貨市場上出售該商品獲取更高的利潤。同樣,也對應(yīng)于一個買方和賣方,賣方擁有權(quán)利,買方擁有義務(wù)。
根據(jù)買方買方又延伸出四種期權(quán)形式:long call: 看漲期權(quán)的購買方,擁有權(quán)利購買,跟short call相對
short call: 看漲期權(quán)的賣出方,擁有義務(wù)出售
long put: 看跌期權(quán)的購買方,擁有義務(wù)出售,跟short put相對
short put: 看跌期權(quán)的賣出方,擁有義務(wù)購買
根據(jù)交割時間劃分:歐式期權(quán):只能在到期日交割
美式期權(quán):在到期日之前和到期日都可以交割
期權(quán)的價格
跟股票、黃金的價格一樣,期權(quán)也有價格,股票的價格反應(yīng)了對于公司未來業(yè)績的期望,黃金甚至可以等同于貨幣,賦予了流通的屬性。期權(quán)的價格并不反映標(biāo)的物的價值,而是作為風(fēng)險補償,由期權(quán)買方給賣方,作為賣方承擔(dān)風(fēng)險的回報。
期權(quán)價格又稱權(quán)利金,premium,指期權(quán)合約購買方在購買期權(quán)時必須支付給期權(quán)賣方的費用,因而獲得了一定的權(quán)利,買方的風(fēng)險是已知的,就算未來現(xiàn)貨價格大幅變化時,可以選擇不實施權(quán)利,最多損失的就是這部分費用。然而,賣方需要承擔(dān)一定的風(fēng)險甚至損失,例如對于call option的賣方而言,當(dāng)現(xiàn)貨價格大幅上漲時,仍需要以遠低于現(xiàn)貨價格的交割價格賣給買方。這也是premium的來由,premium的中文意思就是保險費、溢價的意思。
期權(quán)的價格主要由內(nèi)涵價值和時間價值(time value)組成:
期權(quán)價格 = 內(nèi)涵價值 + 時間價值根據(jù)期權(quán)的內(nèi)涵價值(intrinsic value)將期權(quán)分為:In the money: 價內(nèi)期權(quán)或?qū)嵵灯跈?quán),call option時如果交割價格小于現(xiàn)貨價格,put option時如果交割價格大于現(xiàn)貨價格
Out of the money: 價外期權(quán)或者虛值期權(quán),call option時如果交割價格大于現(xiàn)貨價格,put option時如果交割價格小于現(xiàn)貨價格
In the mony: 平值期權(quán),不論看漲還是看跌期權(quán),交割價格等于現(xiàn)貨價格
時間價值時間價值是指期權(quán)的價格超過內(nèi)涵價值的部分
指在期權(quán)有效期內(nèi),標(biāo)的資產(chǎn)的波動為期權(quán)所有者帶來的收益可能性
期權(quán)的內(nèi)涵價值表明了期權(quán)合約履行時可以獲得的利潤,交割價格和現(xiàn)貨價格的gap越大,盈利的可能性更大。距離交割期越久,期貨的時間價值越大,因而期貨價格越高
BS模型的重要假設(shè)針對歐式期權(quán),即交割期前不能交易
期權(quán)有效期內(nèi)無分紅和其它所得
市場無法預(yù)測
無風(fēng)險利率和波動性均是恒定值
標(biāo)的物價格遵循對數(shù)正態(tài)分布
不含分紅的期權(quán)定價BS模型
下面是變量的含義:S: t時刻的現(xiàn)貨價格
T: 期權(quán)合約的總時間,當(dāng)前時刻到交割期的時間為T-t
K: t時刻的交割價格
r: 無風(fēng)險利率
σ: 現(xiàn)貨價格的標(biāo)準(zhǔn)差
N(d)為標(biāo)準(zhǔn)正態(tài)分布的累計分布,d為自變量
C(S, t)為t時刻call option的價格,P(S, t)為t時刻put option的價格。BS公式為:
其中:
Python實現(xiàn)
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
含分紅的期權(quán)定價BS模型
除了之前的五個變量,還多了一個變量q:S: t時刻的現(xiàn)貨價格
T: 期權(quán)合約的總時間,當(dāng)前時刻到交割期的時間為T-t
K: t時刻的交割價格
r: 無風(fēng)險利率
σ: 現(xiàn)貨價格的標(biāo)準(zhǔn)差
q: 分紅率,假設(shè)是連續(xù)分紅
現(xiàn)在q參數(shù)被包含在了C(S, t)和P(S, t)公式中:
其中:
Python實現(xiàn)
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
總結(jié)
以上是生活随笔為你收集整理的python ui bs_期权及 Black-Scholes模型的python实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100年前的北京Vlog火了!AI修复古
- 下一篇: 纵向LR+同态加密+feature bi