Pythonquantlib

如何在 QuantLib - Python 中計算債券收益率

  • April 15, 2016

我想計算具有市場價格和票息的債券的收益率。我嘗試在 Python 中從( https://mhittesdorf.wordpress.com/2013/03/03/introducing-quantlib-internal-rate-of-return/ )複製 C++,但沒有成功。如何在 quantlib-python 中使用“二等分”求解器?

solver = ql.Bisection()
solver_max = 0.5
solver_min = 0.1
solver_maxEvaluations = 1000 
solution = solver.solve(?, solver_maxEvaluations, solver_min, solver_max)

NotImplementedError:重載函式“Bisection_solve”的參數數量或類型錯誤。

可能的 C/C++ 原型有:

Bisection::solve(PyObject *,Real,Real,Real)

Bisection::solve(PyObject *,Real,Real,Real,Real)

在這種情況下,“PyObject *”是什麼?

在對 的呼叫中Bisection.solve,問號必須是要查找其零的 Python 函式。在您的情況下,它應該是重現IRRSolver::operator()Mick Hittesdorf 程式碼中的邏輯的東西,即類似這樣的東西(我沒有測試過):

cashflows = fixedRateBond.cashflows()
npv = fixedRateBond.NPV()
def price_error_given_yield(rate):
   interestRate = InterestRate(rate, ActualActual(ActualActual.Bond),
                               Compounded, Annual)
   return CashFlows.npv(cashflows, interestRate, False) - npv

irr = solver.solve(price_error_given_yield, accuracy, guess, min, max)

這個想法是您編寫一個函式,該函式獲取收益並告訴您相應價格與目標價格相差多少;求解器採用該函式並返回其零,即結果(即與目標價格的差異)為零的輸入收益率的值。

這就是說,Mick 的方法對教育目的很有用,但它複製了綁定對像中已有的功能。你只需要打電話

fixedRateBond.bondYield(targetPrice, ActualActual(ActualActual.Bond),
                       Compounded, Annual)

但是請注意,targetPrice上面應該是乾淨的價格,所以在你的情況下,返回的是什麼fixedRateBond.cleanPrice()而不是fixedRateBond.NPV().

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