예제 #1
0
    def testBachelierImpliedVol(self):
        forward = 1.0
        bpvol = 0.01
        tte = 10.0
        r = 0.03

        dList = [-3.0, -2.0, -1.0, -0.5, 0.0, 0.5, 1.0, 2.0, 3.0]

        for d in dList:
            strike = forward + d * bpvol * math.sqrt(tte)
            callPrem = bachelierFormula(OptionType.Call, strike, forward,
                                        bpvol * math.sqrt(tte),
                                        math.exp(-r * tte))
            impliedBpVol = bachelierFormulaImpliedVol(OptionType.Call, strike,
                                                      forward, tte, callPrem,
                                                      math.exp(-r * tte))
            self.assertAlmostEqual(impliedBpVol, bpvol, 12)

            callPrem = bachelierFormula(OptionType.Put, strike, forward,
                                        bpvol * math.sqrt(tte),
                                        math.exp(-r * tte))
            impliedBpVol = bachelierFormulaImpliedVol(OptionType.Put, strike,
                                                      forward, tte, callPrem,
                                                      math.exp(-r * tte))
            self.assertAlmostEqual(impliedBpVol, bpvol, 12)
예제 #2
0
    def testBachelierBasics(self):
        strike = 1.0
        forward = 1.2
        discount = 0.95

        expected = discount * (forward - strike)
        calculated = bachelierFormula(OptionType.Call, strike, forward, 0.0, discount)
        self.assertAlmostEqual(expected, calculated, 15)
예제 #3
0
    def testBachelierBasics(self):
        strike = 1.0
        forward = 1.2
        discount = 0.95

        expected = discount * (forward - strike)
        calculated = bachelierFormula(OptionType.Call, strike, forward, 0.0,
                                      discount)
        self.assertAlmostEqual(expected, calculated, 15)
예제 #4
0
    def testBachelierImpliedVol(self):
        forward = 1.0
        bpvol = 0.01
        tte = 10.0
        r = 0.03

        dList = [-3.0, -2.0, -1.0, -0.5, 0.0, 0.5, 1.0, 2.0, 3.0]

        for d in dList:
            strike = forward + d * bpvol * math.sqrt(tte)
            callPrem = bachelierFormula(OptionType.Call, strike, forward, bpvol * math.sqrt(tte), math.exp(-r * tte))
            impliedBpVol = bachelierFormulaImpliedVol(OptionType.Call, strike, forward, tte, callPrem,
                                                      math.exp(-r * tte))
            self.assertAlmostEqual(impliedBpVol, bpvol, 12)

            callPrem = bachelierFormula(OptionType.Put, strike, forward, bpvol * math.sqrt(tte), math.exp(-r * tte))
            impliedBpVol = bachelierFormulaImpliedVol(OptionType.Put, strike, forward, tte, callPrem,
                                                      math.exp(-r * tte))
            self.assertAlmostEqual(impliedBpVol, bpvol, 12)