Quant-Framework
view release on metacpan or search on metacpan
t/VolSurface/Moneyness/convert_moneyness_to_delta.t view on Meta::CPAN
chronicle_reader => $chronicle_r,
chronicle_writer => $chronicle_w,
);
lives_ok { $v->_convert_moneyness_smile_to_delta(7) } "can convert moneyness smile to delta smile";
throws_ok { $v->_convert_moneyness_smile_to_delta('asd') } qr/must be a number/,
"from and to dates must be defined";
my $deltas = $v->_convert_moneyness_smile_to_delta(7);
my $BOM_25 = $v->get_volatility({
delta => 25,
from => $v->recorded_date,
to => $v->effective_date->plus_time_interval('7d'),
});
my $BOM_50 = $v->get_volatility({
delta => 50,
from => $v->recorded_date,
to => $v->effective_date->plus_time_interval('7d'),
});
my $BOM_75 = $v->get_volatility({
delta => 75,
from => $v->recorded_date,
to => $v->effective_date->plus_time_interval('7d'),
});
cmp_ok(abs($BOM_25 - $calculated_delta_from_csv->{25}), "<=", 0.0005, "correct 25D vol");
cmp_ok(abs($BOM_50 - $calculated_delta_from_csv->{50}), "<=", 0.0005, "correct 50D vol");
cmp_ok(abs($BOM_75 - $calculated_delta_from_csv->{75}), "<=", 0.0005, "correct 75D vol");
my @shuffled_deltas = shuffle(keys %{$deltas});
is(
$v->get_volatility({
delta => $shuffled_deltas[0],
from => $v->recorded_date,
to => $v->recorded_date->plus_time_interval('7d'),
}
),
$deltas->{$shuffled_deltas[0]},
"return corresponding volatility if sought delta is on smile"
( run in 0.392 second using v1.01-cache-2.11-cpan-e9daa2b36ef )