def testFinModelBlackScholes(): valueDate = FinDate(8, 5, 2015) expiryDate = FinDate(15, 1, 2016) strikePrice = 130.0 stockPrice = 127.62 volatility = 0.20 interestRate = 0.001 dividendYield = 0.0163 optionType = FinOptionTypes.AMERICAN_CALL euOptionType = FinOptionTypes.EUROPEAN_CALL amOption = FinEquityAmericanOption(expiryDate, strikePrice, optionType) ameuOption = FinEquityAmericanOption(expiryDate, strikePrice, euOptionType) euOption = FinEquityVanillaOption(expiryDate, strikePrice, euOptionType) discountCurve = FinDiscountCurveFlat(valueDate, interestRate, FinFrequencyTypes.CONTINUOUS, FinDayCountTypes.ACT_365F) numStepsPerYear = 400 modelTree = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.CRR_TREE, {'numStepsPerYear': numStepsPerYear}) v = amOption.value(valueDate, stockPrice, discountCurve, dividendYield, modelTree) # print(v) modelApprox = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.BARONE_ADESI, None) v = amOption.value(valueDate, stockPrice, discountCurve, dividendYield, modelApprox) # print(v) v = ameuOption.value(valueDate, stockPrice, discountCurve, dividendYield, modelTree) # print(v) v = euOption.value(valueDate, stockPrice, discountCurve, dividendYield, modelTree) # print(v) amTreeValue = [] amBAWValue = [] euTreeValue = [] euAnalValue = [] volatility = 0.20
def testFinEquityAmericanOption(): valueDate = FinDate(2016, 1, 1) expiryDate = FinDate(2017, 1, 1) stockPrice = 50.0 interestRate = 0.06 dividendYield = 0.04 volatility = 0.40 strikePrice = 50.0 discountCurve = FinDiscountCurveFlat(valueDate, interestRate) testCases.banner("================== EUROPEAN PUT =======================") putOption = FinEquityAmericanOption(expiryDate, strikePrice, FinOptionTypes.EUROPEAN_PUT) model = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.CRR_TREE, {'numStepsPerYear': 100}) value = putOption.value(valueDate, stockPrice, discountCurve, dividendYield, model) delta = putOption.delta(valueDate, stockPrice, discountCurve, dividendYield, model) gamma = putOption.gamma(valueDate, stockPrice, discountCurve, dividendYield, model) theta = putOption.theta(valueDate, stockPrice, discountCurve, dividendYield, model) testCases.header("OPTION_TYPE", "VALUE", "DELTA", "GAMMA", "THETA") testCases.print("EUROPEAN_PUT_BS", value, delta, gamma, theta) option = FinEquityAmericanOption(expiryDate, strikePrice, FinOptionTypes.EUROPEAN_PUT) testCases.header("OPTION_TYPE", "NUMSTEPS", "VALUE DELTA GAMMA THETA", "TIME") numStepsList = [100, 200, 500, 1000, 2000] for numSteps in numStepsList: model = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.CRR_TREE, {'numStepsPerYear': numSteps}) start = time.time() results = option.value(valueDate, stockPrice, discountCurve, dividendYield, model) end = time.time() duration = end - start testCases.print("EUROPEAN_PUT_TREE", numSteps, results, duration) testCases.banner("================== AMERICAN PUT =======================") option = FinEquityAmericanOption(expiryDate, strikePrice, FinOptionTypes.AMERICAN_PUT) testCases.header("OPTION_TYPE", "NUMSTEPS", "VALUE DELTA GAMMA THETA", "TIME") for numSteps in numStepsList: model = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.CRR_TREE, {'numStepsPerYear': numSteps}) start = time.time() results = option.value(valueDate, stockPrice, discountCurve, dividendYield, model) end = time.time() duration = end - start testCases.print("AMERICAN_PUT", numSteps, results, duration) testCases.banner( "================== EUROPEAN CALL =======================") callOption = FinEquityAmericanOption(expiryDate, strikePrice, FinOptionTypes.EUROPEAN_CALL) value = callOption.value(valueDate, stockPrice, discountCurve, dividendYield, model) delta = callOption.delta(valueDate, stockPrice, discountCurve, dividendYield, model) gamma = callOption.gamma(valueDate, stockPrice, discountCurve, dividendYield, model) theta = callOption.theta(valueDate, stockPrice, discountCurve, dividendYield, model) testCases.header("OPTION_TYPE", "VALUE", "DELTA", "GAMMA", "THETA") testCases.print("EUROPEAN_CALL_BS", value, delta, gamma, theta) option = FinEquityAmericanOption(expiryDate, strikePrice, FinOptionTypes.EUROPEAN_CALL) testCases.header("OPTION_TYPE", "NUMSTEPS", "VALUE DELTA GAMMA THETA", "TIME") for numSteps in numStepsList: model = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.CRR_TREE, {'numStepsPerYear': numSteps}) start = time.time() results = option.value(valueDate, stockPrice, discountCurve, dividendYield, model) end = time.time() duration = end - start testCases.print("EUROPEAN_CALL_TREE", numSteps, results, duration) testCases.banner( "================== AMERICAN CALL =======================") testCases.header("OPTION_TYPE", "NUMSTEPS", "VALUE DELTA GAMMA THETA", "TIME") option = FinEquityAmericanOption(expiryDate, strikePrice, FinOptionTypes.AMERICAN_CALL) for numSteps in numStepsList: model = FinModelBlackScholes(volatility, FinModelBlackScholesTypes.CRR_TREE, {'numStepsPerYear': numSteps}) start = time.time() results = option.value(valueDate, stockPrice, discountCurve, dividendYield, model) end = time.time() duration = end - start testCases.print("AMERICAN_CALL", numSteps, results, duration)