程式
QuantLib Python:為什麼 NPV 不同?淨現值(0.1,0,1100,1100,110) 應該是 100,而不是 99.53
我正在嘗試為 Python 學習 QuantLib。除了我之前關於 CashFlows.npv() 語法的問題,現在我了解了語法的工作原理,我有一個問題是為什麼輸出與我的預期不同(這就是為什麼我認為單獨的問題是合理的)。
在我的玩具範例中,我的現金流在 2001 年 1 月 15 日為零,在 2002 年 1 月 15 日為 110。如果我將它們打折 10%,我希望 pv 為 100,但我得到 99.53211。為什麼?我錯過了什麼?這意味著已經過去了 384 天,而不是 365 天。那些不是閏年。我嘗試過使用 act/365 和 30/360:它們都給出相同的結果,而不是 100。
import QuantLib as ql d1 = ql.Date(15,1,2001) ql.Settings.instance().setEvaluationDate(d1) cfs = [ql.SimpleCashFlow(0, d1), ql.SimpleCashFlow(110, d1 + 365)] calc_date = d1 risk_free_rate = 0.1 curve_act_365 = ql.YieldTermStructureHandle( ql.FlatForward(calc_date, risk_free_rate, ql.Actual365Fixed())) pv_act_365 = ql.CashFlows.npv(cfs, curve_act_365, True) curve_30_360 = ql.YieldTermStructureHandle( ql.FlatForward(calc_date, risk_free_rate, ql.Thirty360())) pv_30_360 = ql.CashFlows.npv(cfs, curve_30_360, True)
預設情況下,QuantLib 期望 FlatForward 建構子中的連續複合率。
所以你得到的PV基本上是:
from math import exp print(110 * exp(-0.1))
如果您使用年復利率定義曲線,如下所示:
curve_30_360 = ql.YieldTermStructureHandle( ql.FlatForward(calc_date, risk_free_rate, ql.Thirty360(), ql.Compounded, ql.Annual))
你會得到100。