Swaps are derivatives not securities, and they do not have intrinsic cost-of-carry, in a pricing sense. They do not involve an outlay of cash to purchase so do not require funding.
Another way to consider this is if you transact a single period IRS at mid-market, and the market evolves exactly as initially forecast with no variation, then no amount of money will ever exchange hands.
A cleared swap is collateralised, so even if the swap is not a single period and has interim cashflows, these would be immediately posted back to the asset holder, so the swap is self-funded. Again if the market evolved exactly as forecast by the end no party would have gained or lost any money.
Uncollateralised swaps have an embedded cost-of-carry as the difference between the funding rate and the collateral rate, but this is generally referred to as one of the components of XVA, namely FVA (funding valuation adjustment), it is not usually called cost-of-carry.
(They may also be exogenous costs-of-carry in a business sense like regulatory capital, initial margin, clearing fees, accountancy fees etc, but these are not directly related to pricing mechanics in a traditional sense, and may also be included withing another type of XVA)
Roll-down is a metric used to assert the value gain/loss on an instrument if the curve transitions under a specific market movement scenario. That scenario is that "after a period of the time the curve will appear exactly the same as it does today".
In this instance the underlying instrument remains the same and the mechanism is to revalue the instrument using a transformed curve. Consider a curve and an irs:
from rateslib import *
curve = Curve(
dt(2023, 8, 2): 1.0, # <- Assumes today is 2nd Aug '23 for NPV.
dt(2023, 9, 2): 0.998,
dt(2023, 12, 2): 0.99,
dt(2024, 3, 2): 0.98,
dt(2024, 6, 2): 0.97,
dt(2025, 6, 2): 0.93,
irs = IRS(
effective=dt(2023, 5, 15),
termination=dt(2024, 5, 15),
notional=-100e6, # <- Received Fixed in 100m USD
leg2_fixings=defaults.fixings.sofr, # <- Historic fixings until 1st Aug '23
fixed_rate=3.0262739134324823, # <- This is MID-MARKET: NPV is zero
assert abs(irs.npv()) < 1e-9
Now we apply the curve transformation and revalue the instrument. This gives a roll amount for 3 months.
rolled_curve = curve.roll("3m")
curve.plot("1b", comparators=[rolled_curve], labels=["original", "3m roll"])
Calculate the new metrics of the irs using the rolled curve:
This amount of NPV gained under the assumption of roll down, 427,859 USD, can be expressed in basis points, although there are subjective ways one might determine this calculation. The dollar amount is definitive for the roll-down calculation of this IRS. It is approximated by suggesting the fixed rate of the trade has shifted from 3.0262 to 2.6005 (-42.57bps) under an analytic fixed rate delta of -10,023 USD = 426,679 USD (+ change, which is discounting / gamma).