Pricing Context
DiffFusion.Context
— Typestruct Context
alias::String
numeraire::NumeraireEntry
rates::Dict{String, RatesEntry}
assets::Dict{String, AssetEntry}
forward_indices::Dict{String, ForwardIndexEntry}
future_indices::Dict{String, FutureIndexEntry}
fixings::Dict{String, FixingEntry}
end
A Context represents a mapping from market references (keys) to model and term structure references (aliases).
Links are represented as key/alias pairs. market references are used in the specification of payoffs and products. Model and term structure references are used to set up models and model parameters.
In simple settings there can be a one-to-one mapping between market references and model/term structure references. However, more realistic settings benefit from an additional mapping. For example, discount factors for two (or more) market reference (say EUR ESTR and EUR Euribor) can be calculated from a single model (with model reference EUR) and two (or more) yield curves (with term structure reference ESTR and Euribor).
A Context
adds a layer of abstraction to disentangle models and products and
links models and term structures according to business logic.
Context Entries
DiffFusion.ContextEntry
— Typeabstract type ContextEntry end
A ContextEntry
represents a mapping from a context key to model aliases and term structure aliases.
We use the convention that keys are UPPERCASE strings. This aims at helping to distinguish between keys and alias.
DiffFusion.NumeraireEntry
— Typestruct NumeraireEntry <: ContextEntry
context_key::String
model_alias::Union{String, Nothing}
termstructure_dict::Dict{String,String}
end
A NumeraireEntry
represents a link to an interest rate model and yield curves used for numeraire calculation.
We opt to allow for different yield curves in numeraire application. This should allow e.g. AMC methods wih trade-specific discounting.
An empty model alias (nothing
) represents a deterministic model.
The termstructure_dict
maps term structure keys to term structure aliases.
We use the convention that keys are UPPERCASE strings. This aims at helping to distinguish between keys and alias.
DiffFusion.numeraire_entry
— Functionnumeraire_entry(
context_key::String,
model_alias::Union{String, Nothing} = nothing,
termstructure_dict::Union{AbstractDict, Nothing} = nothing,
)
Simplify NumeraireEntry
setup.
numeraire_entry(
context_key::String,
model_alias::Union{String, Nothing},
termstructure_alias::String,
)
Simplify NumeraireEntry
setup.
DiffFusion.RatesEntry
— Typestruct RatesEntry <: ContextEntry
context_key::String
model_alias::Union{String, Nothing}
termstructure_dict::Dict{String,String}
end
A RatesEntry
represents a link to an interest rate model and yield curves used for zero coupon bond calculation.
An empty model alias (nothing
) represents a deterministic model.
The termstructure_dict
maps term structure keys to term structure aliases.
We use the convention that keys are UPPERCASE strings. This aims at helping to distinguish between keys and alias.
DiffFusion.rates_entry
— Functionrates_entry(
context_key::String,
model_alias::Union{String, Nothing} = nothing,
termstructure_dict::Union{AbstractDict, Nothing} = nothing,
)
Simplify RatesEntry
setup.
ratesentry( contextkey::String, modelalias::Union{String, Nothing}, termstructurealias::String, )
Simplify RatesEntry
setup.
DiffFusion.AssetEntry
— Typestruct AssetEntry <: ContextEntry
context_key::String
asset_model_alias::Union{String, Nothing}
domestic_model_alias::Union{String, Nothing}
foreign_model_alias::Union{String, Nothing}
asset_spot_alias::String
domestic_termstructure_dict::Dict{String,String}
foreign_termstructure_dict::Dict{String,String}
end
An AssetEntry
represents a link to an asset model, two interest rate models and yield curves. This entry is used to calculate future simulated asset values.
We use the foreign currency analogy to represent tradeable assets.
An empty model alias (nothing
) represents a deterministic model.
domestic_termstructure_dict
and foreign_termstructure_dict
map term structure keys to term structure aliases.
We use the convention that keys are UPPERCASE strings. This aims at helping to distinguish between keys and alias.
DiffFusion.asset_entry
— Functionasset_entry(
context_key::String,
asset_model_alias::Union{String, Nothing} = nothing,
domestic_model_alias::Union{String, Nothing} = nothing,
foreign_model_alias::Union{String, Nothing} = nothing,
asset_spot_alias::Union{String, Nothing} = nothing,
domestic_termstructure_dict::Union{AbstractDict, Nothing} = nothing,
foreign_termstructure_dict::Union{AbstractDict, Nothing} = nothing,
)
Simplify AssetEntry
setup.
asset_entry(
context_key::String,
asset_model_alias::Union{String, Nothing} = nothing,
domestic_model_alias::Union{String, Nothing} = nothing,
foreign_model_alias::Union{String, Nothing} = nothing,
asset_spot_alias::Union{String, Nothing} = nothing,
domestic_termstructure_alias::String,
foreign_termstructure_alias::String,
)
Simplify AssetEntry
setup.
DiffFusion.ForwardIndexEntry
— Typestruct ForwardIndexEntry <: ContextEntry
context_key::String
asset_model_alias::Union{String, Nothing}
domestic_model_alias::Union{String, Nothing}
foreign_model_alias::Union{String, Nothing}
forward_index_alias::String
end
A ForwardIndexEntry
represents a link to an asset model, two interest rate models and a forward index curves. This entry is used to calculate future simulated forward asset prices.
We use the foreign currency analogy to represent tradeable assets.
An empty model alias (nothing
) represents a deterministic model.
forward_index_alias
represents the link to the forward index curve.
We use the convention that keys are UPPERCASE strings. This aims at helping to distinguish between keys and alias.
DiffFusion.forward_index_entry
— Functionforward_index_entry(
context_key::String,
asset_model_alias::Union{String, Nothing} = nothing,
domestic_model_alias::Union{String, Nothing} = nothing,
foreign_model_alias::Union{String, Nothing} = nothing,
forward_index_alias::Union{String, Nothing} = nothing,
)
Simplify ForwardIndexEntry
setup.
DiffFusion.FutureIndexEntry
— Typestruct FutureIndexEntry <: ContextEntry
context_key::String
future_model_alias::Union{String, Nothing}
future_index_alias::String
end
A FutureIndexEntry
represents a link to a Futures model and a future index curve. This entry is used to calculate future simulated Future prices.
Key proposition is that the Future price is a martingale in the corresponding domestic risk-neutral measure.
An empty model alias (nothing
) represents a deterministic model.
future_index_alias
represents the link to the Future index curve.
We use the convention that keys are UPPERCASE strings. This aims at helping to distinguish between keys and alias.
DiffFusion.future_index_entry
— Functionfuture_index_entry(
context_key::String,
future_model_alias::Union{String, Nothing} = nothing,
future_index_alias::String = nothing,
)
Simplify FutureIndexEntry
setup.
DiffFusion.FixingEntry
— Typestruct FixingEntry <: ContextEntry
context_key::String
termstructure_alias::String
end
A FixingEntry
represents a link to a parameter term structure used to obtain fixings for indices etc.
DiffFusion.fixing_entry
— Functionfixing_entry(
context_key::String,
termstructure_alias::Union{String, Nothing} = nothing,
)
Simplify FixingEntry
setup.
DiffFusion.key
— Methodkey(ce::ContextEntry)
Return the context key of a context entry.
Context Creation
DiffFusion.context
— Functioncontext(
alias::String,
num_entry::NumeraireEntry,
rates_entries::Union{AbstractVector, Nothing} = nothing,
asset_entries::Union{AbstractVector, Nothing} = nothing,
forward_index_entries::Union{AbstractVector, Nothing} = nothing,
future_index_entries::Union{AbstractVector, Nothing} = nothing,
fixing_entries::Union{AbstractVector, Nothing} = nothing,
)
Simplify Context
setup.
DiffFusion.simple_context
— Functionsimple_context(alias::String, alias_list::AbstractVector)
Generate a simple Context based on a list of currency aliases.
User must ensure that aliases can be referenced as normalised keys.
DiffFusion.deterministic_model_context
— Functiondeterministic_model_context(alias::String, alias_list::AbstractVector)
Generate a simple Context for fully deterministic modelling based on a list of currency aliases.
User must ensure that aliases can be referenced as normalised keys.
DiffFusion.context_keys
— Functioncontext_keys(key::String)
Parse the context entry key and term structure keys from an input key string.
We implement a simple syntax for input key strings:
context_key:[ts_key_1][-,+][ts_key_2]
Result is a tuple of the form
(context_key, ts_key_1, ts_key_2, [-,+])
Elements that are not found are returned as emptycontextkey value.
We apply normalisation of keys to mitigate risk of key errors by the user.