Skip to content

Commit 1087ad0

Browse files
attack68mikelync
andauthored
ENH: add vol and a _Vol container (#173) (#1096)
Co-authored-by: Mike Lync <[email protected]> Co-authored-by: JHM Darbyshire (M1) <[email protected]>
1 parent 75b1da9 commit 1087ad0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+562
-484
lines changed

python/rateslib/instruments/components/bonds/bill.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from rateslib.instruments.components.protocols.pricing import (
1717
_Curves,
1818
_maybe_get_curve_or_dict_maybe_from_solver,
19+
_Vol,
1920
)
2021
from rateslib.legs.components import FixedLeg
2122
from rateslib.scheduling.frequency import _get_frequency
@@ -28,9 +29,9 @@
2829
DualTypes,
2930
DualTypes_,
3031
FXForwards_,
31-
FXVolOption_,
3232
Number,
3333
Solver_,
34+
VolT_,
3435
_BaseLeg,
3536
datetime,
3637
datetime_,
@@ -239,6 +240,7 @@ def __init__(
239240
initial_exchange=False,
240241
final_exchange=True,
241242
fixed_rate=0.0,
243+
vol=_Vol(),
242244
)
243245

244246
default_args = dict(
@@ -254,7 +256,7 @@ def __init__(
254256
spec=spec,
255257
user_args={**user_args, **instrument_args},
256258
default_args=default_args,
257-
meta_args=["curves", "calc_mode", "settle", "metric", "frequency"],
259+
meta_args=["curves", "calc_mode", "settle", "metric", "frequency", "vol"],
258260
)
259261
self.kwargs.meta["calc_mode"] = _get_bill_calc_mode(self.kwargs.meta["calc_mode"])
260262
self._kwargs.leg1["frequency"] = "Z"
@@ -266,6 +268,9 @@ def __init__(
266268
self._leg1 = FixedLeg(**_convert_to_schedule_kwargs(self.kwargs.leg1, 1))
267269
self._legs = [self.leg1]
268270

271+
def _parse_vol(self, vol: VolT_) -> _Vol:
272+
return _Vol()
273+
269274
def _parse_curves(self, curves: CurveOption_) -> _Curves:
270275
"""
271276
A Bill has one curve requirements: a disc_curve.
@@ -304,7 +309,7 @@ def rate(
304309
curves: Curves_ = NoInput(0),
305310
solver: Solver_ = NoInput(0),
306311
fx: FXForwards_ = NoInput(0),
307-
fx_vol: FXVolOption_ = NoInput(0),
312+
vol: VolT_ = NoInput(0),
308313
base: str_ = NoInput(0),
309314
settlement: datetime_ = NoInput(0),
310315
forward: datetime_ = NoInput(0),

python/rateslib/instruments/components/bonds/fixed_rate_bond.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from rateslib.instruments.components.protocols.pricing import (
1414
_Curves,
1515
_maybe_get_curve_or_dict_maybe_from_solver,
16+
_Vol,
1617
)
1718
from rateslib.legs.components import FixedLeg
1819

@@ -25,9 +26,9 @@
2526
DualTypes_,
2627
Frequency,
2728
FXForwards_,
28-
FXVolOption_,
2929
RollDay,
3030
Solver_,
31+
VolT_,
3132
_BaseLeg,
3233
bool_,
3334
datetime,
@@ -228,6 +229,7 @@ def __init__(
228229
instrument_args = dict( # these are hard coded arguments specific to this instrument
229230
initial_exchange=False,
230231
final_exchange=True,
232+
vol=_Vol(),
231233
)
232234

233235
default_args = dict(
@@ -242,7 +244,7 @@ def __init__(
242244
spec=spec,
243245
user_args={**user_args, **instrument_args},
244246
default_args=default_args,
245-
meta_args=["curves", "calc_mode", "settle", "metric"],
247+
meta_args=["curves", "calc_mode", "settle", "metric", "vol"],
246248
)
247249
self.kwargs.meta["calc_mode"] = _get_bond_calc_mode(self.kwargs.meta["calc_mode"])
248250

@@ -252,6 +254,9 @@ def __init__(
252254
self._leg1 = FixedLeg(**_convert_to_schedule_kwargs(self.kwargs.leg1, 1))
253255
self._legs = [self.leg1]
254256

257+
def _parse_vol(self, vol: VolT_) -> _Vol:
258+
return _Vol()
259+
255260
def _parse_curves(self, curves: CurveOption_) -> _Curves:
256261
"""
257262
An FRB has one curve requirements: a disc_curve.
@@ -290,7 +295,7 @@ def rate(
290295
curves: Curves_ = NoInput(0),
291296
solver: Solver_ = NoInput(0),
292297
fx: FXForwards_ = NoInput(0),
293-
fx_vol: FXVolOption_ = NoInput(0),
298+
vol: VolT_ = NoInput(0),
294299
base: str_ = NoInput(0),
295300
settlement: datetime_ = NoInput(0),
296301
forward: datetime_ = NoInput(0),

python/rateslib/instruments/components/bonds/float_rate_note.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from rateslib.instruments.components.protocols.pricing import (
1515
_Curves,
1616
_maybe_get_curve_or_dict_maybe_from_solver,
17+
_Vol,
1718
)
1819
from rateslib.legs.components import FloatLeg
1920
from rateslib.periods.components import FloatPeriod
@@ -26,10 +27,9 @@
2627
Curves_,
2728
DualTypes,
2829
DualTypes_,
29-
Frequency,
3030
FXForwards_,
31-
FXVolOption_,
3231
Solver_,
32+
VolT_,
3333
_BaseLeg,
3434
datetime,
3535
datetime_,
@@ -235,6 +235,7 @@ def __init__(
235235
instrument_args = dict( # these are hard coded arguments specific to this instrument
236236
initial_exchange=False,
237237
final_exchange=True,
238+
vol=_Vol(),
238239
)
239240

240241
default_args = dict(
@@ -249,7 +250,7 @@ def __init__(
249250
spec=spec,
250251
user_args={**user_args, **instrument_args},
251252
default_args=default_args,
252-
meta_args=["curves", "calc_mode", "settle", "metric"],
253+
meta_args=["curves", "calc_mode", "settle", "metric", "vol"],
253254
)
254255
self.kwargs.meta["calc_mode"] = _get_bond_calc_mode(self.kwargs.meta["calc_mode"])
255256

@@ -258,6 +259,9 @@ def __init__(
258259
raise ValueError("A `FloatRateNote` cannot have a 'zero' frequency.")
259260
self._legs = [self.leg1]
260261

262+
def _parse_vol(self, vol: VolT_) -> _Vol:
263+
return _Vol()
264+
261265
def _parse_curves(self, curves: CurveOption_) -> _Curves:
262266
"""
263267
An FRN has two curve requirements: a leg2_rate_curve and a disc_curve used by both legs.
@@ -300,7 +304,7 @@ def rate(
300304
curves: Curves_ = NoInput(0),
301305
solver: Solver_ = NoInput(0),
302306
fx: FXForwards_ = NoInput(0),
303-
fx_vol: FXVolOption_ = NoInput(0),
307+
vol: VolT_ = NoInput(0),
304308
base: str_ = NoInput(0),
305309
settlement: datetime_ = NoInput(0),
306310
forward: datetime_ = NoInput(0),

python/rateslib/instruments/components/bonds/index_fixed_rate_bond.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from rateslib.instruments.components.protocols.pricing import (
1414
_Curves,
1515
_maybe_get_curve_or_dict_maybe_from_solver,
16+
_Vol,
1617
)
1718
from rateslib.legs.components import FixedLeg
1819
from rateslib.periods.components.parameters import _IndexParams
@@ -26,11 +27,11 @@
2627
DualTypes_,
2728
Frequency,
2829
FXForwards_,
29-
FXVolOption_,
3030
IndexMethod,
3131
RollDay,
3232
Series,
3333
Solver_,
34+
VolT_,
3435
_BaseCurve_,
3536
_BaseLeg,
3637
bool_,
@@ -242,6 +243,7 @@ def __init__(
242243
instrument_args = dict( # these are hard coded arguments specific to this instrument
243244
initial_exchange=False,
244245
final_exchange=True,
246+
vol=_Vol(),
245247
)
246248

247249
default_args = dict(
@@ -260,7 +262,7 @@ def __init__(
260262
spec=spec,
261263
user_args={**user_args, **instrument_args},
262264
default_args=default_args,
263-
meta_args=["curves", "calc_mode", "settle", "metric"],
265+
meta_args=["curves", "calc_mode", "settle", "metric", "vol"],
264266
)
265267
self.kwargs.meta["calc_mode"] = _get_bond_calc_mode(self.kwargs.meta["calc_mode"])
266268

@@ -270,6 +272,9 @@ def __init__(
270272
self._leg1 = FixedLeg(**_convert_to_schedule_kwargs(self.kwargs.leg1, 1))
271273
self._legs = [self.leg1]
272274

275+
def _parse_vol(self, vol: VolT_) -> _Vol:
276+
return _Vol()
277+
273278
def _parse_curves(self, curves: CurveOption_) -> _Curves:
274279
"""
275280
An IFRB has two curve requirements: an index_curve and a disc_curve.
@@ -369,7 +374,7 @@ def rate(
369374
curves: Curves_ = NoInput(0),
370375
solver: Solver_ = NoInput(0),
371376
fx: FXForwards_ = NoInput(0),
372-
fx_vol: FXVolOption_ = NoInput(0),
377+
vol: VolT_ = NoInput(0),
373378
base: str_ = NoInput(0),
374379
settlement: datetime_ = NoInput(0),
375380
forward: datetime_ = NoInput(0),

python/rateslib/instruments/components/bonds/protocols/__init__.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
FXForwards_,
2323
FXVolOption_,
2424
Solver_,
25+
VolT_,
2526
_BaseCurve_,
2627
datetime,
2728
datetime_,
@@ -43,7 +44,7 @@ def npv(
4344
curves: Curves_ = NoInput(0),
4445
solver: Solver_ = NoInput(0),
4546
fx: FXForwards_ = NoInput(0),
46-
fx_vol: FXVolOption_ = NoInput(0),
47+
vol: VolT_ = NoInput(0),
4748
base: str_ = NoInput(0),
4849
local: bool = False,
4950
settlement: datetime_ = NoInput(0),
@@ -68,7 +69,7 @@ def npv(
6869
curves=curves,
6970
solver=solver,
7071
fx=fx,
71-
fx_vol=fx_vol,
72+
vol=vol,
7273
base=base,
7374
local=local,
7475
settlement=settlement_,
@@ -81,7 +82,7 @@ def cashflows(
8182
curves: Curves_ = NoInput(0),
8283
solver: Solver_ = NoInput(0),
8384
fx: FXForwards_ = NoInput(0),
84-
fx_vol: FXVolOption_ = NoInput(0),
85+
vol: VolT_ = NoInput(0),
8586
base: str_ = NoInput(0),
8687
settlement: datetime_ = NoInput(0),
8788
forward: datetime_ = NoInput(0),
@@ -90,7 +91,7 @@ def cashflows(
9091
curves=curves,
9192
solver=solver,
9293
fx=fx,
93-
fx_vol=fx_vol,
94+
vol=vol,
9495
base=base,
9596
settlement=settlement,
9697
forward=forward,
@@ -102,15 +103,15 @@ def local_analytic_rate_fixings(
102103
curves: Curves_ = NoInput(0),
103104
solver: Solver_ = NoInput(0),
104105
fx: FXForwards_ = NoInput(0),
105-
fx_vol: FXVolOption_ = NoInput(0),
106+
vol: VolT_ = NoInput(0),
106107
settlement: datetime_ = NoInput(0),
107108
forward: datetime_ = NoInput(0),
108109
) -> DataFrame:
109110
return self._local_analytic_rate_fixings_from_legs(
110111
curves=curves,
111112
solver=solver,
112113
fx=fx,
113-
fx_vol=fx_vol,
114+
vol=vol,
114115
settlement=settlement,
115116
forward=forward,
116117
)
@@ -121,7 +122,7 @@ def analytic_delta(
121122
curves: Curves_ = NoInput(0),
122123
solver: Solver_ = NoInput(0),
123124
fx: FXForwards_ = NoInput(0),
124-
fx_vol: FXVolOption_ = NoInput(0),
125+
vol: VolT_ = NoInput(0),
125126
base: str_ = NoInput(0),
126127
local: bool = False,
127128
settlement: datetime_ = NoInput(0),
@@ -142,7 +143,7 @@ def analytic_delta(
142143
curves=curves,
143144
solver=solver,
144145
fx=fx,
145-
fx_vol=fx_vol,
146+
vol=vol,
146147
base=base,
147148
local=local,
148149
settlement=settlement_,

0 commit comments

Comments
 (0)