Pricing Context
DiffFusion.Context — Type
struct 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}
endA 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 — Type
abstract type ContextEntry endA 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 — Type
struct NumeraireEntry <: ContextEntry
context_key::String
model_alias::Union{String, Nothing}
termstructure_dict::Dict{String,String}
endA 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 — Function
numeraire_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 — Type
struct RatesEntry <: ContextEntry
context_key::String
model_alias::Union{String, Nothing}
termstructure_dict::Dict{String,String}
endA 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 — Function
rates_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 — Type
struct 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}
endAn 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 — Function
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_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 — Type
struct 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
endA 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 — Function
forward_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 — Type
struct FutureIndexEntry <: ContextEntry
context_key::String
future_model_alias::Union{String, Nothing}
future_index_alias::String
endA 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 — Function
future_index_entry(
context_key::String,
future_model_alias::Union{String, Nothing} = nothing,
future_index_alias::String = nothing,
)Simplify FutureIndexEntry setup.
DiffFusion.FixingEntry — Type
struct FixingEntry <: ContextEntry
context_key::String
termstructure_alias::String
endA FixingEntry represents a link to a parameter term structure used to obtain fixings for indices etc.
DiffFusion.fixing_entry — Function
fixing_entry(
context_key::String,
termstructure_alias::Union{String, Nothing} = nothing,
)Simplify FixingEntry setup.
DiffFusion.key — Method
key(ce::ContextEntry)Return the context key of a context entry.
Context Creation
DiffFusion.context — Function
context(
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 — Function
simple_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 — Function
deterministic_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 — Function
context_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.