def test_PutCallPayOffs(self): vc_higher = VanillaCall(self.StrikeHigher) vc_lower= VanillaCall(self.StrikeLower) vp_higher = VanillaPut(self.StrikeHigher) vp_lower= VanillaPut(self.StrikeLower) vo_callhigher = VanillaOption(Expiry=1, PayOff=vc_higher) vo_calllower= VanillaOption(Expiry=1, PayOff=vc_lower) vo_puthigher = VanillaOption(Expiry=1, PayOff=vp_higher) vo_putlower= VanillaOption(Expiry=1, PayOff=vp_lower) self.assertAlmostEqual(vo_callhigher.pay_off(self.Spot),0.) self.assertAlmostEqual(vo_calllower.pay_off(self.Spot),10.) self.assertAlmostEqual(vo_puthigher.pay_off(self.Spot),10.) self.assertAlmostEqual(vo_putlower.pay_off(self.Spot),0.)
if __name__ == '__main__': from PayOffs import VanillaCall, VanillaPut from VanillaOptions import VanillaOption from Gatherer import MeanGatherer, ConvergenceTable from PathGenerators import GeneratorGBM, Antithetic, NormalGenerator from AnalyticFunctions import BSAnalyticFormulas #Option params Strike = 110. Expiry = 1. vc1 = VanillaCall(Strike) vp1 = VanillaPut(Strike) vo_call = VanillaOption(Expiry, PayOff=vc1) vo_put = VanillaOption(Expiry, PayOff=vp1) #Model/Market parameters Spot = 100. rate = 0.05 Vol = 0.2 dividend = 0.0 #not included in pricing yet #Model parameters times = [1.] num_paths = 50000 market_params = {'spot': Spot, 'rate': rate, 'vol': Vol}