程式

BlackProcess 的優質結果不符合線上引擎

  • August 4, 2016

我正在嘗試使用 Quantlib(在 C# 中)實現 BlackProcess,而我為 NPV() 獲得的結果與我可以在網上找到的一些資源不一致。這是我的程式碼:

var underlyingH = new Handle<Quote>(new SimpleQuote(27.77));
var underlierVolatility = 0.22;
var dayCounter = new Actual365Fixed();
var settlementDate= DateTime.UtcNow;

var flatTermStructure = new Handle<YieldTermStructure>(new FlatForward(settlementDate, 0.001, dayCounter));
var flatVolTs = new Handle<BlackVolTermStructure>(new BlackConstantVol(settlementDate, calendar, underlierVolatility, dayCounter ));
var computationEngine = new BlackProcess(underlyingH, flatTermStructure, flatVolTs);

// Option
var payoff = new PlainVanillaPayoff(type, (double)option.Instrument.Strike);
var europeanOption = new VanillaOption(payoff, new EuropeanExercise(option.Instrument.Expiry.DateTime));

// Black-76 on european option
europeanOption.setPricingEngine(new AnalyticEuropeanEngine(computationEngine));

我用來比較結果的資源是:http: //lombok.demon.co.uk/financialTap/options/bond/shortterm https://commoditymodels.files.wordpress.com/2012/07/black-76-calculator .xls

我的問題是:根據我們可以在網上找到的香草引擎,在我從 QuantLib 獲得的結果中,什麼可以產生 NPV(1-2% 差異)的差異?

我懷疑我使用不同“參數”的方式存在錯誤,例如:

  • 平進
  • 黑色恆卷
  • Actual365 日曆

我承認有非常(非常)接近的結果。

將此重新定義為將來參考的答案。

首先,我在這裡寫的內容適用於 QuantLib 的 C++ 版本及其由 SWIG 生成的 C# 包裝器;如果您使用的是 QLNet 本機 C# 埠,我不知道它是如何工作的。

預設情況下,QuantLib 以一天為解析度工作,並且在計算 TTM 時會忽略小時,這會導致您的計算與 QuantLib 結果之間存在差異。(順便說一句,我現在很清楚你是如何通過呼叫yearFraction日計數器上的方法來獲得包括小時在內的 TTM 的;這也應該在日解析度下工作。)

從 1.7 版開始,可以編譯 QuantLib,以便將時間考慮在內(該功能預設不啟用,因為它會導致一些性能損失)。在 Windows 上,取消註釋該行

//#    define QL_HIGH_RESOLUTION_DATE

並重新編譯 QuantLib 和 C# 模組。在其他系統上,執行

./configure --enable-intraday

並重新編譯整個事情。同樣,這適用於 C++ 版本和 SWIG 生成的 C# 包裝器。

引用自:https://quant.stackexchange.com/questions/28440