0
$\begingroup$

I am trying to calculate a single currency basis swap by using the Quantlib floatfloatswap function.

Please advice if I am doing wrongly.

float3m=floatingSchedule1
float6m=floatingSchedule2
index3m=index1
index6m=index2
spread=0
notional=100e6
basisSwap=ql.FloatFloatSwap(ql.VanillaSwap.Payer,
                [notional] * (len(float3m)-1),
                [notional] * (len(float6m)-1),
                float3m,
                index3m,
                ql.Actual360(),
                float6m,
                index6m,
                ql.Actual360(), False, False,
                [] * (len(float3m)-1),
                [] * (len(float3m)-1))
swapEngine = DiscountingSwapEngine(discount_curve)
basisSwap.setPricingEngine(swapEngine)

basisSwap.spread1()

Trying not to be too length, the input arguments are not copied here.

After setting up, I try to use floatfloatswap.spread1() to obtain the fair spread. It returns an error message:

'AttributeError: 'FloatFloatSwap' object has no attribute 'spread1''

$\endgroup$
1
$\begingroup$

The FloatFloatSwap class does not have a method to solve for the spread but you can use a solver to find it.

Do something like this...

def basisFairValue(spread):
    basisSwap = ql.FloatFloatSwap(ql.VanillaSwap.Payer,
                    [notional] * size3m,
                    [notional] * size6m,
                    float3m,
                    index3m,
                    ql.Actual360(),
                    float6m,
                    index6m,
                    ql.Actual360(), False, False,
                    [1] * size3m, [spread] * size3m)
    basisSwap.setPricingEngine(engine)
    return basisSwap.NPV()
    
accuracy = 0.0001
guess = -0.0002
step = 0.0001
fairSpread = ql.Brent().solve(basisFairValue, accuracy, guess, step)
print(fairSpread)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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