European option calculator#

[1]:
# Copyright (c) Quant Analytics. All rights reserved.
from quant_analytics_torch.marketdata import marketdatarepository
from quant_analytics_torch.instruments import instruments
from quant_analytics_torch.instruments import currencies
from quant_analytics_torch.interpolators import interpolate
from quant_analytics_torch.models import models, modelutil
from quant_analytics_torch.analytics import constants
from quant_analytics_torch.calculators import forwardcalculator, europeanoptioncalculator

import datetime
[2]:
marketdatarepository.fillSampleDate(marketdatarepository.marketDataRepositorySingleton)
inst = instruments.Asset("SPX", currencies.USD)
euo = instruments.EuropeanOption("SPX-1", inst, maturity=datetime.datetime(2023,6,12), strike=100., ccy=currencies.USD )

model = modelutil.fillSampleModel(inst)
[5]:
cal = europeanoptioncalculator.EuropeanOptionCalculator(euo, model)

v = cal.calculate()

v.backward()

[6]:
for name, param in model.named_parameters():
    print(name)
    print(param.getName())
    print(param.getValue())
    print(param.getValue().grad)
    param.grad = None
discountfactors.USD.param.0
{'type': 'CashDeposit', 'id': {'CashDeposit': {'USD': datetime.datetime(2021, 12, 12, 0, 0)}}}
tensor(0.9900, dtype=torch.float64, requires_grad=True)
tensor(0., dtype=torch.float64, grad_fn=<CopyBackwards>)
discountfactors.USD.param.1
{'type': 'CashDeposit', 'id': {'CashDeposit': {'USD': datetime.datetime(2022, 12, 12, 0, 0)}}}
tensor(0.9800, dtype=torch.float64, requires_grad=True)
tensor(5.5826, dtype=torch.float64, grad_fn=<CopyBackwards>)
discountfactors.USD.param.2
{'type': 'CashDeposit', 'id': {'CashDeposit': {'USD': datetime.datetime(2023, 12, 12, 0, 0)}}}
tensor(0.9700, dtype=torch.float64, requires_grad=True)
tensor(5.5521, dtype=torch.float64, grad_fn=<CopyBackwards>)
forwards.SPX.param.0
{'type': 'Forward', 'id': {'Forward': {'SPX': {datetime.datetime(2021, 12, 12, 0, 0): nan}}}}
tensor(101., dtype=torch.float64, requires_grad=True)
tensor(4.8362e-11, dtype=torch.float64, grad_fn=<CopyBackwards>)
forwards.SPX.param.1
{'type': 'Forward', 'id': {'Forward': {'SPX': {datetime.datetime(2022, 12, 12, 0, 0): nan}}}}
tensor(102., dtype=torch.float64, requires_grad=True)
tensor(0.6127, dtype=torch.float64, grad_fn=<CopyBackwards>)
forwards.SPX.param.2
{'type': 'Forward', 'id': {'Forward': {'SPX': {datetime.datetime(2023, 12, 12, 0, 0): nan}}}}
tensor(103., dtype=torch.float64, requires_grad=True)
tensor(0.6093, dtype=torch.float64, grad_fn=<CopyBackwards>)
volatilities.SPX.param.0
{'type': 'SSVIVolatility', 'id': {'SSVIVolatility': {'SPX': {datetime.datetime(2022, 12, 12, 0, 0): <SSVIParam.Theta: 1>}}}}
tensor(0.2000, dtype=torch.float64, requires_grad=True)
tensor(19.9010, dtype=torch.float64, grad_fn=<CopyBackwards>)
volatilities.SPX.param.1
{'type': 'SSVIVolatility', 'id': {'SSVIVolatility': {'SPX': {datetime.datetime(2022, 12, 12, 0, 0): <SSVIParam.Beta: 2>}}}}
tensor(3., dtype=torch.float64, requires_grad=True)
tensor(0.0106, dtype=torch.float64, grad_fn=<CopyBackwards>)
volatilities.SPX.param.2
{'type': 'SSVIVolatility', 'id': {'SSVIVolatility': {'SPX': {datetime.datetime(2022, 12, 12, 0, 0): <SSVIParam.Rho: 3>}}}}
tensor(-0.5000, dtype=torch.float64, requires_grad=True)
tensor(-0.8409, dtype=torch.float64, grad_fn=<CopyBackwards>)
volatilities.SPX.param.3
{'type': 'SSVIVolatility', 'id': {'SSVIVolatility': {'SPX': {datetime.datetime(2023, 12, 12, 0, 0): <SSVIParam.Theta: 1>}}}}
tensor(0.2000, dtype=torch.float64, requires_grad=True)
tensor(19.7922, dtype=torch.float64, grad_fn=<CopyBackwards>)
volatilities.SPX.param.4
{'type': 'SSVIVolatility', 'id': {'SSVIVolatility': {'SPX': {datetime.datetime(2023, 12, 12, 0, 0): <SSVIParam.Beta: 2>}}}}
tensor(3., dtype=torch.float64, requires_grad=True)
tensor(0.0106, dtype=torch.float64, grad_fn=<CopyBackwards>)
volatilities.SPX.param.5
{'type': 'SSVIVolatility', 'id': {'SSVIVolatility': {'SPX': {datetime.datetime(2023, 12, 12, 0, 0): <SSVIParam.Rho: 3>}}}}
tensor(-0.5000, dtype=torch.float64, requires_grad=True)
tensor(-0.8363, dtype=torch.float64, grad_fn=<CopyBackwards>)
[ ]: