Skip to content

Commit 95f6d9b

Browse files
authored
ENH: add XCS component (#157) (#1081)
1 parent 5f9b2cb commit 95f6d9b

File tree

7 files changed

+1236
-177
lines changed

7 files changed

+1236
-177
lines changed

python/rateslib/instruments/components/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
from rateslib.instruments.components.spread import Spread
1111
from rateslib.instruments.components.stir_future import STIRFuture
1212
from rateslib.instruments.components.value import Value
13+
from rateslib.instruments.components.xcs import XCS
1314
from rateslib.instruments.components.zcis import ZCIS
1415
from rateslib.instruments.components.zcs import ZCS
1516

1617
__all__ = [
1718
"IRS",
19+
"XCS",
1820
"STIRFuture",
1921
"ZCS",
2022
"ZCIS",

python/rateslib/instruments/components/iirs.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -231,23 +231,23 @@ def rate(
231231
forward=forward,
232232
)
233233

234-
self.leg1.fixed_rate = 0.0
235-
leg1_npv: DualTypes = self.leg1.local_npv(
236-
rate_curve=NoInput(0),
237-
disc_curve=_get_maybe_curve_maybe_from_solver(
238-
self.kwargs.meta["curves"], _curves, "disc_curve", solver
239-
),
240-
index_curve=_get_maybe_curve_maybe_from_solver(
241-
self.kwargs.meta["curves"], _curves, "index_curve", solver
242-
),
243-
settlement=settlement,
244-
forward=forward,
245-
)
246-
self.leg1.fixed_rate = self.kwargs.leg1["fixed_rate"]
234+
# self.leg1.fixed_rate = 0.0
235+
# leg1_npv: DualTypes = self.leg1.local_npv(
236+
# rate_curve=NoInput(0),
237+
# disc_curve=_get_maybe_curve_maybe_from_solver(
238+
# self.kwargs.meta["curves"], _curves, "disc_curve", solver
239+
# ),
240+
# index_curve=_get_maybe_curve_maybe_from_solver(
241+
# self.kwargs.meta["curves"], _curves, "index_curve", solver
242+
# ),
243+
# settlement=settlement,
244+
# forward=forward,
245+
# )
246+
# self.leg1.fixed_rate = self.kwargs.leg1["fixed_rate"]
247247

248248
return (
249249
self.leg1.spread(
250-
target_npv=-leg2_npv - leg1_npv,
250+
target_npv=-leg2_npv, # - leg1_npv,
251251
rate_curve=NoInput(0),
252252
disc_curve=_get_maybe_curve_maybe_from_solver(
253253
self.kwargs.meta["curves"], _curves, "disc_curve", solver

python/rateslib/instruments/components/ndf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import TYPE_CHECKING
55

66
from rateslib import defaults
7+
from rateslib.dual.utils import _dual_float
78
from rateslib.enums.generics import NoInput, _drb
89
from rateslib.instruments.components.protocols import _BaseInstrument
910
from rateslib.instruments.components.protocols.kwargs import _KWArgs
@@ -382,7 +383,7 @@ def _set_pricing_mid(
382383
if isinstance(self.kwargs.leg1["fx_rate"], NoInput):
383384
# determine the mid-market FX rate and set the notional of leg2
384385
mid_market_rate = self.rate(fx=fx, solver=solver)
385-
self.leg2.periods[0].settlement_params._notional = (
386+
self.leg2.periods[0].settlement_params._notional = _dual_float(
386387
-mid_market_rate * self.leg1.periods[0].settlement_params.notional
387388
)
388389

0 commit comments

Comments
 (0)