quantark 0.1.2__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantark-0.1.2 → quantark-0.2.0}/PKG-INFO +1 -1
- {quantark-0.1.2 → quantark-0.2.0}/pyproject.toml +1 -1
- {quantark-0.1.2 → quantark-0.2.0}/quantark/__init__.py +1 -1
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/__init__.py +14 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/__init__.py +4 -0
- quantark-0.2.0/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +363 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +139 -73
- quantark-0.2.0/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +79 -0
- quantark-0.2.0/quantark/asset/equity/engine/cashflow/__init__.py +23 -0
- quantark-0.2.0/quantark/asset/equity/engine/cashflow/accrual_calculator.py +151 -0
- quantark-0.2.0/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +566 -0
- quantark-0.2.0/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +37 -0
- quantark-0.2.0/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +357 -0
- quantark-0.2.0/quantark/asset/equity/engine/cashflow/trs_valuation.py +177 -0
- quantark-0.2.0/quantark/asset/equity/engine/localvol_greeks.py +68 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/__init__.py +8 -0
- quantark-0.2.0/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +389 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +55 -33
- quantark-0.2.0/quantark/asset/equity/engine/mc/heston_mc_engine.py +75 -0
- quantark-0.2.0/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +97 -0
- quantark-0.2.0/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +88 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/__init__.py +6 -0
- quantark-0.2.0/quantark/asset/equity/engine/pde/heston_pde_solver.py +110 -0
- quantark-0.2.0/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +105 -0
- quantark-0.2.0/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +99 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +22 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +31 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +66 -0
- quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +10 -0
- quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +4 -0
- quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_sobol.py +8 -0
- quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +11 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/__init__.py +3 -0
- quantark-0.2.0/quantark/asset/equity/product/option/accumulator_option.py +442 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/asian_option.py +138 -18
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/snowball_helpers.py +17 -1
- quantark-0.2.0/quantark/asset/equity/product/swap/__init__.py +67 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/base_swap.py +34 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/multi_asset_trs.py +262 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/one_asset_trs.py +66 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +101 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/trs_event_handler.py +97 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/trs_params.py +199 -0
- quantark-0.2.0/quantark/asset/equity/product/swap/trs_schedule.py +129 -0
- quantark-0.2.0/quantark/asset/equity/riskmeasures/__init__.py +7 -0
- quantark-0.2.0/quantark/asset/equity/riskmeasures/vol_model_risk.py +23 -0
- quantark-0.2.0/quantark/asset/fx/engine/__init__.py +31 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/__init__.py +42 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +78 -1
- quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +113 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +78 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +120 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +390 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +9 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +62 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +67 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +311 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +281 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +193 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +94 -0
- quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +208 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/base_fx_engine.py +53 -0
- quantark-0.2.0/quantark/asset/fx/engine/localvol_common.py +54 -0
- quantark-0.2.0/quantark/asset/fx/engine/localvol_greeks.py +76 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/__init__.py +28 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +290 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/fx_mc_params.py +47 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +343 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +122 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +180 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +188 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/heston_mc_engine.py +75 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +87 -0
- quantark-0.2.0/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +77 -0
- quantark-0.2.0/quantark/asset/fx/engine/pde/__init__.py +7 -0
- quantark-0.2.0/quantark/asset/fx/engine/pde/heston_pde_solver.py +111 -0
- quantark-0.2.0/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +109 -0
- quantark-0.2.0/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +78 -0
- quantark-0.2.0/quantark/asset/fx/process/__init__.py +7 -0
- quantark-0.2.0/quantark/asset/fx/process/fx_gk_path_generator.py +141 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/__init__.py +10 -0
- quantark-0.2.0/quantark/asset/fx/product/option/__init__.py +36 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_barrier_option.py +121 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +70 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_one_touch_option.py +71 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +99 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_range_accrual_config.py +258 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_range_accrual_option.py +318 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_sharkfin_option.py +152 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_target_redemption_forward.py +145 -0
- quantark-0.2.0/quantark/asset/fx/product/option/fx_target_redemption_note.py +198 -0
- quantark-0.2.0/quantark/asset/fx/riskmeasures/__init__.py +7 -0
- quantark-0.2.0/quantark/asset/fx/riskmeasures/vol_model_risk.py +23 -0
- quantark-0.2.0/quantark/asset/vol_model_risk.py +608 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/engine.py +22 -9
- quantark-0.2.0/quantark/montecarlo/__init__.py +47 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/__init__.py +2 -1
- quantark-0.2.0/quantark/param/vol/__init__.py +21 -0
- quantark-0.2.0/quantark/param/vol/sabr/__init__.py +29 -0
- quantark-0.2.0/quantark/param/vol/sabr/calibration.py +290 -0
- quantark-0.2.0/quantark/param/vol/sabr/hagan.py +292 -0
- quantark-0.2.0/quantark/param/vol/sabr/sabr_surface.py +179 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/__init__.py +55 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/bs_fx.py +153 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/market_conventions.py +222 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/smile_builder.py +146 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/vv_core.py +142 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/vv_surface.py +177 -0
- quantark-0.2.0/quantark/param/vol/vannavolga/vv_term_structure.py +201 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/vol/vol_surface.py +68 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/__init__.py +2 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/equity/__init__.py +2 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/equity/portfolio.py +48 -1
- quantark-0.2.0/quantark/portfolio/equity/swap_position.py +366 -0
- quantark-0.2.0/quantark/saccr/__init__.py +46 -0
- quantark-0.2.0/quantark/saccr/calculator.py +144 -0
- quantark-0.2.0/quantark/saccr/dashboard.py +509 -0
- quantark-0.2.0/quantark/saccr/engines/__init__.py +1 -0
- quantark-0.2.0/quantark/saccr/engines/addons/__init__.py +17 -0
- quantark-0.2.0/quantark/saccr/engines/addons/base.py +55 -0
- quantark-0.2.0/quantark/saccr/engines/addons/commodity.py +116 -0
- quantark-0.2.0/quantark/saccr/engines/addons/credit.py +108 -0
- quantark-0.2.0/quantark/saccr/engines/addons/equity.py +97 -0
- quantark-0.2.0/quantark/saccr/engines/addons/fx.py +87 -0
- quantark-0.2.0/quantark/saccr/engines/addons/interest_rate.py +120 -0
- quantark-0.2.0/quantark/saccr/engines/maths.py +188 -0
- quantark-0.2.0/quantark/saccr/engines/pfe.py +38 -0
- quantark-0.2.0/quantark/saccr/engines/replacement_cost.py +26 -0
- quantark-0.2.0/quantark/saccr/models/__init__.py +27 -0
- quantark-0.2.0/quantark/saccr/models/enums.py +113 -0
- quantark-0.2.0/quantark/saccr/models/netting_set.py +115 -0
- quantark-0.2.0/quantark/saccr/models/trade.py +194 -0
- quantark-0.2.0/quantark/saccr/parameters/__init__.py +5 -0
- quantark-0.2.0/quantark/saccr/parameters/supervisory.py +215 -0
- quantark-0.2.0/quantark/saccr/results/__init__.py +5 -0
- quantark-0.2.0/quantark/saccr/results/result.py +50 -0
- quantark-0.2.0/quantark/sacva/__init__.py +45 -0
- quantark-0.2.0/quantark/sacva/calculator.py +80 -0
- quantark-0.2.0/quantark/sacva/cva/__init__.py +5 -0
- quantark-0.2.0/quantark/sacva/cva/engine.py +47 -0
- quantark-0.2.0/quantark/sacva/dashboard.py +129 -0
- quantark-0.2.0/quantark/sacva/engines/__init__.py +0 -0
- quantark-0.2.0/quantark/sacva/engines/base.py +155 -0
- quantark-0.2.0/quantark/sacva/engines/commodity.py +37 -0
- quantark-0.2.0/quantark/sacva/engines/correlations.py +33 -0
- quantark-0.2.0/quantark/sacva/engines/counterparty_credit.py +45 -0
- quantark-0.2.0/quantark/sacva/engines/equity.py +37 -0
- quantark-0.2.0/quantark/sacva/engines/fx.py +36 -0
- quantark-0.2.0/quantark/sacva/engines/interest_rate.py +71 -0
- quantark-0.2.0/quantark/sacva/engines/reference_credit.py +40 -0
- quantark-0.2.0/quantark/sacva/exposure/__init__.py +6 -0
- quantark-0.2.0/quantark/sacva/exposure/asof.py +51 -0
- quantark-0.2.0/quantark/sacva/exposure/correlation.py +42 -0
- quantark-0.2.0/quantark/sacva/exposure/curves.py +85 -0
- quantark-0.2.0/quantark/sacva/exposure/engine.py +160 -0
- quantark-0.2.0/quantark/sacva/exposure/grid.py +54 -0
- quantark-0.2.0/quantark/sacva/exposure/historical/__init__.py +0 -0
- quantark-0.2.0/quantark/sacva/exposure/historical/calibration.py +138 -0
- quantark-0.2.0/quantark/sacva/exposure/historical/engine.py +192 -0
- quantark-0.2.0/quantark/sacva/exposure/historical/path_generator.py +140 -0
- quantark-0.2.0/quantark/sacva/exposure/historical/pfe.py +80 -0
- quantark-0.2.0/quantark/sacva/exposure/historical/resampling.py +96 -0
- quantark-0.2.0/quantark/sacva/exposure/paths.py +141 -0
- quantark-0.2.0/quantark/sacva/exposure/phoenix_surface.py +176 -0
- quantark-0.2.0/quantark/sacva/exposure/repricer.py +198 -0
- quantark-0.2.0/quantark/sacva/exposure/simulator.py +504 -0
- quantark-0.2.0/quantark/sacva/exposure/snowball_surface.py +282 -0
- quantark-0.2.0/quantark/sacva/exposure/statemachine.py +314 -0
- quantark-0.2.0/quantark/sacva/exposure/value_surface.py +111 -0
- quantark-0.2.0/quantark/sacva/models/__init__.py +0 -0
- quantark-0.2.0/quantark/sacva/models/enums.py +31 -0
- quantark-0.2.0/quantark/sacva/models/portfolio.py +27 -0
- quantark-0.2.0/quantark/sacva/models/sensitivity.py +124 -0
- quantark-0.2.0/quantark/sacva/parameters/__init__.py +0 -0
- quantark-0.2.0/quantark/sacva/parameters/supervisory.py +250 -0
- quantark-0.2.0/quantark/sacva/portfolio/__init__.py +14 -0
- quantark-0.2.0/quantark/sacva/portfolio/counterparty.py +38 -0
- quantark-0.2.0/quantark/sacva/portfolio/credit_curve.py +59 -0
- quantark-0.2.0/quantark/sacva/portfolio/netting.py +36 -0
- quantark-0.2.0/quantark/sacva/portfolio/trade.py +66 -0
- quantark-0.2.0/quantark/sacva/portfolio/trade_portfolio.py +29 -0
- quantark-0.2.0/quantark/sacva/results/__init__.py +0 -0
- quantark-0.2.0/quantark/sacva/results/result.py +26 -0
- quantark-0.2.0/quantark/sacva/sacva_engine.py +336 -0
- quantark-0.2.0/quantark/sacva/sensitivities/__init__.py +1 -0
- quantark-0.2.0/quantark/sacva/sensitivities/curve_bump.py +63 -0
- quantark-0.2.0/quantark/sacva/sensitivities/engine.py +53 -0
- quantark-0.2.0/quantark/sacva/sensitivities/shifts.py +46 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/dashboard.py +1 -1
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/business_calendar.py +160 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/__init__.py +14 -1
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/engine_enums.py +66 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/fx_enums.py +14 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/option_enums.py +19 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/historical.py +9 -6
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/monte_carlo.py +8 -6
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/parametric.py +51 -71
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/revaluation.py +18 -0
- quantark-0.2.0/quantark/volmodels/__init__.py +7 -0
- quantark-0.2.0/quantark/volmodels/black_scholes.py +87 -0
- quantark-0.2.0/quantark/volmodels/curves.py +61 -0
- quantark-0.2.0/quantark/volmodels/heston/__init__.py +28 -0
- quantark-0.2.0/quantark/volmodels/heston/analytical_kernel.py +184 -0
- quantark-0.2.0/quantark/volmodels/heston/calibration.py +162 -0
- quantark-0.2.0/quantark/volmodels/heston/mc_kernel.py +201 -0
- quantark-0.2.0/quantark/volmodels/heston/params.py +47 -0
- quantark-0.2.0/quantark/volmodels/heston/pde_kernel.py +395 -0
- quantark-0.2.0/quantark/volmodels/localvol/__init__.py +13 -0
- quantark-0.2.0/quantark/volmodels/localvol/dupire.py +181 -0
- quantark-0.2.0/quantark/volmodels/localvol/mc_kernel.py +95 -0
- quantark-0.2.0/quantark/volmodels/localvol/pde_kernel.py +153 -0
- quantark-0.2.0/quantark/volmodels/localvol/surface.py +85 -0
- quantark-0.2.0/quantark/volmodels/risk/__init__.py +40 -0
- quantark-0.2.0/quantark/volmodels/risk/contracts.py +370 -0
- quantark-0.2.0/quantark/volmodels/risk/scenarios.py +141 -0
- quantark-0.2.0/quantark/volmodels/slv/__init__.py +17 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/__init__.py +5 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/bootstrap.py +68 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/calibration.py +107 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/config.py +59 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/coordinates.py +88 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/fp_operators.py +136 -0
- quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/fp_solver.py +108 -0
- quantark-0.2.0/quantark/volmodels/slv/leverage.py +149 -0
- quantark-0.2.0/quantark/volmodels/slv/slv_mc_kernel.py +216 -0
- quantark-0.2.0/quantark/volmodels/slv/slv_pde_kernel.py +281 -0
- quantark-0.1.2/quantark/asset/equity/riskmeasures/__init__.py +0 -7
- quantark-0.1.2/quantark/asset/fx/engine/__init__.py +0 -6
- quantark-0.1.2/quantark/asset/fx/engine/analytical/__init__.py +0 -16
- quantark-0.1.2/quantark/asset/fx/process/__init__.py +0 -6
- quantark-0.1.2/quantark/asset/fx/product/option/__init__.py +0 -14
- quantark-0.1.2/quantark/asset/fx/riskmeasures/__init__.py +0 -6
- quantark-0.1.2/quantark/param/vol/__init__.py +0 -6
- {quantark-0.1.2 → quantark-0.2.0}/.gitignore +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/CHANGELOG.md +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/LICENSE +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/NOTICE +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/README.md +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/_compat.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/discount/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/base_bond_product.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/convertible/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/couponbond/frn.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/forward/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/futures/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/option/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/schedule/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/schedule/cashflow.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/conventions.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/mc/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/schedule.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/base_credit_product.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/basket_cds.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/cds.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/analysis/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/base_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/event_stats.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/base_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/barrier.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/events.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/manager.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/state.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/param/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/param/engine_params.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/bsm/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/base_equity_product.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/futures.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/american_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/barrier_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/digital_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/snowball_config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/snowball_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/plotting.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/surfaces.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/term_structure.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/riskmeasures/greeks_calculator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/base_fx_product.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/currency_pair.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/report/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/report/fx_report.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/fra_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/swaption_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/cap_floor.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/fra.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/irs.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/swaption.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/dashboard.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/hedge_executor.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/metrics.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/state.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/advanced_backtest.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/hedge_executor.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/metrics.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/state.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/logger.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/_replay.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/book_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/dashboard.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/engine_factory.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/market.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/state.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/report_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/base_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/hedge_instruments.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/scenarios.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/transaction_costs.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/visualizer.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/accrual_leg.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/base_amount.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/deterministic_leg.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/event_distribution.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/fixed_payoff_leg.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/leg_schedule.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/leg_valuator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/path_library.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/equity/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/path_library.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/day_path.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/path_builder.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/path_library.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/report/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/report/visualizer.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/results/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/results/result_exporter.py +0 -0
- {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_brownian_bridge.py +0 -0
- {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_rqmc_driver.py +0 -0
- {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_sobol.py +0 -0
- {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_variance_reduction.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/basis/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/basis/basis_yield.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/credit/ajd_hazard_curve.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/credit/hazard_curve.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/div/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/div/dividend_yield.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/index/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/index/rate_index.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/quote/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/quote/spot_quote.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/rrf/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/param/rrf/rate_curve.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/credit/portfolio.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/credit/position.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/equity/position.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fi/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fi/portfolio.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fi/position.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fx/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fx/portfolio.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fx/position.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/portfolio_snapshot.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/portfolio_storage.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/credit_pricing_environment.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/fx_pricing_environment.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/pricing_environment.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/builders.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/models.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/registry.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/service.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/accessors.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/commodity.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/credit_qualifying.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/cross_risk.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/equity.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/fx.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/ir.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/version.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/crif/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/crif/models.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/crif/parser.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/addon.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/concentration.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/correlations.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/classification/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/factory.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/portfolio_adapter.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/result.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/market_data.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/crif_export.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/excel_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/html_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/attribution.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/simm_result.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/whatif.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/sensitivity.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/taxonomy.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/template/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/template/xlsx_loader.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/template/xlsx_template.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/report/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/report/report_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/report/visualizer.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/metrics.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/report/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/report/report_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/report/visualizer.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/result_aggregator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/result_exporter.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/stress_results.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario_builder.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario_library.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario_storage.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/stress/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/stress/stress_applicator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/stress/stress_types.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/barrier_shift.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/day_counter.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/holidayfile/china.csv +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/bond_enums.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/deltaone_enums.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/greeks_enums.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/exceptions.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/converter.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/example_usage.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/generator/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/generator/mock_generator.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/models.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/storage/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/comparison.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/constants.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/formatting.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/pnl.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/safe_math.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/validation.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/attribution.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/backtest/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/backtest/var_backtester.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/revaluation.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/config.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/engine.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/incremental_var_result.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/var_report.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/var_result.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/__init__.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/base.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/equity_factors.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/fi_factors.py +0 -0
- {quantark-0.1.2 → quantark-0.2.0}/quantark_compat.pth +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantark
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Modular derivatives pricing and risk library: options, autocallables, bonds, VaR, SIMM
|
|
5
5
|
Project-URL: Homepage, https://github.com/deiiiiii93/quantark
|
|
6
6
|
Project-URL: Repository, https://github.com/deiiiiii93/quantark
|
|
@@ -9,6 +9,7 @@ from .analytical import (
|
|
|
9
9
|
OneTouchAnalyticalEngine,
|
|
10
10
|
AsianOptionAnalyticalEngine,
|
|
11
11
|
DoubleSharkfinOptionAnalyticalEngine,
|
|
12
|
+
HestonAnalyticalEngine,
|
|
12
13
|
)
|
|
13
14
|
from .pde_engine import PDEEngine
|
|
14
15
|
from .mc import (
|
|
@@ -19,6 +20,9 @@ from .mc import (
|
|
|
19
20
|
DigitalOptionMCEngine,
|
|
20
21
|
BarrierOptionMCEngine,
|
|
21
22
|
DoubleSharkfinOptionMCEngine,
|
|
23
|
+
LocalVolMCEngine,
|
|
24
|
+
HestonMCEngine,
|
|
25
|
+
HestonSLVMCEngine,
|
|
22
26
|
)
|
|
23
27
|
from .pde import (
|
|
24
28
|
BasePDESolver,
|
|
@@ -30,6 +34,9 @@ from .pde import (
|
|
|
30
34
|
DoubleOneTouchPDESolver,
|
|
31
35
|
KOResetSnowballPDESolver,
|
|
32
36
|
PhoenixPDESolver,
|
|
37
|
+
LocalVolPDESolver,
|
|
38
|
+
HestonPDESolver,
|
|
39
|
+
HestonSLVPDESolver,
|
|
33
40
|
TimeGrid,
|
|
34
41
|
SpatialGrid,
|
|
35
42
|
)
|
|
@@ -51,6 +58,7 @@ __all__ = [
|
|
|
51
58
|
"OneTouchAnalyticalEngine",
|
|
52
59
|
"AsianOptionAnalyticalEngine",
|
|
53
60
|
"DoubleSharkfinOptionAnalyticalEngine",
|
|
61
|
+
"HestonAnalyticalEngine",
|
|
54
62
|
# Monte Carlo
|
|
55
63
|
"EuropeanMCEngine",
|
|
56
64
|
"AmericanOptionMCEngine",
|
|
@@ -59,6 +67,9 @@ __all__ = [
|
|
|
59
67
|
"DigitalOptionMCEngine",
|
|
60
68
|
"BarrierOptionMCEngine",
|
|
61
69
|
"DoubleSharkfinOptionMCEngine",
|
|
70
|
+
"LocalVolMCEngine",
|
|
71
|
+
"HestonMCEngine",
|
|
72
|
+
"HestonSLVMCEngine",
|
|
62
73
|
# Unified PDE Engine
|
|
63
74
|
"PDEEngine",
|
|
64
75
|
# PDE Solvers
|
|
@@ -71,6 +82,9 @@ __all__ = [
|
|
|
71
82
|
"DoubleOneTouchPDESolver",
|
|
72
83
|
"KOResetSnowballPDESolver",
|
|
73
84
|
"PhoenixPDESolver",
|
|
85
|
+
"LocalVolPDESolver",
|
|
86
|
+
"HestonPDESolver",
|
|
87
|
+
"HestonSLVPDESolver",
|
|
74
88
|
# Grid utilities
|
|
75
89
|
"TimeGrid",
|
|
76
90
|
"SpatialGrid",
|
|
@@ -20,8 +20,11 @@ from .range_accrual_analytical_engine import (
|
|
|
20
20
|
RangeAccrualAnalyticalEngine,
|
|
21
21
|
RangeAccrualAnalyticalResult,
|
|
22
22
|
)
|
|
23
|
+
from .accumulator_analytical_engine import AccumulatorAnalyticalEngine
|
|
24
|
+
from .heston_analytical_engine import HestonAnalyticalEngine
|
|
23
25
|
|
|
24
26
|
__all__ = [
|
|
27
|
+
"HestonAnalyticalEngine",
|
|
25
28
|
"BlackScholesEngine",
|
|
26
29
|
"DeltaOneEngine",
|
|
27
30
|
"AmericanOptionAnalyticalEngine",
|
|
@@ -34,4 +37,5 @@ __all__ = [
|
|
|
34
37
|
"AsianOptionAnalyticalEngine",
|
|
35
38
|
"RangeAccrualAnalyticalEngine",
|
|
36
39
|
"RangeAccrualAnalyticalResult",
|
|
40
|
+
"AccumulatorAnalyticalEngine",
|
|
37
41
|
]
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Analytical pricing engine for accumulator options.
|
|
3
|
+
|
|
4
|
+
The accumulator is statically replicated as a strip of up-and-out option legs,
|
|
5
|
+
one per observation date ``t_i``:
|
|
6
|
+
|
|
7
|
+
* a long up-and-out CALL struck at ``K`` (the linear gain leg), and
|
|
8
|
+
* a short, geared up-and-out PUT struck at ``K`` (the geared loss leg).
|
|
9
|
+
|
|
10
|
+
For :class:`AccumulatorKnockOutType.TERMINATION` both legs are knocked out on the
|
|
11
|
+
observation dates up to ``t_i`` (so a breach extinguishes all later accruals), and
|
|
12
|
+
an optional cash rebate is valued as a one-touch on the knock-out barrier. For
|
|
13
|
+
:class:`AccumulatorKnockOutType.SINGLE_DAY` only the call leg carries the barrier
|
|
14
|
+
(checked at ``t_i``) and the geared put leg is a plain vanilla, so a breach cancels
|
|
15
|
+
only that day's accrual.
|
|
16
|
+
|
|
17
|
+
Discrete daily monitoring inherits the Broadie-Glasserman-Kou barrier-shift
|
|
18
|
+
approximation implemented by the composed barrier and one-touch engines.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from typing import List, Optional
|
|
22
|
+
|
|
23
|
+
from quantark.asset.equity.engine.base_engine import BaseEngine
|
|
24
|
+
from quantark.asset.equity.param import EngineParams
|
|
25
|
+
from quantark.asset.equity.product.base_equity_product import BaseEquityProduct
|
|
26
|
+
from quantark.asset.equity.product.option import (
|
|
27
|
+
AccumulatorOption,
|
|
28
|
+
BarrierOption,
|
|
29
|
+
EuropeanVanillaOption,
|
|
30
|
+
OneTouchOption,
|
|
31
|
+
)
|
|
32
|
+
from quantark.priceenv import PricingEnvironment
|
|
33
|
+
from quantark.util.enum import (
|
|
34
|
+
AccumulatorKnockOutType,
|
|
35
|
+
BarrierDirection,
|
|
36
|
+
BarrierType,
|
|
37
|
+
ObservationType,
|
|
38
|
+
OptionType,
|
|
39
|
+
TouchType,
|
|
40
|
+
)
|
|
41
|
+
from quantark.util.enum.engine_enums import EngineType
|
|
42
|
+
from quantark.util.exceptions import PricingError, ValidationError
|
|
43
|
+
from quantark.util.numerical import (
|
|
44
|
+
safe_exp,
|
|
45
|
+
validate_non_negative,
|
|
46
|
+
validate_positive,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
from .barrier_analytical_engine import BarrierAnalyticalEngine
|
|
50
|
+
from .black_scholes_engine import BlackScholesEngine
|
|
51
|
+
from .one_touch_analytical_engine import OneTouchAnalyticalEngine
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class AccumulatorAnalyticalEngine(BaseEngine):
|
|
55
|
+
"""
|
|
56
|
+
Closed-form decomposition engine for :class:`AccumulatorOption`.
|
|
57
|
+
|
|
58
|
+
Composes :class:`BarrierAnalyticalEngine`, :class:`BlackScholesEngine`, and
|
|
59
|
+
:class:`OneTouchAnalyticalEngine` to value each daily leg, the knock-out
|
|
60
|
+
rebate, and the optional extra-shares-at-expiry leg.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
engine_type = EngineType.ANALYTICAL
|
|
64
|
+
|
|
65
|
+
MIN_VOL = 0.001
|
|
66
|
+
MAX_VOL = 5.0
|
|
67
|
+
MIN_MATURITY = 1e-10
|
|
68
|
+
MAX_MATURITY = 50.0
|
|
69
|
+
|
|
70
|
+
def __init__(self, params: Optional[EngineParams] = None):
|
|
71
|
+
super().__init__(params)
|
|
72
|
+
self._barrier_engine = BarrierAnalyticalEngine(params)
|
|
73
|
+
self._bs_engine = BlackScholesEngine(params)
|
|
74
|
+
self._one_touch_engine = OneTouchAnalyticalEngine(params)
|
|
75
|
+
|
|
76
|
+
def price(
|
|
77
|
+
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
78
|
+
) -> float:
|
|
79
|
+
"""
|
|
80
|
+
Price an accumulator option analytically.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
product: An :class:`AccumulatorOption` instance.
|
|
84
|
+
pricing_env: Market data environment.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Present value of the accumulator.
|
|
88
|
+
|
|
89
|
+
Raises:
|
|
90
|
+
PricingError: If the product type is unsupported.
|
|
91
|
+
ValidationError: If pricing inputs are invalid.
|
|
92
|
+
"""
|
|
93
|
+
if not isinstance(product, AccumulatorOption):
|
|
94
|
+
raise PricingError(
|
|
95
|
+
"AccumulatorAnalyticalEngine only supports AccumulatorOption, "
|
|
96
|
+
f"got {type(product).__name__}"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
spot = pricing_env.spot
|
|
100
|
+
strike = product.strike
|
|
101
|
+
maturity = product.get_maturity(pricing_env)
|
|
102
|
+
|
|
103
|
+
if maturity < self.MIN_MATURITY:
|
|
104
|
+
# At expiry only the locked-in accrual and the deterministic terminal
|
|
105
|
+
# extra-shares leg remain -- no rate/dividend/volatility needed.
|
|
106
|
+
return product.get_realized_accrual() + self._extra_shares_intrinsic(
|
|
107
|
+
product, spot
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
rate = pricing_env.get_rate(maturity)
|
|
111
|
+
div = pricing_env.get_div_yield(maturity)
|
|
112
|
+
vol = pricing_env.get_vol(strike, maturity)
|
|
113
|
+
|
|
114
|
+
self._validate_inputs(spot, strike, maturity, rate, div, vol, product)
|
|
115
|
+
|
|
116
|
+
# Realized accrual from past observations is locked in (rate-free part is
|
|
117
|
+
# supplied by the product; discounting is applied here).
|
|
118
|
+
realized = product.get_realized_accrual()
|
|
119
|
+
if product.settlement_at_expiry:
|
|
120
|
+
realized *= safe_exp(-rate * maturity)
|
|
121
|
+
|
|
122
|
+
times = product.get_observation_times()
|
|
123
|
+
daily = product.daily_share_accumulation
|
|
124
|
+
df_maturity = pricing_env.get_discount_factor(maturity)
|
|
125
|
+
per_contract = 0.0
|
|
126
|
+
for idx, t_i in enumerate(times):
|
|
127
|
+
sub_dates = times[: idx + 1]
|
|
128
|
+
leg = self._price_leg(product, pricing_env, sub_dates, t_i, daily)
|
|
129
|
+
if product.settlement_at_expiry:
|
|
130
|
+
# Defer the leg's payoff from t_i to T using curve discount
|
|
131
|
+
# factors: DF(0, T) / DF(0, t_i) (curve-consistent, not flat-only).
|
|
132
|
+
leg *= df_maturity / pricing_env.get_discount_factor(t_i)
|
|
133
|
+
per_contract += leg
|
|
134
|
+
|
|
135
|
+
# The rebate is conditional on a knock-out observation; with no accrual
|
|
136
|
+
# fixings there is nothing to monitor.
|
|
137
|
+
if times:
|
|
138
|
+
per_contract += self._price_rebate_leg(product, pricing_env, times)
|
|
139
|
+
per_contract += self._price_extra_shares_leg(
|
|
140
|
+
product, pricing_env, times, maturity
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
value = per_contract * product.contract_multiplier + realized
|
|
144
|
+
return value
|
|
145
|
+
|
|
146
|
+
def _extra_shares_intrinsic(self, product: AccumulatorOption, spot: float) -> float:
|
|
147
|
+
"""Deterministic terminal value of the extra-shares leg at expiry."""
|
|
148
|
+
extra = product.extra_shares_at_expiry
|
|
149
|
+
if extra <= 0.0 or spot >= product.knock_out_barrier:
|
|
150
|
+
return 0.0
|
|
151
|
+
return -extra * max(product.strike - spot, 0.0) * product.contract_multiplier
|
|
152
|
+
|
|
153
|
+
# ------------------------------------------------------------------
|
|
154
|
+
# Leg pricing
|
|
155
|
+
# ------------------------------------------------------------------
|
|
156
|
+
|
|
157
|
+
def _price_leg(
|
|
158
|
+
self,
|
|
159
|
+
product: AccumulatorOption,
|
|
160
|
+
pricing_env: PricingEnvironment,
|
|
161
|
+
sub_dates: List[float],
|
|
162
|
+
maturity_i: float,
|
|
163
|
+
daily: float,
|
|
164
|
+
) -> float:
|
|
165
|
+
"""Value one observation's (long call - geared put) leg, per contract."""
|
|
166
|
+
call_value = self._price_barrier_call(
|
|
167
|
+
product, pricing_env, sub_dates, maturity_i, daily
|
|
168
|
+
)
|
|
169
|
+
put_value = self._price_put_leg(
|
|
170
|
+
product, pricing_env, sub_dates, maturity_i, daily
|
|
171
|
+
)
|
|
172
|
+
return call_value - put_value
|
|
173
|
+
|
|
174
|
+
def _price_barrier_call(
|
|
175
|
+
self,
|
|
176
|
+
product: AccumulatorOption,
|
|
177
|
+
pricing_env: PricingEnvironment,
|
|
178
|
+
sub_dates: List[float],
|
|
179
|
+
maturity_i: float,
|
|
180
|
+
daily: float,
|
|
181
|
+
) -> float:
|
|
182
|
+
"""Up-and-out call gain leg scaled by ``daily`` shares."""
|
|
183
|
+
obs_type, obs_dates = self._call_leg_monitoring(product, sub_dates, maturity_i)
|
|
184
|
+
call_leg = BarrierOption(
|
|
185
|
+
strike=product.strike,
|
|
186
|
+
option_type=OptionType.CALL,
|
|
187
|
+
barrier=product.knock_out_barrier,
|
|
188
|
+
barrier_type=BarrierType.UP_OUT,
|
|
189
|
+
maturity=maturity_i,
|
|
190
|
+
rebate=0.0,
|
|
191
|
+
participation_rate=1.0,
|
|
192
|
+
pay_at_hit=False,
|
|
193
|
+
observation_type=obs_type,
|
|
194
|
+
observation_dates=obs_dates,
|
|
195
|
+
contract_multiplier=daily,
|
|
196
|
+
)
|
|
197
|
+
return self._barrier_engine.price(call_leg, pricing_env)
|
|
198
|
+
|
|
199
|
+
def _price_put_leg(
|
|
200
|
+
self,
|
|
201
|
+
product: AccumulatorOption,
|
|
202
|
+
pricing_env: PricingEnvironment,
|
|
203
|
+
sub_dates: List[float],
|
|
204
|
+
maturity_i: float,
|
|
205
|
+
daily: float,
|
|
206
|
+
) -> float:
|
|
207
|
+
"""Geared loss leg: up-and-out put (TERMINATION) or vanilla put (SINGLE_DAY)."""
|
|
208
|
+
geared = daily * product.gearing
|
|
209
|
+
if product.knock_out_type == AccumulatorKnockOutType.SINGLE_DAY:
|
|
210
|
+
# The lower put leg is unaffected by the upper knock-out barrier.
|
|
211
|
+
put = EuropeanVanillaOption(
|
|
212
|
+
strike=product.strike,
|
|
213
|
+
option_type=OptionType.PUT,
|
|
214
|
+
maturity=maturity_i,
|
|
215
|
+
contract_multiplier=geared,
|
|
216
|
+
)
|
|
217
|
+
return self._bs_engine.price(put, pricing_env)
|
|
218
|
+
|
|
219
|
+
obs_type, obs_dates = self._leg_monitoring(product, sub_dates)
|
|
220
|
+
put_leg = BarrierOption(
|
|
221
|
+
strike=product.strike,
|
|
222
|
+
option_type=OptionType.PUT,
|
|
223
|
+
barrier=product.knock_out_barrier,
|
|
224
|
+
barrier_type=BarrierType.UP_OUT,
|
|
225
|
+
maturity=maturity_i,
|
|
226
|
+
rebate=0.0,
|
|
227
|
+
participation_rate=1.0,
|
|
228
|
+
pay_at_hit=False,
|
|
229
|
+
observation_type=obs_type,
|
|
230
|
+
observation_dates=obs_dates,
|
|
231
|
+
contract_multiplier=geared,
|
|
232
|
+
)
|
|
233
|
+
return self._barrier_engine.price(put_leg, pricing_env)
|
|
234
|
+
|
|
235
|
+
def _leg_monitoring(self, product: AccumulatorOption, sub_dates: List[float]):
|
|
236
|
+
"""Resolve barrier monitoring for a leg's observation sub-schedule.
|
|
237
|
+
|
|
238
|
+
A single observation is monitored at expiry (a barrier shift needs at
|
|
239
|
+
least two observation times); multiple observations are monitored
|
|
240
|
+
discretely on the daily grid up to the leg's maturity.
|
|
241
|
+
"""
|
|
242
|
+
if product.observation_type == ObservationType.CONTINUOUS:
|
|
243
|
+
return ObservationType.CONTINUOUS, None
|
|
244
|
+
if product.observation_type == ObservationType.EXPIRY:
|
|
245
|
+
return ObservationType.EXPIRY, None
|
|
246
|
+
if len(sub_dates) <= 1:
|
|
247
|
+
return ObservationType.EXPIRY, None
|
|
248
|
+
return ObservationType.DISCRETE, list(sub_dates)
|
|
249
|
+
|
|
250
|
+
def _call_leg_monitoring(
|
|
251
|
+
self, product: AccumulatorOption, sub_dates: List[float], maturity_i: float
|
|
252
|
+
):
|
|
253
|
+
"""Monitoring for the gain (call) leg of one observation.
|
|
254
|
+
|
|
255
|
+
SINGLE_DAY only cancels that day's accrual, so the call leg's barrier is
|
|
256
|
+
checked solely on its own observation date (expiry monitoring). For
|
|
257
|
+
TERMINATION an earlier breach extinguishes the leg, so the cumulative
|
|
258
|
+
observation sub-schedule is monitored.
|
|
259
|
+
"""
|
|
260
|
+
if product.knock_out_type == AccumulatorKnockOutType.SINGLE_DAY:
|
|
261
|
+
return ObservationType.EXPIRY, None
|
|
262
|
+
return self._leg_monitoring(product, sub_dates)
|
|
263
|
+
|
|
264
|
+
def _price_rebate_leg(
|
|
265
|
+
self,
|
|
266
|
+
product: AccumulatorOption,
|
|
267
|
+
pricing_env: PricingEnvironment,
|
|
268
|
+
times: List[float],
|
|
269
|
+
) -> float:
|
|
270
|
+
"""Value the TERMINATION knock-out cash rebate as a one-touch, per contract."""
|
|
271
|
+
if product.knock_out_type != AccumulatorKnockOutType.TERMINATION:
|
|
272
|
+
return 0.0
|
|
273
|
+
rebate_cash = product.get_knock_out_rebate_cash()
|
|
274
|
+
if rebate_cash <= 0.0:
|
|
275
|
+
return 0.0
|
|
276
|
+
|
|
277
|
+
obs_type, obs_dates = self._leg_monitoring(product, times)
|
|
278
|
+
touch = OneTouchOption(
|
|
279
|
+
barrier=product.knock_out_barrier,
|
|
280
|
+
barrier_direction=BarrierDirection.UP,
|
|
281
|
+
maturity=times[-1],
|
|
282
|
+
rebate=rebate_cash,
|
|
283
|
+
payment_at_hit=True,
|
|
284
|
+
touch_type=TouchType.ONE_TOUCH,
|
|
285
|
+
observation_type=obs_type,
|
|
286
|
+
observation_dates=obs_dates,
|
|
287
|
+
)
|
|
288
|
+
return self._one_touch_engine.price(touch, pricing_env)
|
|
289
|
+
|
|
290
|
+
def _price_extra_shares_leg(
|
|
291
|
+
self,
|
|
292
|
+
product: AccumulatorOption,
|
|
293
|
+
pricing_env: PricingEnvironment,
|
|
294
|
+
times: List[float],
|
|
295
|
+
maturity: float,
|
|
296
|
+
) -> float:
|
|
297
|
+
"""Subtract the extra-shares-at-expiry up-and-out put leg, per contract."""
|
|
298
|
+
extra = product.extra_shares_at_expiry
|
|
299
|
+
if extra <= 0.0:
|
|
300
|
+
return 0.0
|
|
301
|
+
|
|
302
|
+
# The terminal extra-shares leg matures at the contract maturity and
|
|
303
|
+
# follows the same knock-out treatment as a gain leg maturing at T:
|
|
304
|
+
# expiry-only for SINGLE_DAY (no cumulative knockout), cumulative discrete
|
|
305
|
+
# monitoring for TERMINATION.
|
|
306
|
+
obs_type, obs_dates = self._call_leg_monitoring(product, times, maturity)
|
|
307
|
+
put_leg = BarrierOption(
|
|
308
|
+
strike=product.strike,
|
|
309
|
+
option_type=OptionType.PUT,
|
|
310
|
+
barrier=product.knock_out_barrier,
|
|
311
|
+
barrier_type=BarrierType.UP_OUT,
|
|
312
|
+
maturity=maturity,
|
|
313
|
+
rebate=0.0,
|
|
314
|
+
participation_rate=1.0,
|
|
315
|
+
pay_at_hit=False,
|
|
316
|
+
observation_type=obs_type,
|
|
317
|
+
observation_dates=obs_dates,
|
|
318
|
+
contract_multiplier=extra,
|
|
319
|
+
)
|
|
320
|
+
return -self._barrier_engine.price(put_leg, pricing_env)
|
|
321
|
+
|
|
322
|
+
# ------------------------------------------------------------------
|
|
323
|
+
# Validation
|
|
324
|
+
# ------------------------------------------------------------------
|
|
325
|
+
|
|
326
|
+
def _validate_inputs(
|
|
327
|
+
self,
|
|
328
|
+
spot: float,
|
|
329
|
+
strike: float,
|
|
330
|
+
maturity: float,
|
|
331
|
+
rate: float,
|
|
332
|
+
div: float,
|
|
333
|
+
vol: float,
|
|
334
|
+
product: AccumulatorOption,
|
|
335
|
+
) -> None:
|
|
336
|
+
"""Validate market and product inputs for analytical pricing."""
|
|
337
|
+
validate_positive(spot, "spot")
|
|
338
|
+
validate_positive(strike, "strike")
|
|
339
|
+
validate_positive(product.knock_out_barrier, "knock_out_barrier")
|
|
340
|
+
validate_non_negative(maturity, "maturity")
|
|
341
|
+
validate_positive(vol, "volatility")
|
|
342
|
+
validate_non_negative(product.gearing, "gearing")
|
|
343
|
+
validate_non_negative(
|
|
344
|
+
product.daily_share_accumulation, "daily_share_accumulation"
|
|
345
|
+
)
|
|
346
|
+
validate_positive(product.contract_multiplier, "contract_multiplier")
|
|
347
|
+
|
|
348
|
+
if vol < self.MIN_VOL or vol > self.MAX_VOL:
|
|
349
|
+
raise ValidationError(
|
|
350
|
+
f"Volatility {vol} outside supported range "
|
|
351
|
+
f"[{self.MIN_VOL}, {self.MAX_VOL}]"
|
|
352
|
+
)
|
|
353
|
+
if maturity > self.MAX_MATURITY:
|
|
354
|
+
raise ValidationError(
|
|
355
|
+
f"Maturity too long for analytical accumulator pricing: {maturity}"
|
|
356
|
+
)
|
|
357
|
+
if div < 0:
|
|
358
|
+
raise ValidationError(f"Dividend yield must be non-negative, got {div}")
|
|
359
|
+
if abs(rate) > 1.0:
|
|
360
|
+
raise ValidationError(f"Risk-free rate outside reasonable bounds: {rate}")
|
|
361
|
+
|
|
362
|
+
def __repr__(self) -> str:
|
|
363
|
+
return "AccumulatorAnalyticalEngine()"
|