Portfolio Risk Statistics
import dx
import datetime as dt
import time
import numpy as np
# constant short rate
r = dx.constant_short_rate('r', 0.01)
# market environment
me_gbm_1 = dx.market_environment('gbm_1', dt.datetime(2015, 1, 1))
# geometric Brownian motion
me_gbm_1.add_constant('initial_value', 40.)
me_gbm_1.add_constant('volatility', 0.2)
me_gbm_1.add_constant('currency', 'EUR')
me_gbm_1.add_constant('model', 'gbm')
me_gbm_2 = dx.market_environment('gbm_2', me_gbm_1.pricing_date)
# valuation environment
val_env = dx.market_environment('val_env', dt.datetime(2015, 1, 1))
val_env.add_constant('paths', 25000)
# 100,000 paths
val_env.add_constant('frequency', 'W')
# weekly frequency
val_env.add_curve('discount_curve', r)
val_env.add_constant('starting_date', dt.datetime(2015, 1, 1))
val_env.add_constant('final_date', dt.datetime(2015, 12, 31))
# add valuation environment to market environments
me_gbm_1.add_environment(val_env)
me_gbm_2.add_environment(me_gbm_1)
me_gbm_2.add_constant('initial_value', 40.)
me_gbm_2.add_constant('volatility', 0.3)
underlyings = {'gbm_1' : me_gbm_1, 'gbm_2' : me_gbm_2}
# market with two underlyings
# market environment for the options
me_option = dx.market_environment('put', dt.datetime(2015, 1, 1))
me_option.add_constant('maturity', dt.datetime(2015, 12, 31))
me_option.add_constant('currency', 'EUR')
me_option.add_environment(val_env)
positions = {}
half = 3 # 2 times that many options
for i in range(half):
positions[i] = dx.derivatives_position('am_put_pos_%s' %i, 1, ['gbm_1'], me_option,
'American single', 'np.maximum(instrument_values - 40., 0)')
multi_payoff = "np.maximum(np.maximum(maturity_value['gbm_1'], maturity_value['gbm_2']) - 40., 0)"
for i in range(half, 2 * half):
positions[i] = dx.derivatives_position('multi_pos_%s' %i, 1, ['gbm_1', 'gbm_2'],
me_option, 'European multi', multi_payoff)
portfolio = dx.derivatives_portfolio('portfolio', positions, val_env,
underlyings, correlations=None, parallel=False)
%time res = portfolio.get_values(fixed_seed=True)
res
portfolio.val_env.get_list('cholesky_matrix')
%time vegas = portfolio.get_port_risk(Greek='Vega', fixed_seed=True)
dx.risk_report(vegas)
%time deltas = portfolio.get_port_risk(Greek='Delta', fixed_seed=True)
dx.risk_report(deltas)
portfolio.val_env.get_list('cholesky_matrix')
correlations = [['gbm_1', 'gbm_2', -0.9]]
portfolio = dx.derivatives_portfolio('portfolio', positions, val_env,
underlyings, correlations, parallel=False)
portfolio.val_env.get_list('cholesky_matrix')
%time portfolio.get_values(fixed_seed=True)
%%time
deltas = portfolio.get_port_risk(Greek='Delta', fixed_seed=True,
step=0.05)
dx.risk_report(deltas)