FinanceModels.Bond API Reference
FinanceModels.Bond.Fixed
FinanceModels.Bond.Floating
FinanceModels.Bond.CMTYield
FinanceModels.Bond.ForwardYields
FinanceModels.Bond.OISYield
FinanceModels.Bond.ParSwapYield
FinanceModels.Bond.ParYield
FinanceModels.Bond.ZCBPrice
FinanceModels.Bond.ZCBYield
FinanceModels.Bond.coupon_times
Exported API
FinanceModels.Bond
— ModuleThe Bond
module provide a number of fixed-income contracts and related methods.
FinanceModels.Bond.CMTYield
— MethodCMTYield(yield,maturity)
CMTYield(yield::Vector)
Returns a Quote
for the correpsonding bond implied by the given bond equivalent yield
, and assumes that instruments <= one year maturity
` pay no coupons and that the rest pay semi-annual.
Use broadcasting to create a set of quotes given a collection of FinanceModels and maturities, e.g. CMTYield.(FinanceModels,maturities)
.
See also FinanceCore.Quote
, Bond.Fixed
Examples
julia> CMTYield(0.05,10)
Quote{Float64, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}}(1.0, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}(0.05, Periodic(2), 10))
FinanceModels.Bond.ParSwapYield
— MethodParSwapYield(yield, maturity; frequency=Periodic(4))
Same as ParYield
, except the frequency
is four times per period by default.
FinanceModels.Bond.ParYield
— MethodParYield(yield, maturity; frequency=Periodic(2)) ParYield(yield::Vector)
Takes bond equivalent FinanceModels, and assumes that instruments <= one year maturity pay no coupons and that the rest pay semi-annual. Alternative, you may pass a Rate
as the yield and the coupon frequency will be inferred from the Rate
's frequency.
Use broadcasting to create a set of quotes given a collection of FinanceModels and maturities, e.g. ParYield.(FinanceModels,maturities)
.
Examples
julia> ParYield(0.05,10)
Quote{Float64, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}}(1.0, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}(0.05, Periodic(2), 10))
FinanceModels.Bond.ZCBPrice
— MethodZCBPrice(discount,maturity)
ZCBPrice(yield::Vector)
Takes spot/zero discount factors and returns a Quote
for the cashflow occuring at the given maturity
.
Use broadcasting to create a set of quotes given a collection of prices and maturities, e.g. ZCBPrice.(FinanceModels,maturities)
.
See also ZCBYield
Examples
julia> ZCBPrice(0.5,10)
Quote{Float64, Cashflow{Float64, Int64}}(0.5, Cashflow{Float64, Int64}(1.0, 10))
julia> ZCBPrice([0.9,0.8,0.75])
3-element Vector{Quote{Float64, Cashflow{Float64, Int64}}}:
Quote{Float64, Cashflow{Float64, Int64}}(0.9, Cashflow{Float64, Int64}(1.0, 1))
Quote{Float64, Cashflow{Float64, Int64}}(0.8, Cashflow{Float64, Int64}(1.0, 2))
Quote{Float64, Cashflow{Float64, Int64}}(0.75, Cashflow{Float64, Int64}(1.0, 3))
FinanceModels.Bond.ZCBYield
— MethodZCBYield(yield,maturity)
ZCBYield(yield::Vector)
Returns a Quote
for the cashflow occuring at the given maturity
and the quoted value is derived from the given yield
.
Takes zero (sometimes called "spot") rates. Assumes annual effective compounding (Periodic(1)
) unless given a
Rate` with a different compounding frequency.
Use broadcasting to create a set of quotes given a collection of FinanceModels and maturities, e.g. ZCBYield.(FinanceModels,maturities)
.
See also ZCBPrice
Examples
julia> ZCBYield(0.05,30)
Quote{Float64, Cashflow{Float64, Int64}}(0.23137744865585788, Cashflow{Float64, Int64}(1.0, 30))
julia> ZCBYield(Periodic(0.05,1),30)
Quote{Float64, Cashflow{Float64, Int64}}(0.23137744865585788, Cashflow{Float64, Int64}(1.0, 30))
julia> ZCBYield(Continuous(0.05),30)
Quote{Float64, Cashflow{Float64, Int64}}(0.22313016014842982, Cashflow{Float64, Int64}(1.0, 30))
julia> ZCBYield([0.04,0.05,0.045])
3-element Vector{Quote{Float64, Cashflow{Float64, Int64}}}:
Quote{Float64, Cashflow{Float64, Int64}}(0.9615384615384615, Cashflow{Float64, Int64}(1.0, 1))
Quote{Float64, Cashflow{Float64, Int64}}(0.9070294784580498, Cashflow{Float64, Int64}(1.0, 2))
Quote{Float64, Cashflow{Float64, Int64}}(0.8762966040549094, Cashflow{Float64, Int64}(1.0, 3))
Unexported API
FinanceModels.Bond.Fixed
— TypeBond.Fixed(coupon_rate,frequency<:FinanceCore.Frequency,maturity)
An object representing a fixed coupon bond. coupon_rate
/ frequency
is the actual payment amount.
Note that there are a number of convienience constructors which return a Quote for a Bond.Fixed
:
See also FinanceCore.Quote
.
Examples
julia> Bond.Fixed(0.05,Periodic(2),3)
FinanceModels.Bond.Fixed{Periodic, Float64, Int64}(0.05, Periodic(2), 3)
julia> Bond.Fixed(0.05,Periodic(2),3) |> collect
6-element Vector{Cashflow{Float64, Float64}}:
Cashflow{Float64, Float64}(0.025, 0.5)
Cashflow{Float64, Float64}(0.025, 1.0)
Cashflow{Float64, Float64}(0.025, 1.5)
Cashflow{Float64, Float64}(0.025, 2.0)
Cashflow{Float64, Float64}(0.025, 2.5)
Cashflow{Float64, Float64}(1.025, 3.0)
julia> ParYield(0.05,10)
Quote{Float64, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}}(1.0, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}(0.05, Periodic(2), 10))
FinanceModels.Bond.Floating
— TypeBond.Floating(coupon_rate,frequency<:FinanceCore.Frequency,maturity,model_key)
An object representing a floating coupon bond. (coupon_rate
+ reference rate) / frequency
is the actual payment amount, where the reference rate requires a Projection
with a key/value pair where the key is the model_key
argument and the value is the model which produces the reference rate.
See also FinanceCore.Quote
.
Examples
julia> p = Projection(
Bond.Floating(0.02, Periodic(1), 3.0, "SOFR"),
Dict("SOFR" => Yield.Constant(0.05)), # note the key/value store used for the model in the projection
CashflowProjection(),
);
julia> collect(p)
3-element Vector{Cashflow{Float64, Float64}}:
Cashflow{Float64, Float64}(0.07000000000000005, 1.0)
Cashflow{Float64, Float64}(0.07000000000000005, 2.0)
Cashflow{Float64, Float64}(1.07, 3.0)
FinanceModels.Bond.ForwardYields
— FunctionForwardYields(yields,times)
Returns a vector of Quote
corresponding to the yield at the given forward times.
Examples
julia> FinanceModels.Bond.ForwardYields([0.01,0.02],[1.,3.])
2-element Vector{Quote{Float64, Cashflow{Float64, Float64}}}:
Quote{Float64, Cashflow{Float64, Float64}}(0.9900990099009901, Cashflow{Float64, Float64}(1.0, 1.0))
Quote{Float64, Cashflow{Float64, Float64}}(0.9423223345470445, Cashflow{Float64, Float64}(1.0, 3.0))
FinanceModels.Bond.OISYield
— MethodOISYield(yield, maturity)
Returns the implied Quote
for the fixed bond implied by the given yield
and maturity
. Assumes that maturities less than or equal to 12 months are settled once (per Hull textbook, 4.7), otherwise quarterly and that the FinanceModels given are bond equivalent.
Use broadcasting to create a set of quotes given a collection of FinanceModels and maturities, e.g. OISYield.(FinanceModels,maturities)
.
See also FinanceCore.Quote
, Bond.Fixed
Examples
julia> OISYield(0.05,10)
Quote{Float64, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}}(1.0, FinanceModels.Bond.Fixed{Periodic, Float64, Int64}(0.05, Periodic(4), 10))
FinanceModels.Bond.coupon_times
— Methodcoupon_times(maturity, frequency)
Generate coupon times for a bond with the given maturity
and frequency
.
Arguments
maturity::Real
: The maturity of the bond.frequency::Real
: The coupon frequency of the bond.
Returns
- An array of coupon times for the bond.
Examples
julia-repl julia> Bond.coupon_times(10, 2) 0.5:0.5:10.0 julia> Bond.coupon_times(Bond.Fixed(0.05,Periodic(4),20)) 0.25:0.25:20.0
`
Please open an issue if you encounter any issues or confusion with the package.