標籤:

如何計算希臘字母

我們知道對於歐式期權,存在簡單的B-S方程推導公式得到各個希臘字母。然而對於美式期權就未必準確了。如果你用二叉樹方法對於期權定價,那麼我們可能找不到解析公式求得Delta,Vega, Theta, Gamma和Rho。即使對於歐式期權,可能希臘字母公式也會計算超限,報錯溢出。

另一方面,Gamma這種二階希臘字母不同於其他希臘字母。你不能簡單進行線性累加,而是需要對於一個組合頭寸進行計算。特別是波動率套利頭寸,Gamma的正負轉換非常致命。我們知道負Gamma意味著市場的急速波動會大大降低頭寸價值,反之則是皆大歡喜。

因此為了克服以上困難,我們可以直接按照希臘字母的定義來計算。假設我們已經知道了波動率,也知道了標的合約當前價位,並且確定了定價演算法,那麼接下來我們就可以用下面的方式計算Delta。Delta表示標的合約在當前價位向上或者向下變動一個最小值,期權價格的變動值。由於標的合約不可能存在無限小的報價單位,因此我們可以假設變動的最小值為1。當然如果交易所有規定,也可以設置為0.5或者其他值。無風險利率假設為0.03, 定價模型使用BAW美式期權定價模型。那麼首先我們計算標的合約上漲一個點,合約的理論價格up;同理計算標的合約下降1個點,合約的理論價格down;那麼Delta就是(up-down)/2。這個定義中,波動率為當前期權價格對應的隱含波動率。使用R代碼顯示如下

func_delta_BAW<-function(feeds){ increment <-1 up <-AmericanOption(type=opt_type[index], underlying = opt_spot[index]+increment, strike = opt_strike[index], dividendYield = 0, riskFreeRate = 0.03, maturity=opt_maturity[index], volatility =opt_volatility[index] , engine = "BaroneAdesiWhaley") down <-AmericanOption(type=opt_type[index], underlying = opt_spot[index]-increment, strike = opt_strike[index], dividendYield = 0, riskFreeRate = 0.03, maturity=opt_maturity[index], volatility =opt_volatility[index] , engine = "BaroneAdesiWhaley") delta_per_contract <-(up$value[1]-down$value[1])/2 }

同理我們可以計算出Vega,波動率跳動單位為1個百分點;Rho, 無風險利率跳動單位為0.01個百分點;Theta,時間跳動單位為1/360或者1/256;不再贅述。

接下來比較複雜的是Gamma計算。由於Gamma是價格的二階導數,因此我們需要計算標的合約變動一個點的情況下,Delta變動的情況,總共需要五個理論值。具體過程就不再細說了,聰明的你一定能想到。

除了計算方法外,我們需要考慮得另一個問題是計算頻率。如果標的價格變動頻率遠遠大於期權合約,那麼每次變動重新計算一下,導致得計算成本和延時也許讓計算值毫無意義。特別是在分鐘級別的價格擾動,許多希臘字母的值只是在固定的幾個值之間來回跳。為了提高效率,我們有三種方式:

方法1: 降低計算頻率至交易頻率。我們沒必要獲取所有時刻的希臘字母,只需要知道和交易頻率相符的風險值就好了。例如短期交易可以只需要日數據,日內迴轉交易則需要分鐘級別交易,如果是流動性極好的做市交易,那麼秒級的數據是必須的。

方法2: 提前算好。由於標的合約的每日幅度是固定值,那麼我們可以在收盤後提前對應每個可能的價格計算好希臘字母。這裡一個技巧是隱含波動率的選擇。為了準確,我們可以考慮選擇波動率均值上下一個標準差內的波動率區間。即使這樣,計算量也不會大。當日交易時,程序只需要根據合約價格索引表,獲取希臘字母值即可。

方法3: 獲取外部數據。例如wind等數據平台會提供他們的計算值,如果你只是關注希臘字母的隨機變化,那麼即使希臘字母值與實際的值有微小差別也沒有關係。當然,一旦你使用了外部數據,就必須一直使用下去。否則可能會出現計算偏差。並且第三方調整演算法時,你也需要了解。


推薦閱讀:

現在期權發展以及以後趨勢
個股期權開戶條件要求,個股期權哪些風險需特別關注?
【冼尼瑪市場廢話】2018年2月8日
不可不知的期權風險管理利器——希臘字母

TAG:期權 |