近期由于作業需要,接觸到了期權定價模型以及隱含波動率等,作為非專業人士經過幾星期惡補,終于搞定了難題,特此整理一些資料防止其他同仁踩坑,如有錯誤之處請各位指正,
1.什么是期權定價模型?
期權定價模型由布萊克與斯科爾斯在20世紀70年代提出,該模型認為,只有股價的當前值與未來的預測有關;變數過去的歷史與演變方式與未來的預測不相關,模型表明,期權價格的決定非常復雜,合約期限、股票現價、無風險資產的利率水平以及交割價格等都會影響期權價格,
2.什么是Black-Scholes期權定價模型?
B-S是兩位經濟學家BLACK、SCHOLES名字的縮寫,為了紀念他們發現該模型而用他們的名字命名,
期權定價模型基于對沖證券組合的思想,投資者可建立期權與其標的股票的組合來保證確定報酬,在均衡時,此確定報酬必須得到無風險利率,期權的這一定價思想與無套利定價的思想是一致的,所謂無套利定價就是說任何零投入的投資只能得到零回報,任何非零投入的投資,只能得到與該項投資的風險所對應的平均回報,而不能獲得超額回報(超過與風險相當的報酬的利潤),從Black-Scholes期權定價模型的推導中,不難看出期權定價本質上就是無套利定價,
假設條件
1、標的資產價格服從對數正態分布;
2、在期權有效期內,無風險利率和金融資產收益變數是恒定的;
3、市場無摩擦,即不存在稅收和交易成本;
4、金融資產在期權有效期內無紅利及其它所得(該假設后被放棄);
5、該期權是歐式期權,即在期權到期前不可實施,
定價公式
C=S·N(D1)-L·(E^(-γT))*N(D2)
其中:
D1=(Ln(S/L)+(γ+(σ^2)/2)*T)/(σ*T^(1/2))
D2=D1-σ*T^(1/2)
C—期權初始合理價格
L—期權交割價格
S—所交易金融資產現價
T—期權有效期
γ—連續復利計無風險利率H
σ2—年度化方差
N()—正態分布變數的累積概率分布函式,在此應當說明兩點:
第一,該模型中無風險利率必須是連續復利形式,一個簡單的或不連續的無風險利率(設為γ0)一般是一年復利一次,而γ要求利率連續復利,γ0必須轉化為r方能代入上式計算,兩者換算關系為:γ=LN(1+γ0)或γ0=Eγ-1,例如γ0=0.06,則γ=LN(1+0.06)=0583,即100以583%的連續復利投資第二年將獲106,該結果與直接用γ0=0.06計算的答案一致,
第二,期權有效期T的相對數表示,即期權有效天數與一年365天的比值,如果期權有效期為100天,則T=100/365=0.274,
3.什么是隱含波動率?
隱含波動率是將市場上的權證交易價格代入權證理論價格模型,反推出來的波動率數值,香港市場稱為“引伸波幅”,隱含波動率是市場對相關資產(正股或指數)未來一段時間內的波動預期,與權證價格是同方向變化,是對未來市場價格波動的一個預測值.
4.如何計算隱含波動率?
從理論上講,要獲得隱含波動率的大小并不困難,由于期權定價模型(如BS模型)給出了期權價格與五個基本引數(標的股價、執行價格、利率、到期時間、波動率)之間的定量關系,只要將其中前4個基本引數及期權的實際市場價格作為已知量代入定價公式,就可以從中解出惟一的未知量,其大小就是隱含波動率,(即通過BS模型公式代入標的股價、執行價格、無風險利率、到期時間,當前市場期權價格 從而反推計算出隱含波動率,)
5.如何計算期權價格?
使用BS公式計算期權價格:
只需將標的股價、執行價格、無風險利率、到期時間,隱含波動率代入BS公式即可計算出期權價格.
公式如下:


6.關于隱含波動率與期權價格疑問
首先需要有期權價格,然后再通過計算得出隱含波動率,期權價格是由市場決定的,再期權市場上買方和賣方都是由用戶組成,期權價格是由買方和賣方的心理預期價位決定的.交易所再通過取買賣雙方成交價作為期權價格然后代入BS公式計算出隱含波動率
7.計算期權價格流程:
例子:
1.首先從火幣網獲取當前最近的行權日的期權資訊,比如當前期權到期時間剩余2天的期權,行權價為400的看漲期權,我們獲取他的最新期權成交價以及當前以太坊現貨價格,
此時我們得到4個引數:
ETH現貨價格(645)
行權價(400)
到期時間剩余2天(2/365)
當前期權最新成交價格(199.61).
我們把以上引數代入波動率計算函式IV(645,400,2/365,199.61),
通過計算它回傳一個對應的波動率(1.254),
2.然后我們再計算我們需要的期權價格,比如我們現在需要知道7天后到期的行權價格為500的期權價格,我們同樣從交易所獲取最新的以太坊現貨價格,把他輸入公式bs(645,500,7/365,1.254)從而計算出一個比較接近市場預期的期貨價格,
8.go代碼實作看漲期權定價及波動率計算
package main
import (
"BAW/go-gaussian"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"math"
"net/http"
"net/url"
"os"
"strconv"
"time"
)
/*
引數S(當前股票價格)、X(執行價格)、T(以年為單位的有效期)、r(連續復利的無風險利率)和 sigma(股票回報率的標準方差,也稱為波動率)
回傳值 為看漲期權價格,看跌期權價格,不需要的部分直接使用_丟棄,
*/
func bs_call(S,X,T,r,sigma float64)(float64,float64){
d1:=(math.Log(S/X)+(r+0.5*math.Pow(sigma,2))*T)/(sigma*math.Sqrt(T))
d2:=(math.Log(S/X)+(r-0.5*math.Pow(sigma,2))*T)/(sigma*math.Sqrt(T))
return S*gaussian.NormCdf(d1)-X*math.Exp(-r*T)*gaussian.NormCdf(d2),X*math.Exp(-r*T)*gaussian.NormCdf(-d2)-S*gaussian.NormCdf(-d1)
}
//計算隱含波動率(通過期權價格反推)
var sigma1 float64
/*
引數S(當前股票價格)、X(執行價格)、T(以年為單位的有效期)、r(連續復利的無風險利率)和 price(期權價格)
*/
func CallIV(S,X,T,r,price float64)(float64,float64,float64) {
for i:=0.0;i<1000000;i++ {
var diff float64
sigma1=0.00001*(i+1)
a,_:=bs_call(S,X,T,r,sigma1)
if price==a{
diff=price+0.1-a
}else if a>price{
diff=0
}else {
diff=price-a
}
if math.Abs(diff)<=0.001{
if sigma1<0.0001 {
return i,0,diff
}
return i,sigma1,diff
}
}
return 0 ,0 ,0
}
以上代碼實作的go-gaussian庫地址 https://github.com/mafredri/go-gaussian.git
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/238600.html
標籤:區塊鏈
