2009年4月1日 星期三

在 C# 使用 Excel 函數 - Black Scholes 選擇權公式的常態分配值

最簡單的Black-Scholes選擇權評價公式有五個參數, 分別為:
  • S: 標的現貨價格 Spot
  • K: Strike 選擇權履約價 Strike
  • Vol: 標的波動率 Volatility
  • r: 無風險利率 Risk-free Rate
  • T: 到期時間 Time to Maturity
這五個參數都可以很簡單地從資料庫取得或是計算得出, 但是 Black Scholes 公式中的常態分配值 N 比較複雜, 必須要用數值方式去近似出結果. 另一種方式是直接呼叫 Excel 的函數 NormSDist(z). 要在 C# 使用 Excel 函數, 首先建立一個 Excel 的實例:

Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();

然後建立一個 Wrapper 函數 N:

private double N(double z)
{
return excel.WorksheetFunction.NormSDist(z);
}

這樣就可以直接在 C# 的程式裡呼叫 N(z) 這個函數. 以下是示範的 Black-Scholes 選擇權評價方法:
private void BlackScholesVanillaOption(double S, double K, double Vol, double r, double T, out double call, out double put)
{
double d1 = (Math.Log(S / K) + (r + Vol * Vol) * T) / Vol / Math.Sqrt(T);
double d2 = d1 - Vol * Math.Sqrt(T);

call = S * N(d1) - K * Math.Exp(-r * T) * N(d2);
put = K * Math.Exp(-r * T) * N(-d2) - S * N(-d1);
}