Example #1
0
    def derivative(self, y, order):
        def __price_with_single_rate(__y):
            return self.price(Curve.SingleRateCurve(__y))
        return scipy.misc.derivative(
            __price_with_single_rate, x0=y,
            dx=1e-5, n=order)

    def dv01(self, y):
        return -self.derivative(y, 1) * BP

    def duration(self, y):
        return -self.derivative(y, 1) / self.price(
            Curve.SingleRateCurve(y))

    def convexity(self, y):
        return self.derivative(y, 2) / self.price(
            Curve.SingleRateCurve(y))



if __name__ == '__main__':
    ln = Curve.LinearInterpolation([(0.5, 1/1.01), (15, 1/(1.025**30))])
    a1 = CashFlow.Annuity(1, 0, 10)
    a2 = CashFlow.Annuity(10, 0, 5)
    zcb = CashFlow({10: 100})
    cb = CashFlow.CouponBond(100, 10000, 0, 10)
    print(1/ln(10))
    print(ln.calibrate(a1, a1.price(ln)))
    print(ln.calibrate(a2, a2.price(ln)))
    print(Curve.calibrate(zcb, zcb.price(ln)))
    print(Curve.calibrate(cb, cb.price(ln)))