Python
如何在 QuantLib - Python 中計算債券收益率
我想計算具有市場價格和票息的債券的收益率。我嘗試在 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()
.