FXExchange#
- class rateslib.instruments.FXExchange(settlement, pair, fx_rate=NoInput.blank, notional=NoInput.blank, curves=NoInput.blank)#
Bases:
Sensitivities
,Metrics
Create a simple exchange of two currencies.
- Parameters:
settlement (datetime) – The date of the currency exchange.
pair (str) – The curreny pair of the exchange, e.g. “eurusd”, using 3-digit iso codes.
fx_rate (float, optional) – The FX rate used to derive the notional exchange on Leg2.
notional (float) – The cashflow amount of the LHS currency.
curves (Curve, LineCurve, str or list of such, optional) – For FXExchange only discounting curves are required in each currency and not rate forecasting curves. The signature should be: [None, eur_curve, None, usd_curve] for a “eurusd” pair.
Attributes Summary
If set will also set the
fixed_rate
of the contained leg1.If set will also set the
float_spread
of contained leg1.If set will also set the
index_base
of the contained leg1.If set will also set the
fixed_rate
of the contained leg2.If set will also set the
float_spread
of contained leg2.If set will also set the
index_base
of the contained leg1.Methods Summary
analytic_delta
(*args, **kwargs)Return the analytic delta of a leg of the derivative object.
cashflows
([curves, solver, fx, base])Return the cashflows of the FXExchange by aggregating legs.
cashflows_table
([curves, solver, fx, base])Aggregate the values derived from a
cashflows()
method on an Instrument.delta
(*args, **kwargs)Calculate the delta of the Instrument.
exo_delta
(vars[, curves, solver, fx, base, ...])Calculate delta risk of an Instrument against some exogenous user created Variables.
gamma
(*args, **kwargs)Calculate the gamma of the Instrument.
npv
([curves, solver, fx, base, local])Return the NPV of the FXExchange by summing legs.
rate
([curves, solver, fx, base])Return the mid-market rate of the instrument.
Attributes Documentation
- fixed_rate#
If set will also set the
fixed_rate
of the contained leg1.Note
fixed_rate
,float_spread
,leg2_fixed_rate
andleg2_float_spread
are attributes only applicable to certainInstruments
. AttributeErrors are raised if calling or setting these is invalid.- Type:
float or None
- float_spread#
If set will also set the
float_spread
of contained leg1.- Type:
float or None
- fx_rate#
- index_base#
If set will also set the
index_base
of the contained leg1.Note
index_base
andleg2_index_base
are attributes only applicable to certainInstruments
. AttributeErrors are raised if calling or setting these is invalid.- Type:
float or None
- leg2_fixed_rate#
If set will also set the
fixed_rate
of the contained leg2.- Type:
float or None
- leg2_float_spread#
If set will also set the
float_spread
of contained leg2.- Type:
float or None
- leg2_index_base#
If set will also set the
index_base
of the contained leg1.Note
index_base
andleg2_index_base
are attributes only applicable to certainInstruments
. AttributeErrors are raised if calling or setting these is invalid.- Type:
float or None
Methods Documentation
- analytic_delta(*args, **kwargs)#
Return the analytic delta of a leg of the derivative object.
- Parameters:
args – Required positional arguments supplied to
BaseLeg.analytic_delta
.leg (int in [1, 2]) – The leg identifier of which to take the analytic delta.
kwargs – Required Keyword arguments supplied to
BaseLeg.analytic_delta()
.
- Return type:
Examples
In [1]: curve = Curve({dt(2021,1,1): 1.00, dt(2025,1,1): 0.83}, id="SONIA") In [2]: fxr = FXRates({"gbpusd": 1.25}, base="usd")
In [3]: irs = IRS( ...: effective=dt(2022, 1, 1), ...: termination="6M", ...: frequency="Q", ...: currency="gbp", ...: notional=1e9, ...: fixed_rate=5.0, ...: ) ...: In [4]: irs.analytic_delta(curve, curve) Out[4]: 47156.00216054951 In [5]: irs.analytic_delta(curve, curve, fxr) Out[5]: <Dual: 58945.002701, (fx_gbpusd), [47156.0]> In [6]: irs.analytic_delta(curve, curve, fxr, "gbp") Out[6]: 47156.00216054951
- cashflows(curves=NoInput.blank, solver=NoInput.blank, fx=NoInput.blank, base=NoInput.blank)#
Return the cashflows of the FXExchange by aggregating legs.
For arguments see
BaseMixin.npv
- cashflows_table(curves=NoInput.blank, solver=NoInput.blank, fx=NoInput.blank, base=NoInput.blank, **kwargs)#
Aggregate the values derived from a
cashflows()
method on an Instrument.- Parameters:
curves (CurveType, str or list of such, optional) – Argument input to the underlying
cashflows
method of the Instrument.solver (Solver, optional) – Argument input to the underlying
cashflows
method of the Instrument.fx (float, FXRates, FXForwards, optional) – Argument input to the underlying
cashflows
method of the Instrument.base (str, optional) – Argument input to the underlying
cashflows
method of the Instrument.kwargs (dict) – Additional arguments input the underlying
cashflows
method of the Instrument.
- Return type:
DataFrame
- delta(*args, **kwargs)#
Calculate the delta of the Instrument.
For arguments see
Sensitivities.delta()
.
- exo_delta(vars, curves=NoInput.blank, solver=NoInput.blank, fx=NoInput.blank, base=NoInput.blank, local=False, vars_scalar=NoInput.blank, vars_labels=NoInput.blank, **kwargs)#
Calculate delta risk of an Instrument against some exogenous user created Variables.
See What are exogenous variables? in the cookbook.
- Parameters:
vars (list[str]) – The variable tags which to determine sensitivities for.
curves (Curve, str or list of such, optional) –
A single
Curve
or id or a list of such. A list defines the following curves in the order:solver (Solver, optional) – The
Solver
that calibrates Curves from given Instruments.fx (float, FXRates, FXForwards, optional) – The immediate settlement FX rate that will be used to convert values into another currency. A given float is used directly. If giving a
FXRates
orFXForwards
object, converts from local currency intobase
.base (str, optional) – The base currency to convert cashflows into (3-digit code), set by default. Only used if
fx_rate
is anFXRates
orFXForwards
object.local (bool, optional) – If True will ignore
base
- this is equivalent to settingbase
to None. Included only for argument signature consistent with npv.vars_scalar (list[float], optional) – Scaling factors for each variable, for example converting rates to basis point etc. Defaults to ones.
vars_labels (list[str], optional) – Alternative names to relabel variables in DataFrames.
- Return type:
DataFrame
- gamma(*args, **kwargs)#
Calculate the gamma of the Instrument.
For arguments see
Sensitivities.gamma()
.
- npv(curves=NoInput.blank, solver=NoInput.blank, fx=NoInput.blank, base=NoInput.blank, local=False)#
Return the NPV of the FXExchange by summing legs.
For arguments see
BaseMixin.npv
- rate(curves=NoInput.blank, solver=NoInput.blank, fx=NoInput.blank, base=NoInput.blank)#
Return the mid-market rate of the instrument.
For arguments see
BaseMixin.rate