def run_one_valuation_intrinsic(Te, fwd_array, cons): """ Calculate intrinsic storage with simple constraints Parameters ---------- Te : maturities fwd_array: cons : Constraints (max_inv, min_inv, start_inv, end_inv, inj_cost, rel_cost, rmin, rmax) Returns ------- """ max_inv = cons.max_inv min_inv = cons.min_inv start_inv = cons.start_inv end_inv = cons.end_inv inj_cost = cons.inj_cost rel_cost = cons.rel_cost rmin = cons.rmin rmax = cons.rmax fc = FlowConstraint(rmin, rmax) flow_constraints = FlowConstraints(Te[0], fc) inv_constraints = InventoryConstraints(Te, start_inv, end_inv, max_inv, min_inv, [flow_constraints]) state_object = StateObject(inv_constraints) product = LeastSquaresMonteCarloEngine( state_object, StorageCashflows(Te, injection_cost=inj_cost, withdrawal_cost=rel_cost)) res = product.calc_intrinsic(fwd_array) TP = product.calc_trigger_price(res) return res, TP
def run_one_valuation_intrinsic(Te, fwd_array, cons): """ Calculate intrinsic storage with simple constraints Parameters ---------- Te : maturities fwd_array: cons : Constraints (max_inv, min_inv, start_inv, end_inv, inj_cost, rel_cost, rmin, rmax) Returns ------- """ max_inv = cons.max_inv min_inv = cons.min_inv start_inv = cons.start_inv end_inv = cons.end_inv inj_cost = cons.inj_cost rel_cost = cons.rel_cost rmin = cons.rmin rmax = cons.rmax fc = FlowConstraint(rmin, rmax) flow_constraints = FlowConstraints(Te[0], fc) inv_constraints = InventoryConstraints(Te, start_inv, end_inv, max_inv, min_inv, [flow_constraints]) state_object = StateObject(inv_constraints) product = LeastSquaresMonteCarloEngine( state_object, StorageCashflows(Te, injection_cost=inj_cost, withdrawal_cost=rel_cost) ) res = product.calc_intrinsic(fwd_array) TP = product.calc_trigger_price(res) return res, TP
def run_valuation_stochastic(val_date, dates, fwd_curve, cons, model_params, nsims=5000): """ Calculate stochastic storage with simple constraints Parameters ---------- Te : maturities fwd_array: cons : tuple (max_inv, min_inv, start_inv, end_inv, inj_cost, rel_cost, rmin, rmax) Returns ------- """ max_inv = cons.max_inv min_inv = cons.min_inv start_inv = cons.start_inv end_inv = cons.end_inv inj_cost = cons.inj_cost rel_cost = cons.rel_cost rmin = cons.rmin rmax = cons.rmax sigma_1 = model_params.sigma_1 sigma_2 = model_params.sigma_2 alpha_1 = model_params.alpha_1 alpha_2 = model_params.alpha_2 rho = model_params.rho alphas = [alpha_1, alpha_2] sigmas = [sigma_1, sigma_2] Te = calcTe(val_date, dates) fc = FlowConstraint(rmin, rmax) flow_constraints = FlowConstraints(Te[0], fc) inv_constraints = InventoryConstraints(Te, start_inv, end_inv, max_inv, min_inv, [flow_constraints]) state_object = StateObject(inv_constraints, num_levels=None) ls_solver_params = AttrDict(max_basis_order=4, solver="RegularisedLeastSquaresSolver") product = LeastSquaresMonteCarloEngine( state_object, StorageCashflows(Te, injection_cost=inj_cost, withdrawal_cost=rel_cost), ls_solver_params ) seed = 123 simulator = MultiFactorSimulator(alphas, sigmas, fwd_curve, rho, val_date, seed=seed) sims_bwd = simulator.simulate_spot(dates, nsims).values factors_bwd = simulator.stoch_factors sims_fwd = simulator.simulate_spot(dates, nsims).values factors_fwd = simulator.stoch_factors results = product.calc_extrinsic(sims_bwd, sims_fwd, factors_bwd, factors_fwd) cashflows = (results["cashflows"].spot + results["cashflows"].opex).sum(axis=0) value = cashflows.mean() value_std = cashflows.std() value_error = value_std / np.sqrt(nsims) return value, value_error
def run_valuation_stochastic(val_date, dates, fwd_curve, cons, model_params, nsims=5000): """ Calculate stochastic storage with simple constraints Parameters ---------- Te : maturities fwd_array: cons : tuple (max_inv, min_inv, start_inv, end_inv, inj_cost, rel_cost, rmin, rmax) Returns ------- """ max_inv = cons.max_inv min_inv = cons.min_inv start_inv = cons.start_inv end_inv = cons.end_inv inj_cost = cons.inj_cost rel_cost = cons.rel_cost rmin = cons.rmin rmax = cons.rmax sigma_1 = model_params.sigma_1 sigma_2 = model_params.sigma_2 alpha_1 = model_params.alpha_1 alpha_2 = model_params.alpha_2 rho = model_params.rho alphas = [alpha_1, alpha_2] sigmas = [sigma_1, sigma_2] Te = calcTe(val_date, dates) fc = FlowConstraint(rmin, rmax) flow_constraints = FlowConstraints(Te[0], fc) inv_constraints = InventoryConstraints(Te, start_inv, end_inv, max_inv, min_inv, [flow_constraints]) state_object = StateObject(inv_constraints, num_levels=None) ls_solver_params = AttrDict(max_basis_order=4, solver='RegularisedLeastSquaresSolver') product = LeastSquaresMonteCarloEngine( state_object, StorageCashflows(Te, injection_cost=inj_cost, withdrawal_cost=rel_cost), ls_solver_params) seed = 123 simulator = MultiFactorSimulator(alphas, sigmas, fwd_curve, rho, val_date, seed=seed) sims_bwd = simulator.simulate_spot(dates, nsims).values factors_bwd = simulator.stoch_factors sims_fwd = simulator.simulate_spot(dates, nsims).values factors_fwd = simulator.stoch_factors results = product.calc_extrinsic(sims_bwd, sims_fwd, factors_bwd, factors_fwd) cashflows = (results['cashflows'].spot + results['cashflows'].opex).sum(axis=0) value = cashflows.mean() value_std = cashflows.std() value_error = value_std / np.sqrt(nsims) return value, value_error