When pricing a vanilla option, there are at a minimum 3 yield curves to consider:

  • risk free yield curve = YC
  • dividend yield curve = DC (or discrete dividends for American options but not the topic here)
  • borrow curve = BC

When building a process (for example BlackScholesMertonProcess) we can only pass 2 curves, a yield curve and dividend curve. Consequently we need to tweak one of the curves.

We probably don't want to mess with YC so any discounting that is not happening on the underlying (for example for the value of the option) remains accurate.

This leaves us with combining DC and BC and pass the result of this combination as the dividend curve in the process.

What is the best practice for achieving this ? Is it to use something like SpreadedLinearZeroInterpolatedTermStructure and spread DC by BC ? Or should we instead build our own utility to add curves ?

There are certainly some speed issues associated with this therefore I'm looking for the solution that provides the fastest pricing time.

Thank you


2 Answers 2


Without knowing how the guts of QuantLib work, the borrow curve and dividend curve should be included together. If you think about it, both borrow costs and dividends affect the stock used for the delta hedge, whereas the risk free discount applies to the whole portfolio (option plus hedge, i.e. stock and bank account).

Maybe the notes http://www.math.ualberta.ca/~cfrei/PIMS/M_Rutkowski_PIMS_slides.pdf can help you. In slide 18 you see how funding (in a more complicated version, but you can just take $f^\beta$ to be your borrow rate) enters the BS formula, for example.


It depends on your use cases.

Something like SpreadedLinearZeroInterpolatedTermStructure, as you suggested, will work but will use both the original curve and the interpolated spread each time you need rates, which won't be as fast as possible.

If your curves have compatible nodes, you can write some code to create an interpolated combined curve manually. However, if your rate curve is, e.g., the result of a bootstrap process, the combined curve won't automatically react to changes in the input rates.

Also, the difference in timing might not be relevant in the context of your larger calculations, so I'd measure it and use it as a factor in your decision.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.