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 )