1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/*
Copyright (C) 2006, 2007 StatPro Italia srl
Copyright (C) 2018 Matthias Lungwitz
This file is part of QuantLib, a free-software/open-source library
for financial quantitative analysts and developers - http://quantlib.org/
QuantLib is free software: you can redistribute it and/or modify it
under the terms of the QuantLib license. You should have received a
copy of the license along with this program; if not, please email
<quantlib-dev@lists.sf.net>. The license is also available online at
<https://www.quantlib.org/license.shtml>.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the license for more details.
*/
#ifndef quantlib_convertible_bonds_i
#define quantlib_convertible_bonds_i
%include bonds.i
%include dividends.i
%include options.i
%{
using QuantLib::ConvertibleZeroCouponBond;
using QuantLib::ConvertibleFixedCouponBond;
using QuantLib::ConvertibleFloatingRateBond;
using QuantLib::BinomialConvertibleEngine;
%}
%shared_ptr(ConvertibleZeroCouponBond)
class ConvertibleZeroCouponBond : public Bond {
public:
ConvertibleZeroCouponBond(
const ext::shared_ptr<Exercise>& exercise,
Real conversionRatio,
const std::vector<ext::shared_ptr<Callability> >& callability,
const Date& issueDate,
Integer settlementDays,
const DayCounter& dayCounter,
const Schedule& schedule,
Real redemption = 100.0);
};
%shared_ptr(ConvertibleFixedCouponBond)
class ConvertibleFixedCouponBond : public Bond {
public:
ConvertibleFixedCouponBond(
const ext::shared_ptr<Exercise>& exercise,
Real conversionRatio,
const std::vector<ext::shared_ptr<Callability> >& callability,
const Date& issueDate,
Integer settlementDays,
const std::vector<Rate>& coupons,
const DayCounter& dayCounter,
const Schedule& schedule,
Real redemption = 100.0,
const Period& exCouponPeriod = Period(),
const Calendar& exCouponCalendar = Calendar(),
const BusinessDayConvention exCouponConvention = Unadjusted,
bool exCouponEndOfMonth = false);
};
%shared_ptr(ConvertibleFloatingRateBond)
class ConvertibleFloatingRateBond : public Bond {
public:
ConvertibleFloatingRateBond(
const ext::shared_ptr<Exercise>& exercise,
Real conversionRatio,
const std::vector<ext::shared_ptr<Callability> >& callability,
const Date& issueDate,
Integer settlementDays,
const ext::shared_ptr<IborIndex>& index,
Integer fixingDays,
const std::vector<Spread>& spreads,
const DayCounter& dayCounter,
const Schedule& schedule,
Real redemption = 100.0,
const Period& exCouponPeriod = Period(),
const Calendar& exCouponCalendar = Calendar(),
const BusinessDayConvention exCouponConvention = Unadjusted,
bool exCouponEndOfMonth = false);
};
%shared_ptr(BinomialConvertibleEngine<CoxRossRubinstein>)
%shared_ptr(BinomialConvertibleEngine<JarrowRudd>)
%shared_ptr(BinomialConvertibleEngine<AdditiveEQPBinomialTree>)
%shared_ptr(BinomialConvertibleEngine<Trigeorgis>)
%shared_ptr(BinomialConvertibleEngine<Tian>)
%shared_ptr(BinomialConvertibleEngine<LeisenReimer>)
%shared_ptr(BinomialConvertibleEngine<Joshi4>)
template <class T>
class BinomialConvertibleEngine : public PricingEngine {
public:
BinomialConvertibleEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>,
Size steps,
const Handle<Quote>& creditSpread,
const std::vector<ext::shared_ptr<Dividend> >& dividends
= std::vector<ext::shared_ptr<Dividend> >());
};
%template(BinomialCRRConvertibleEngine) BinomialConvertibleEngine<CoxRossRubinstein>;
%template(BinomialJRConvertibleEngine) BinomialConvertibleEngine<JarrowRudd>;
%template(BinomialEQPConvertibleEngine) BinomialConvertibleEngine<AdditiveEQPBinomialTree>;
%template(BinomialTrigeorgisConvertibleEngine) BinomialConvertibleEngine<Trigeorgis>;
%template(BinomialTianConvertibleEngine) BinomialConvertibleEngine<Tian>;
%template(BinomialLRConvertibleEngine) BinomialConvertibleEngine<LeisenReimer>;
%template(BinomialJ4ConvertibleEngine) BinomialConvertibleEngine<Joshi4>;
#if defined(SWIGPYTHON)
%pythoncode %{
def BinomialConvertibleEngine(process, type, steps, creditSpread, dividends=[]):
type = type.lower()
if type == "crr" or type == "coxrossrubinstein":
cls = BinomialCRRConvertibleEngine
elif type == "jr" or type == "jarrowrudd":
cls = BinomialJRConvertibleEngine
elif type == "eqp":
cls = BinomialEQPConvertibleEngine
elif type == "trigeorgis":
cls = BinomialTrigeorgisConvertibleEngine
elif type == "tian":
cls = BinomialTianConvertibleEngine
elif type == "lr" or type == "leisenreimer":
cls = BinomialLRConvertibleEngine
elif type == "j4" or type == "joshi4":
cls = BinomialJ4ConvertibleEngine
else:
raise RuntimeError("unknown binomial engine type: %s" % type);
return cls(process, steps, creditSpread, dividends)
%}
#endif
#endif
|