hasquant-0.5.0.2: test/example/QuantLib/Example/RiskyBond.hs
module QuantLib.Example.RiskyBond
(
Result(..)
, run
) where
import QuantLib.InterestRate
import QuantLib.Instrument
import QuantLib.Instrument.Bond hiding(bond)
import QuantLib.PricingEngine
import QuantLib.Quote
import QuantLib.Settings
import QuantLib.TermStructure.Credit hiding(hazardRate, defaultProbability)
import QuantLib.TermStructure.Yield
import QuantLib.Time.Calendar
import QuantLib.Time.Date hiding(today)
import QuantLib.Time.Schedule
data Result = Result
{ npvR :: Double
, cleanPriceR :: Double
}
-- ported from ~/Src/QuantLib/test-suite/bonds.cpp:testRiskyBondWithGivenDates
run :: IO Result
run = do
target <- calendar TARGET
usGovBond <- calendar UnitedStatesGovernmentBond
today <- adjust target (22 `november` 2005) Following
setEvaluationDate $ Just today
actual360dc <- dayCounter (Actual360 False)
actActBond <- dayCounter ActualActualBond
hazardRate <- simpleQuote 0.1
defaultProbability <- flatHazardRate' 0 target hazardRate actual360dc
riskFreeRate <- simpleQuote 0.02
riskFree <- flatForward today riskFreeRate actual360dc Continuous Annual
sch1 <- schedule (Just $ 30 `november` 2004) (30 `november` 2008) (6, Months)
usGovBond Unadjusted Unadjusted Backward False Nothing Nothing
let recoveryRate = 0.4
faceAmount = 1000000.0
couponRates = [0.02875, 0.03, 0.03125, 0.0325]
bond <- fixedRateBond 1 faceAmount sch1 couponRates actActBond ModifiedFollowing
100.0 (Just $ 20 `november` 2004) usGovBond (0, Days) usGovBond Unadjusted False actActBond
>>= asBond
eng <- riskyBondEngine defaultProbability recoveryRate riskFree
asInstrument bond >>= (`setPricingEngine` eng)
bNpv <- asInstrument bond >>= npv
bCleanPrice <- currentCleanPrice bond
return Result { npvR = bNpv, cleanPriceR = bCleanPrice }
-- vim: set ft=haskell ff=unix ts=8 sts=2 sw=2 et: