python Quantlib中等效的Excel YIELD函式
我正在努力在 python 中使用 Quantlib 獲得相當於 Excel 的 YIELD 函式。正如您從此處關於 YIELD 的 Excel 文件中看到的那樣,與使用 Quantlib http://gouthamanbalaraman.com/blog/quantlib-bond-modeling.html的範例相比,只需要幾個參數
更新:
此外,如果我使用函式 bondYield,我似乎無法獲得與 Excel 中相同的值。以這個債券為例:
上面的 YIELD 有公式
=YIELD(B1,B2,B3/100,B4,100,2,1)*100
。產量為1.379848
。如果我嘗試在Quantlib中設置類似的參數,如下圖
# ql.Schedule calendar = ql.UnitedStates() bussinessConvention = ql.ModifiedFollowing dateGeneration = ql.DateGeneration.Backward monthEnd = False cpn_freq = 2 issueDate = ql.Date(30, 9, 2014) maturityDate = ql.Date(30, 9, 2019) tenor = ql.Period(cpn_freq) schedule = ql.Schedule(issueDate, maturityDate, tenor, calendar, bussinessConvention, bussinessConvention, dateGeneration, monthEnd) # ql.FixedRateBond dayCounter = ql.ActualActual() settlementDays = 1 faceValue = 100 couponRate = 1.75 / 100 coupons = [couponRate] fixedRateBond = ql.FixedRateBond(settlementDays, faceValue, schedule, coupons, dayCounter) # ql.FixedRateBond.bondYield compounding = ql.Compounded cleanPrice = 100.7421875 fixedRateBond.bondYield(cleanPrice, dayCounter, compounding, cpn_freq) * 100
這給出的產量
1.3784187000852273
接近,但與 excel 函式給出的產量不同。
在如何計算 QuantLib-Python 中的債券收益率中或多或少地回答了您的問題。一旦您建立了固定利率債券對象(如您連結的文章中所示),您可以呼叫
fixedRateBond.bondYield(targetPrice, day_count, compounding, frequency)
將以上內容與連結中的 Excel 界面進行比較,
targetPrice
是pr
,frequency
是 Excel 中的頻率,day_count
是basis
。其他參數(期限、結算等)包含在債券的定義中。這將讓您跳過 Goutham 文章中處理點曲線定義和定價引擎的部分。但是,您不會有 Excel 的公式那麼簡單的東西。那是因為債券的定義必須包括很多現實生活中的參數(例如:我們是否應該將優惠券的開始和結束時間調整為周末或節假日的工作日?如果是,如何?什麼?我們應該使用日曆來決定哪幾天是假期?你想讓收益率不斷複利嗎?)
如果您想避免這種情況,您可以選擇對您有意義的預設值,並將計算包裝在您可以呼叫的更簡單的界面中。
你因為問了一個不好的問題而被否決了。我會解釋為什麼這個問題不好。
您指向 Excel 文件的連結包含 YIELD 功能的完整規範。
如果在贖回之前有一個或更少的票息期,YIELD 計算如下:
> > (圖片在這裡;看看你的連結)哪裡: > > >
A = 從息票期開始到結算日的天數(累計天數)。
DSR = 從結算日到贖回日的天數。
E = 息票期內的天數。
如果在贖回之前有多個票息期,則通過一百次迭代計算 YIELD。解析度使用牛頓法,基於函式 PRICE 使用的公式。收益率一直變化,直到給定收益率接近價格的估計價格。
所以:如果有一個息票期,你就有一個明確的公式。
如果沒有,您必須執行 PRICE 方程(Excel 文件)並獲得 $ yield $ 這樣
$$ PRICE(yield,\theta) = yield $$ 在哪裡 $ \theta $ 是一個帶有其他參數的向量。現在,您可以通過兩種方式執行此操作:
- 實現自定義數值常式。Excel 使用牛頓法執行此操作,但您可以嘗試定點迭代(在進行一些數學運算並驗證 PRICE 滿足收縮映射定理的條件之後。
- 如果這聽起來很難:使用scipy.optimize.root(你可能已經發現Google搜尋“python函式根”。注意這個函式解決了方程 $ f(x)=0 $ ,所以你想餵牠 $ PRICE(yield,\theta)-yield $
總而言之:您所要做的就是:
- 如 Excel 文件中詳述的那樣,在一個息票期或更少期限內實施 YIELD 2) 如 Excel 文件中詳述的那樣實施 PRICE;3) 使用 Python 進行尋根。
這可能需要你一個半小時的編碼,但是,嘿,你正在學習。