tests/testthat/test_payoffs.R

library(ragtop)
library(futile.logger)
context("Payoffs")

flog.threshold(WARN, name="ragtop")
flog.threshold(WARN)

pct3 = function(T,t=0) {
  exp(-0.03*(T-t))
}

amer_put = AmericanOption$new(maturity=5, strike=11, callput=-1)
test_that("American Put Payoff", {
  expect_equal(amer_put$optionality_fcn(c(1, 15, 16, 17, -0.1), c(2,3,13,14,19), 1)[1], 9)
  expect_equal(amer_put$optionality_fcn(c(1, 15, 16, 17, -0.1), c(2,3,13,14,19), 1)[2], 15)
  expect_equal(amer_put$optionality_fcn(c(1, 15, 16, 17, -0.1), c(2,3,13,14,19), 1)[4], 17)
  expect_equal(amer_put$optionality_fcn(c(1, 15, 16, 17, -0.1), c(2,3,13,14,19), 1)[5], 0)
})


coups = data.frame(payment_time=c(0.2, 0.7, 1.2, 1.7),
                   payment_size=c(30,30,30,30))
conv_bond = ConvertibleBond$new(coupons=coups,
                                conversion_ratio=0,
                                maturity=10,
                                notional=0,
                                name='CB')
test_that("Convertible Bond Coupon Discounting", {
  expect_equal(conv_bond$optionality_fcn(c(0,0), c(0,0.1), 0.9, discount_factor_fctn=pct3)[1],
               30 * (exp((0.9-0.7)*0.03) + exp((0.9-0.2)*0.03)), tolerance=1e-3)
})
brianboonstra/ragtop documentation built on March 7, 2020, 2:23 p.m.