Math-Business-Lookback
view release on metacpan or search on metacpan
t/benchmark.t view on Meta::CPAN
my $type = $line->{type};
my $spot = $line->{spot};
my $strike = $line->{strike};
my $duration = $line->{duration};
my $r_q = $line->{r_q};
my $mu = $line->{mu};
my $vol = $line->{vol};
my $s_max = $line->{s_max};
my $s_min = $line->{s_min};
my $bbg_price = $line->{bbg_price};
my $bbg_delta = $line->{bbg_delta};
test_price({
type => $type,
strike => $strike,
spot => $spot,
discount_rate => $r_q,
t => $duration / 365,
mu => $mu,
vol => $vol,
spot_max => $s_max,
spot_min => $s_min
},
$bbg_price
);
test_greek({
type => $type,
strike => $strike,
spot => $spot,
discount_rate => $r_q,
t => $duration / 365,
mu => $mu,
vol => $vol,
spot_max => $s_max,
spot_min => $s_min
},
$bbg_delta * 0.01
);
}
};
#$S, $K, $t, $r_q, $mu, $sigma, $S_min or $S_min or both.
sub test_price {
my $args = shift;
my $expected = shift;
my $type = $args->{type};
my $strike = $args->{strike};
my $spot = $args->{spot};
my $discount_rate = $args->{discount_rate};
my $t = $args->{t};
my $mu = $args->{mu};
my $sigma = $args->{vol};
my $s_max = $args->{spot_max};
my $s_min = $args->{spot_min};
my $price;
my $formula = 'Math::Business::Lookback::' . $type;
my $func = \&$formula;
$price = $func->($spot, $strike, $t, $discount_rate, $mu, $sigma, $s_max, $s_min);
my $diff = abs($price - $expected) / $expected;
cmp_ok($diff, '<', 0.08, 'Diff is within permissible range');
}
sub test_greek {
my $args = shift;
my $expected = shift;
my $type = $args->{type};
my $strike = $args->{strike};
my $spot = $args->{spot};
my $discount_rate = $args->{discount_rate};
my $t = $args->{t};
my $mu = $args->{mu};
my $sigma = $args->{vol};
my $s_max = $args->{spot_max};
my $s_min = $args->{spot_min};
my $price;
my $formula = 'Math::Business::Lookback::Greeks::Delta::' . $type;
my $func = \&$formula;
$price = $func->($spot, $strike, $t, $discount_rate, $mu, $sigma, $s_max, $s_min);
my $diff = abs($price - $expected) / $expected;
cmp_ok($diff, '<', 0.12, 'Diff is within permissible range');
}
done_testing;
( run in 0.556 second using v1.01-cache-2.11-cpan-39bf76dae61 )