1
$\begingroup$

I am working on a project which addresses finances and I am curious if I could use qunatlib for it. I have already looked it a documentation about it but since I am definitely not an expert in finances, could not conclude if the quantlib suits well for the measures I have.

For example, I am calculating coupon / dividend payment on top of a bond / stock on a certain day. Lets have a look at the coupon example. On the specified day a client has 10 Bonds (each has face amount of 100 USD and coupon rate of 7%), by the simple multiplication I calculate that the client gets 70 USD on that day.

As well as I am calculating book and market value of assets along with total and relative price return measures also on top of asset. I am curious of any of those would be possible to calculate by using qunatlib. I see that it is generally widely used and offers a hand full of features and the further motivation for this is the fact that I would not like to reinvent the wheel if there is a library which can do it for me.

If anyone could tell me if it is possible to calculate any of those measures using qunatlib and ideally provide a sample of the measurement it would be great. I'll appreciate any help.

Thx in advance

$\endgroup$
5
  • $\begingroup$ Are you saying you have 10 fixed-rate bonds with 7% fixed-rate, the reset dates are like monthly (or yearly, doesn't matter)? You want to get the NPV of your portfolio? You'll use those the NPV to calculate returns in investment (eg: relative to how much you've paid to buy the bonds)? $\endgroup$
    – SmallChess
    Commented Aug 25, 2016 at 12:59
  • $\begingroup$ If your answer to my previous comment is yes, QuantLib can easily manage it. I think I can write you some sample code. $\endgroup$
    – SmallChess
    Commented Aug 25, 2016 at 13:01
  • $\begingroup$ In the system I work on, there are fixed-rate, convertible as well as floating rate bonds but yes fixed-rate bonds could be taken as an example. Reset days, if the frequency is meant by reset dates, annual could be an example. A client has a portfolio (list of instruments) it can contain bonds as well as other instruments (i.e. stocks). Lets take bonds for showcase. I'm not sure how NPV could be used to calculate these measures and I would appreciate if you could write some samples and provide more info. Thx a lof for the reply and if you need more information from my side let me know. $\endgroup$
    – amsalk
    Commented Aug 25, 2016 at 13:28
  • $\begingroup$ What specific return measure are you interested? Yield? Yield-to-maturity? $\endgroup$
    – SmallChess
    Commented Aug 25, 2016 at 13:39
  • $\begingroup$ Well as I've said I'm definetly not an expert in this area. If I understood it correctly yield describes the amount of money that returns to the owner of an instrument (bond) and yield to maturity includes also the purchase price. If I am correct, both of them would be interesting. I hope that it isn't so much work. $\endgroup$
    – amsalk
    Commented Aug 25, 2016 at 13:47

1 Answer 1

3
$\begingroup$

Is this sufficient for you? Creating a fixed-bond and it's clean price, dirty price and YTM.

const Date t0 = Date(8, July, 2015);    // July 8th, 2015
const Date t1 = Date(10, August, 2015); // August 10th, 2015
const Date t2 = t0 + Period(2, Months); // September 8th, 2015
const Date t3 = t0 + Period(3, Months); // October 8th, 2015

// Make sure we're evaluating at t0
Settings::instance().evaluationDate() = t0;

Schedule sch(t0,
             t3,
             Period(Monthly),
             UnitedStates(),
             Unadjusted,
             Unadjusted,
             DateGeneration::Backward,
             false);

const auto dc = Actual360();

FixedRateBond bond(0, 1000, sch, std::vector<Rate> { 0.07, 0.07, 0.07 }, dc);

// We have four payments (three coupons + one nominal)
std::cout << bond.cashflows().size() << std::endl;

// Coupon for the first payment date
std::cout << bond.cashflows()[0]->amount() << std::endl;

// Coupon for the second payment date
std::cout << bond.cashflows()[1]->amount() << std::endl;

// Coupon for the final payment date
std::cout << bond.cashflows()[2]->amount() << std::endl;

// Nominal at the end of the bond
std::cout << bond.cashflows()[3]->amount() << std::endl;

Handle<YieldTermStructure> zero(flatRate(t0, 0.05, Actual360()));

boost::shared_ptr<PricingEngine> engine = boost::shared_ptr<PricingEngine>(
                                            new DiscountingBondEngine(Handle<YieldTermStructure>(zero)));
bond.setPricingEngine(engine);

std::cout << bond.dirtyPrice() << std::endl;
std::cout << bond.cleanPrice() << std::endl;
std::cout << bond.yield(dc, Simple, Monthly) << std::endl;
$\endgroup$
2
  • $\begingroup$ First of all, thank you very much for the answer. It is definitely helpful. I've executed the code with some values from the db and it looks fine. Anyway there is something which I still don't understand correctly and that's rate array. So, why are there exactly three coupons (0.07) in the array? Shouldn't just one be enough? $\endgroup$
    – amsalk
    Commented Aug 26, 2016 at 11:38
  • $\begingroup$ @amsalk It's possible for each coupon to have a different coupon rate. In QuantLib, this is done by giving a std::vector. In this case, we have three coupons, so we have three values. If your input has a different size, QuantLib will crash and report an error message. (Try it!) $\endgroup$
    – SmallChess
    Commented Aug 26, 2016 at 11:39

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.