Hi John,
Sorry, I checked the master branch. The Python interface only expects 2 arguments….
I think I have changed the interface by myself to fit my purpose some time ago though I cant’t remember when…
On your side, to have the same interface with mine. You have to generate Python bindings with swig by yourself.
1. Change the corresponding .i file
You have to change from the line 108 in termstructures.i file:
%rename(ZeroSpreadedTermStructure) ZeroSpreadedTermStructurePtr;
class ZeroSpreadedTermStructurePtr
: public boost::shared_ptr<YieldTermStructure> {
public:
%extend {
ZeroSpreadedTermStructurePtr(
const Handle<YieldTermStructure>& curveHandle,
const Handle<Quote>& spreadHandle) {
return new ZeroSpreadedTermStructurePtr(
new ZeroSpreadedTermStructure(curveHandle,spreadHandle));
}
}
};
To:
%rename(ZeroSpreadedTermStructure) ZeroSpreadedTermStructurePtr;
class ZeroSpreadedTermStructurePtr
: public boost::shared_ptr<YieldTermStructure> {
public:
%extend {
ZeroSpreadedTermStructurePtr(
const Handle<YieldTermStructure>& curveHandle,
const Handle<Quote>& spreadHandle,
Compounding comp = QuantLib::Continuous,
Frequency freq = QuantLib::NoFrequency,
const DayCounter& dc = QuantLib::DayCounter()) {
return new ZeroSpreadedTermStructurePtr(
new ZeroSpreadedTermStructure(curveHandle,spreadHandle, comp, freq, dc));
}
}
};
2. Re-generate swig python binding
Regards,
Cheng
发件人: John Orford [mailto:[hidden email]]
发送时间: 2015年2月9日 14:45
收件人: cheng li; QuantLib users主题: Re: [Quantlib-users] Bond Credit Spread Calibration
Cheng,
it looks like you hit the nail on the head - adding payment frequency and compounding to the ZeroSpreadedTermStructure constructor function looks like it will solve my problem.
Only issue is that my version of Quanlib Python bindings only allow 2 inputs into that function, not 4.
Could you let me know which version of the bindings you are using? Maybe it's customised?
Thanks,
John
On Mon Feb 09 2015 at 10:01:27 John Orford <[hidden email]> wrote:
Thanks Cheng! I'll check your amendments now and let you know : )
On Mon Feb 09 2015 at 9:58:35 AM cheng li <[hidden email]> wrote:
Hi John,
Thank you for sharing your codes. There are some changes needed to be made to your codes to make the example work properly:
Line 80: z_spreaded_term_structure = ZeroSpreadedTermStructure( discounting_term_structure, QuoteHandle( z_spread ))
Should be amended as :
Line 80: z_spreaded_term_structure = ZeroSpreadedTermStructure( discounting_term_structure, QuoteHandle( z_spread ), compounding, payment_frequency)
Z-Spread has its own compounding rule and frequency. And you should make it consistent with what you offer to the function when you call CashFlows.zSpread.
Line 153: print "NPV+AA\t" + str(fixed_rate_bond.NPV() + fixed_rate_bond.accruedAmount())
Should be:
Line 153: print "NPV-AA\t" + str(fixed_rate_bond.NPV() - fixed_rate_bond.accruedAmount())
Normally NPV of bond is it dirty price. So AA should be excluded to be compared with MV which supposed to be clean price.
Regards,
Cheng
发件人: John Orford [mailto:[hidden email]]
发送时间: 2015年2月6日 18:34
收件人: QuantLib users
主题: Re: [Quantlib-users] Bond Credit Spread Calibration
Previous file was wrong - this is the one to look at.
On Fri Feb 06 2015 at 6:23:46 PM John Orford <[hidden email]> wrote:
I attached an example.
Suspect this isn't a stupid mistake, but a fundamental misunderstanding of mine, which is a little worrying.
Any help'll be appreciated.
John
On Fri Feb 06 2015 at 1:06:50 PM John Orford <[hidden email]> wrote:
Hey Guys,
Long time no questions - looking forward to getting back into QL again! Spending too much time ensconced in Javascript.
In any case, I can't figure out what I am doing wrong.
I create a FixedRateBond object with all the requisite accoutrements.
Then call a zSpread function reusing everything from the FixedRateBond object.
For the NPV which'll be calibrated to, I take a quoted clean market price and add the accrued amount from the bond object.
For example, MV = 135, Accrued Amt = 9.99, and NPV ~= 145.
However, when I take the output of the zSpread function and create a new object, the NPV turns out to be ~144.
I tried increasing accuracy and iterations but to no avail.
Are there any common gotchas while using the zSpread function?
As I write this I realise, a code example would be very helpful. I will do that now.
John
| Free forum by Nabble | Edit this page |