quantark 0.1.0__py3-none-any.whl
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/__init__.py +3 -0
- quantark/_compat.py +150 -0
- quantark/asset/__init__.py +8 -0
- quantark/asset/bond/__init__.py +2 -0
- quantark/asset/bond/engine/__init__.py +44 -0
- quantark/asset/bond/engine/analytical/__init__.py +12 -0
- quantark/asset/bond/engine/analytical/black_engine.py +583 -0
- quantark/asset/bond/engine/analytical/bond_forward_engine.py +390 -0
- quantark/asset/bond/engine/analytical/bond_futures_engine.py +569 -0
- quantark/asset/bond/engine/convertible/__init__.py +12 -0
- quantark/asset/bond/engine/convertible/convertible_bond_engine.py +800 -0
- quantark/asset/bond/engine/discount/__init__.py +10 -0
- quantark/asset/bond/engine/discount/bond_discount_engine.py +517 -0
- quantark/asset/bond/engine/discount/frn_engine.py +913 -0
- quantark/asset/bond/engine/pde/__init__.py +14 -0
- quantark/asset/bond/engine/pde/convertible/__init__.py +21 -0
- quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +603 -0
- quantark/asset/bond/engine/pde/convertible/pde_params.py +59 -0
- quantark/asset/bond/engine/pde/convertible/tf_engine.py +546 -0
- quantark/asset/bond/engine/tree/__init__.py +14 -0
- quantark/asset/bond/engine/tree/convertible/__init__.py +21 -0
- quantark/asset/bond/engine/tree/convertible/binomial_engine.py +488 -0
- quantark/asset/bond/engine/tree/convertible/tree_params.py +72 -0
- quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +1341 -0
- quantark/asset/bond/product/__init__.py +37 -0
- quantark/asset/bond/product/base_bond_product.py +114 -0
- quantark/asset/bond/product/convertible/__init__.py +16 -0
- quantark/asset/bond/product/convertible/convertible_bond.py +595 -0
- quantark/asset/bond/product/couponbond/__init__.py +12 -0
- quantark/asset/bond/product/couponbond/fixed_bond.py +285 -0
- quantark/asset/bond/product/couponbond/frn.py +538 -0
- quantark/asset/bond/product/forward/__init__.py +9 -0
- quantark/asset/bond/product/forward/base_bond_forward.py +92 -0
- quantark/asset/bond/product/forward/bond_forward.py +335 -0
- quantark/asset/bond/product/futures/__init__.py +8 -0
- quantark/asset/bond/product/futures/bond_futures.py +532 -0
- quantark/asset/bond/product/option/__init__.py +9 -0
- quantark/asset/bond/product/option/euro_short_term_bond_option.py +231 -0
- quantark/asset/bond/riskmeasures/__init__.py +13 -0
- quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +484 -0
- quantark/asset/bond/schedule/__init__.py +21 -0
- quantark/asset/bond/schedule/cashflow.py +595 -0
- quantark/asset/equity/__init__.py +11 -0
- quantark/asset/equity/analysis/__init__.py +4 -0
- quantark/asset/equity/analysis/autocallable_path_analyzer.py +257 -0
- quantark/asset/equity/engine/__init__.py +84 -0
- quantark/asset/equity/engine/analytical/__init__.py +37 -0
- quantark/asset/equity/engine/analytical/american_option_engine.py +682 -0
- quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +1102 -0
- quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +455 -0
- quantark/asset/equity/engine/analytical/black_scholes_engine.py +322 -0
- quantark/asset/equity/engine/analytical/deltaone_engine.py +340 -0
- quantark/asset/equity/engine/analytical/digital_option_engine.py +168 -0
- quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +481 -0
- quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +508 -0
- quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +302 -0
- quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +396 -0
- quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +229 -0
- quantark/asset/equity/engine/base_engine.py +137 -0
- quantark/asset/equity/engine/event_stats.py +85 -0
- quantark/asset/equity/engine/mc/__init__.py +31 -0
- quantark/asset/equity/engine/mc/american_option_mc_engine.py +485 -0
- quantark/asset/equity/engine/mc/asian_option_mc_engine.py +678 -0
- quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +726 -0
- quantark/asset/equity/engine/mc/digital_option_mc_engine.py +419 -0
- quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +676 -0
- quantark/asset/equity/engine/mc/euro_mc_engine.py +423 -0
- quantark/asset/equity/engine/mc/phoenix_mc_engine.py +1206 -0
- quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +738 -0
- quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +549 -0
- quantark/asset/equity/engine/mc/snowball_mc_engine.py +2250 -0
- quantark/asset/equity/engine/pde/__init__.py +36 -0
- quantark/asset/equity/engine/pde/american_pde_solver.py +211 -0
- quantark/asset/equity/engine/pde/barrier_pde_solver.py +692 -0
- quantark/asset/equity/engine/pde/base_pde_solver.py +994 -0
- quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +510 -0
- quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +435 -0
- quantark/asset/equity/engine/pde/european_pde_solver.py +170 -0
- quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +477 -0
- quantark/asset/equity/engine/pde/one_touch_pde_solver.py +439 -0
- quantark/asset/equity/engine/pde/phoenix_pde_solver.py +613 -0
- quantark/asset/equity/engine/pde/snowball_pde_solver.py +1810 -0
- quantark/asset/equity/engine/pde/spatial_grid.py +750 -0
- quantark/asset/equity/engine/pde/time_grid.py +308 -0
- quantark/asset/equity/engine/pde_engine.py +238 -0
- quantark/asset/equity/engine/quad/__init__.py +23 -0
- quantark/asset/equity/engine/quad/discrete_quad_engine.py +106 -0
- quantark/asset/equity/engine/quad/european_quad_engine.py +325 -0
- quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +362 -0
- quantark/asset/equity/engine/quad/phoenix_quad_engine.py +614 -0
- quantark/asset/equity/engine/quad/quad_adapters.py +1260 -0
- quantark/asset/equity/engine/quad/quad_core.py +513 -0
- quantark/asset/equity/engine/quad/quad_math.py +219 -0
- quantark/asset/equity/engine/quad/snowball_quad_engine.py +1137 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +117 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +114 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +440 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +269 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +636 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +256 -0
- quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +807 -0
- quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +290 -0
- quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +242 -0
- quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +612 -0
- quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +434 -0
- quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +748 -0
- quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +575 -0
- quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +1101 -0
- quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +349 -0
- quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +270 -0
- quantark/asset/equity/engine/validation/script/quick_mc_compare.py +51 -0
- quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +97 -0
- quantark/asset/equity/param/__init__.py +24 -0
- quantark/asset/equity/param/engine_param_profiles.py +325 -0
- quantark/asset/equity/param/engine_params.py +728 -0
- quantark/asset/equity/process/__init__.py +7 -0
- quantark/asset/equity/process/bsm/__init__.py +7 -0
- quantark/asset/equity/process/bsm/bsm_process.py +108 -0
- quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +401 -0
- quantark/asset/equity/process/bsm/qmc_path_generator.py +694 -0
- quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +163 -0
- quantark/asset/equity/process/bsm/qmc_sobol.py +195 -0
- quantark/asset/equity/process/bsm/qmc_variance_reduction.py +292 -0
- quantark/asset/equity/product/__init__.py +8 -0
- quantark/asset/equity/product/base_equity_product.py +72 -0
- quantark/asset/equity/product/deltaone/__init__.py +22 -0
- quantark/asset/equity/product/deltaone/base_deltaone_product.py +147 -0
- quantark/asset/equity/product/deltaone/futures.py +485 -0
- quantark/asset/equity/product/deltaone/spot_instrument.py +118 -0
- quantark/asset/equity/product/option/__init__.py +104 -0
- quantark/asset/equity/product/option/american_option.py +114 -0
- quantark/asset/equity/product/option/asian_option.py +531 -0
- quantark/asset/equity/product/option/barrier_option.py +289 -0
- quantark/asset/equity/product/option/base_equity_option.py +659 -0
- quantark/asset/equity/product/option/digital_option.py +102 -0
- quantark/asset/equity/product/option/double_barrier_option.py +286 -0
- quantark/asset/equity/product/option/double_one_touch_option.py +310 -0
- quantark/asset/equity/product/option/double_sharkfin_option.py +466 -0
- quantark/asset/equity/product/option/european_vanilla_option.py +103 -0
- quantark/asset/equity/product/option/ko_reset_snowball_option.py +563 -0
- quantark/asset/equity/product/option/observation_schedule.py +530 -0
- quantark/asset/equity/product/option/one_touch_option.py +287 -0
- quantark/asset/equity/product/option/phoenix_config.py +116 -0
- quantark/asset/equity/product/option/phoenix_helpers.py +576 -0
- quantark/asset/equity/product/option/phoenix_option.py +1167 -0
- quantark/asset/equity/product/option/range_accrual_config.py +288 -0
- quantark/asset/equity/product/option/range_accrual_helpers.py +608 -0
- quantark/asset/equity/product/option/range_accrual_option.py +526 -0
- quantark/asset/equity/product/option/single_sharkfin_option.py +420 -0
- quantark/asset/equity/product/option/snowball_config.py +261 -0
- quantark/asset/equity/product/option/snowball_helpers.py +977 -0
- quantark/asset/equity/product/option/snowball_option.py +1242 -0
- quantark/asset/equity/report/__init__.py +15 -0
- quantark/asset/equity/report/autocallable_risk_report.py +2118 -0
- quantark/asset/equity/report/plotting.py +87 -0
- quantark/asset/equity/report/snowball_risk_comparison_report.py +2230 -0
- quantark/asset/equity/report/surfaces.py +123 -0
- quantark/asset/equity/report/term_structure.py +126 -0
- quantark/asset/equity/riskmeasures/__init__.py +7 -0
- quantark/asset/equity/riskmeasures/greeks_calculator.py +1204 -0
- quantark/asset/rate/__init__.py +58 -0
- quantark/asset/rate/engine/__init__.py +25 -0
- quantark/asset/rate/engine/cap_floor_engine.py +514 -0
- quantark/asset/rate/engine/fra_engine.py +286 -0
- quantark/asset/rate/engine/irs_discount_engine.py +891 -0
- quantark/asset/rate/engine/swaption_engine.py +587 -0
- quantark/asset/rate/product/__init__.py +67 -0
- quantark/asset/rate/product/cap_floor.py +550 -0
- quantark/asset/rate/product/fra.py +219 -0
- quantark/asset/rate/product/irs.py +1223 -0
- quantark/asset/rate/product/swaption.py +372 -0
- quantark/backtest/__init__.py +153 -0
- quantark/backtest/base.py +263 -0
- quantark/backtest/dashboard.py +874 -0
- quantark/backtest/equity/__init__.py +35 -0
- quantark/backtest/equity/config.py +118 -0
- quantark/backtest/equity/engine.py +408 -0
- quantark/backtest/equity/hedge_executor.py +374 -0
- quantark/backtest/equity/metrics.py +396 -0
- quantark/backtest/equity/results.py +232 -0
- quantark/backtest/equity/state.py +252 -0
- quantark/backtest/examples/__init__.py +4 -0
- quantark/backtest/examples/advanced_backtest.py +345 -0
- quantark/backtest/examples/basic_delta_hedge.py +246 -0
- quantark/backtest/examples/fi_dv01_hedge.py +267 -0
- quantark/backtest/fi/__init__.py +30 -0
- quantark/backtest/fi/config.py +114 -0
- quantark/backtest/fi/engine.py +378 -0
- quantark/backtest/fi/hedge_executor.py +254 -0
- quantark/backtest/fi/metrics.py +308 -0
- quantark/backtest/fi/results.py +193 -0
- quantark/backtest/fi/state.py +212 -0
- quantark/backtest/logger.py +393 -0
- quantark/backtest/otc/__init__.py +74 -0
- quantark/backtest/otc/_replay.py +637 -0
- quantark/backtest/otc/book_engine.py +587 -0
- quantark/backtest/otc/config.py +175 -0
- quantark/backtest/otc/dashboard.py +1006 -0
- quantark/backtest/otc/engine.py +420 -0
- quantark/backtest/otc/engine_factory.py +138 -0
- quantark/backtest/otc/market.py +216 -0
- quantark/backtest/otc/results.py +107 -0
- quantark/backtest/otc/state.py +166 -0
- quantark/backtest/report_generator.py +608 -0
- quantark/backtest/strategy/__init__.py +28 -0
- quantark/backtest/strategy/base_strategy.py +235 -0
- quantark/backtest/strategy/convexity_neutral_strategy.py +247 -0
- quantark/backtest/strategy/delta_neutral_strategy.py +283 -0
- quantark/backtest/strategy/dv01_neutral_strategy.py +283 -0
- quantark/backtest/transaction_costs.py +485 -0
- quantark/backtest/visualizer.py +1019 -0
- quantark/cashleg/__init__.py +31 -0
- quantark/cashleg/accrual_leg.py +120 -0
- quantark/cashleg/base.py +48 -0
- quantark/cashleg/base_amount.py +60 -0
- quantark/cashleg/deterministic_leg.py +39 -0
- quantark/cashleg/event_distribution.py +262 -0
- quantark/cashleg/fixed_payoff_leg.py +92 -0
- quantark/cashleg/leg_schedule.py +95 -0
- quantark/cashleg/leg_valuator.py +40 -0
- quantark/dynamicscenario/__init__.py +97 -0
- quantark/dynamicscenario/base.py +297 -0
- quantark/dynamicscenario/config.py +122 -0
- quantark/dynamicscenario/engine.py +703 -0
- quantark/dynamicscenario/equity/__init__.py +14 -0
- quantark/dynamicscenario/fi/__init__.py +24 -0
- quantark/dynamicscenario/fi/config.py +149 -0
- quantark/dynamicscenario/fi/engine.py +500 -0
- quantark/dynamicscenario/fi/results.py +503 -0
- quantark/dynamicscenario/path/__init__.py +17 -0
- quantark/dynamicscenario/path/day_path.py +397 -0
- quantark/dynamicscenario/path/fi_path_library.py +488 -0
- quantark/dynamicscenario/path/path_builder.py +726 -0
- quantark/dynamicscenario/path/path_library.py +620 -0
- quantark/dynamicscenario/report/__init__.py +12 -0
- quantark/dynamicscenario/report/dynamic_report.py +1175 -0
- quantark/dynamicscenario/report/visualizer.py +1586 -0
- quantark/dynamicscenario/results/__init__.py +19 -0
- quantark/dynamicscenario/results/dynamic_results.py +579 -0
- quantark/dynamicscenario/results/result_exporter.py +438 -0
- quantark/param/__init__.py +75 -0
- quantark/param/basis/__init__.py +19 -0
- quantark/param/basis/basis_yield.py +301 -0
- quantark/param/div/__init__.py +16 -0
- quantark/param/div/dividend_yield.py +123 -0
- quantark/param/index/__init__.py +52 -0
- quantark/param/index/rate_index.py +568 -0
- quantark/param/quote/__init__.py +7 -0
- quantark/param/quote/spot_quote.py +35 -0
- quantark/param/rrf/__init__.py +22 -0
- quantark/param/rrf/rate_curve.py +436 -0
- quantark/param/vol/__init__.py +6 -0
- quantark/param/vol/vol_surface.py +118 -0
- quantark/portfolio/__init__.py +61 -0
- quantark/portfolio/base.py +203 -0
- quantark/portfolio/equity/__init__.py +17 -0
- quantark/portfolio/equity/portfolio.py +391 -0
- quantark/portfolio/equity/position.py +368 -0
- quantark/portfolio/fi/__init__.py +14 -0
- quantark/portfolio/fi/portfolio.py +424 -0
- quantark/portfolio/fi/position.py +272 -0
- quantark/portfolio/portfolio_snapshot.py +221 -0
- quantark/portfolio/portfolio_storage.py +414 -0
- quantark/priceenv/__init__.py +7 -0
- quantark/priceenv/pricing_environment.py +196 -0
- quantark/rfq/__init__.py +32 -0
- quantark/rfq/builders.py +102 -0
- quantark/rfq/models.py +214 -0
- quantark/rfq/registry.py +611 -0
- quantark/rfq/service.py +237 -0
- quantark/simm/__init__.py +155 -0
- quantark/simm/calibration/__init__.py +206 -0
- quantark/simm/calibration/accessors.py +439 -0
- quantark/simm/calibration/commodity.py +156 -0
- quantark/simm/calibration/credit_non_qualifying.py +79 -0
- quantark/simm/calibration/credit_qualifying.py +130 -0
- quantark/simm/calibration/cross_risk.py +39 -0
- quantark/simm/calibration/equity.py +125 -0
- quantark/simm/calibration/fx.py +92 -0
- quantark/simm/calibration/ir.py +152 -0
- quantark/simm/calibration/version.py +33 -0
- quantark/simm/config.py +186 -0
- quantark/simm/crif/__init__.py +35 -0
- quantark/simm/crif/models.py +230 -0
- quantark/simm/crif/parser.py +585 -0
- quantark/simm/engines/__init__.py +62 -0
- quantark/simm/engines/aggregation/__init__.py +67 -0
- quantark/simm/engines/aggregation/addon.py +141 -0
- quantark/simm/engines/aggregation/bucket_aggregator.py +298 -0
- quantark/simm/engines/aggregation/concentration.py +349 -0
- quantark/simm/engines/aggregation/product_class_aggregator.py +183 -0
- quantark/simm/engines/aggregation/risk_class_aggregator.py +403 -0
- quantark/simm/engines/aggregation/simm_calculator.py +430 -0
- quantark/simm/engines/aggregation/weighted_sensitivity.py +272 -0
- quantark/simm/engines/base.py +231 -0
- quantark/simm/engines/classification/__init__.py +10 -0
- quantark/simm/engines/classification/bucket_mapper.py +347 -0
- quantark/simm/engines/factory.py +137 -0
- quantark/simm/engines/portfolio_adapter.py +336 -0
- quantark/simm/engines/result.py +176 -0
- quantark/simm/engines/risk_class/__init__.py +18 -0
- quantark/simm/engines/risk_class/equity_engine.py +263 -0
- quantark/simm/engines/risk_class/ir_engine.py +264 -0
- quantark/simm/report/__init__.py +17 -0
- quantark/simm/report/crif_export.py +284 -0
- quantark/simm/report/excel_generator.py +401 -0
- quantark/simm/report/html_generator.py +840 -0
- quantark/simm/results/__init__.py +38 -0
- quantark/simm/results/attribution.py +313 -0
- quantark/simm/results/simm_result.py +339 -0
- quantark/simm/results/whatif.py +268 -0
- quantark/simm/sensitivity.py +533 -0
- quantark/simm/taxonomy.py +416 -0
- quantark/stresstest/__init__.py +67 -0
- quantark/stresstest/base.py +116 -0
- quantark/stresstest/config.py +5 -0
- quantark/stresstest/engine.py +5 -0
- quantark/stresstest/equity/__init__.py +17 -0
- quantark/stresstest/equity/config.py +69 -0
- quantark/stresstest/equity/engine.py +272 -0
- quantark/stresstest/equity/report/__init__.py +7 -0
- quantark/stresstest/equity/report/report_generator.py +423 -0
- quantark/stresstest/equity/report/visualizer.py +328 -0
- quantark/stresstest/equity/results.py +145 -0
- quantark/stresstest/fi/__init__.py +15 -0
- quantark/stresstest/fi/config.py +59 -0
- quantark/stresstest/fi/engine.py +213 -0
- quantark/stresstest/fi/metrics.py +60 -0
- quantark/stresstest/fi/results.py +64 -0
- quantark/stresstest/report/__init__.py +12 -0
- quantark/stresstest/report/report_generator.py +5 -0
- quantark/stresstest/report/visualizer.py +5 -0
- quantark/stresstest/results/__init__.py +16 -0
- quantark/stresstest/results/result_aggregator.py +325 -0
- quantark/stresstest/results/result_exporter.py +286 -0
- quantark/stresstest/results/stress_results.py +5 -0
- quantark/stresstest/scenario/__init__.py +13 -0
- quantark/stresstest/scenario/scenario.py +242 -0
- quantark/stresstest/scenario/scenario_builder.py +376 -0
- quantark/stresstest/scenario/scenario_library.py +435 -0
- quantark/stresstest/scenario/scenario_storage.py +224 -0
- quantark/stresstest/stress/__init__.py +13 -0
- quantark/stresstest/stress/stress_applicator.py +590 -0
- quantark/stresstest/stress/stress_types.py +142 -0
- quantark/util/__init__.py +23 -0
- quantark/util/barrier_shift.py +44 -0
- quantark/util/calendar/__init__.py +27 -0
- quantark/util/calendar/business_calendar.py +584 -0
- quantark/util/calendar/day_counter.py +517 -0
- quantark/util/calendar/holidayfile/china.csv +1920 -0
- quantark/util/calendar/holidayfile/china_sse.csv +1462 -0
- quantark/util/enum/__init__.py +81 -0
- quantark/util/enum/bond_enums.py +112 -0
- quantark/util/enum/deltaone_enums.py +16 -0
- quantark/util/enum/engine_enums.py +137 -0
- quantark/util/enum/greeks_enums.py +29 -0
- quantark/util/enum/option_enums.py +221 -0
- quantark/util/exceptions.py +66 -0
- quantark/util/marketdata/__init__.py +39 -0
- quantark/util/marketdata/adapter/base_adapter.py +203 -0
- quantark/util/marketdata/adapter/mock_adapter.py +265 -0
- quantark/util/marketdata/converter.py +289 -0
- quantark/util/marketdata/example_usage.py +314 -0
- quantark/util/marketdata/generator/__init__.py +7 -0
- quantark/util/marketdata/generator/mock_generator.py +466 -0
- quantark/util/marketdata/models.py +358 -0
- quantark/util/marketdata/storage/__init__.py +7 -0
- quantark/util/marketdata/storage/parquet_storage.py +340 -0
- quantark/util/numerical/__init__.py +98 -0
- quantark/util/numerical/comparison.py +219 -0
- quantark/util/numerical/constants.py +98 -0
- quantark/util/numerical/formatting.py +380 -0
- quantark/util/numerical/pnl.py +17 -0
- quantark/util/numerical/safe_math.py +238 -0
- quantark/util/numerical/validation.py +315 -0
- quantark/var/__init__.py +39 -0
- quantark/var/attribution.py +398 -0
- quantark/var/backtest/__init__.py +7 -0
- quantark/var/backtest/var_backtester.py +309 -0
- quantark/var/base.py +63 -0
- quantark/var/config.py +219 -0
- quantark/var/engines/__init__.py +13 -0
- quantark/var/engines/historical.py +925 -0
- quantark/var/engines/monte_carlo.py +870 -0
- quantark/var/engines/parametric.py +1199 -0
- quantark/var/results/__init__.py +16 -0
- quantark/var/results/incremental_var_result.py +131 -0
- quantark/var/results/var_report.py +346 -0
- quantark/var/results/var_result.py +134 -0
- quantark/var/risk_factors/__init__.py +22 -0
- quantark/var/risk_factors/base.py +41 -0
- quantark/var/risk_factors/equity_factors.py +158 -0
- quantark/var/risk_factors/fi_factors.py +99 -0
- quantark-0.1.0.dist-info/METADATA +351 -0
- quantark-0.1.0.dist-info/RECORD +399 -0
- quantark-0.1.0.dist-info/WHEEL +4 -0
- quantark-0.1.0.dist-info/licenses/LICENSE +202 -0
- quantark-0.1.0.dist-info/licenses/NOTICE +2 -0
- quantark_compat.pth +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PDE pricing engines for equity derivatives.
|
|
3
|
+
|
|
4
|
+
This module provides finite difference solvers for pricing various
|
|
5
|
+
option types using the Black-Scholes PDE framework.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .time_grid import TimeGrid
|
|
9
|
+
from .spatial_grid import SpatialGrid
|
|
10
|
+
from .base_pde_solver import BasePDESolver
|
|
11
|
+
from .european_pde_solver import EuropeanPDESolver
|
|
12
|
+
from .american_pde_solver import AmericanPDESolver
|
|
13
|
+
from .barrier_pde_solver import BarrierPDESolver
|
|
14
|
+
from .double_barrier_pde_solver import DoubleBarrierPDESolver
|
|
15
|
+
from .one_touch_pde_solver import OneTouchPDESolver
|
|
16
|
+
from .double_one_touch_pde_solver import DoubleOneTouchPDESolver
|
|
17
|
+
from .snowball_pde_solver import SnowballPDESolver
|
|
18
|
+
from .ko_reset_snowball_pde_solver import KOResetSnowballPDESolver
|
|
19
|
+
from .phoenix_pde_solver import PhoenixPDESolver
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
# Grid utilities
|
|
23
|
+
'TimeGrid',
|
|
24
|
+
'SpatialGrid',
|
|
25
|
+
# Solvers
|
|
26
|
+
'BasePDESolver',
|
|
27
|
+
'EuropeanPDESolver',
|
|
28
|
+
'AmericanPDESolver',
|
|
29
|
+
'BarrierPDESolver',
|
|
30
|
+
'DoubleBarrierPDESolver',
|
|
31
|
+
'OneTouchPDESolver',
|
|
32
|
+
'DoubleOneTouchPDESolver',
|
|
33
|
+
'SnowballPDESolver',
|
|
34
|
+
'KOResetSnowballPDESolver',
|
|
35
|
+
'PhoenixPDESolver',
|
|
36
|
+
]
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PDE solver for American options.
|
|
3
|
+
|
|
4
|
+
Implements the finite difference method with early exercise constraint
|
|
5
|
+
for pricing American calls and puts.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Optional, List
|
|
9
|
+
import numpy as np
|
|
10
|
+
|
|
11
|
+
from quantark.asset.equity.product.base_equity_product import BaseEquityProduct
|
|
12
|
+
from quantark.asset.equity.product.option.american_option import AmericanOption
|
|
13
|
+
from quantark.asset.equity.param import PDEParams
|
|
14
|
+
from quantark.priceenv import PricingEnvironment
|
|
15
|
+
from quantark.util.exceptions import PricingError
|
|
16
|
+
|
|
17
|
+
from .base_pde_solver import BasePDESolver
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AmericanPDESolver(BasePDESolver):
|
|
21
|
+
"""
|
|
22
|
+
PDE solver for American options with early exercise.
|
|
23
|
+
|
|
24
|
+
Uses finite difference method to solve the Black-Scholes PDE,
|
|
25
|
+
with the early exercise constraint applied at each time step:
|
|
26
|
+
V(S, t) >= max(intrinsic_value, continuation_value)
|
|
27
|
+
|
|
28
|
+
Terminal condition:
|
|
29
|
+
Call: max(S - K, 0)
|
|
30
|
+
Put: max(K - S, 0)
|
|
31
|
+
|
|
32
|
+
Boundary conditions (same as European):
|
|
33
|
+
Call: V(0) = 0, V(Smax) ≈ Smax - K*exp(-r*tau)
|
|
34
|
+
Put: V(0) ≈ K, V(Smax) = 0
|
|
35
|
+
|
|
36
|
+
Early exercise constraint:
|
|
37
|
+
At each time step, option value is set to max(intrinsic, continuation)
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(self, params: Optional[PDEParams] = None):
|
|
41
|
+
"""
|
|
42
|
+
Initialize American option PDE solver.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
params: PDE engine configuration parameters
|
|
46
|
+
"""
|
|
47
|
+
super().__init__(params)
|
|
48
|
+
|
|
49
|
+
def price(
|
|
50
|
+
self,
|
|
51
|
+
product: BaseEquityProduct,
|
|
52
|
+
pricing_env: PricingEnvironment
|
|
53
|
+
) -> float:
|
|
54
|
+
"""
|
|
55
|
+
Price an American option using PDE method with early exercise.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
product: American option
|
|
59
|
+
pricing_env: Pricing environment
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
Option price
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
PricingError: If product is not an American option
|
|
66
|
+
"""
|
|
67
|
+
if not isinstance(product, AmericanOption):
|
|
68
|
+
raise PricingError(
|
|
69
|
+
f"AmericanPDESolver only supports AmericanOption, "
|
|
70
|
+
f"got {type(product).__name__}"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return super().price(product, pricing_env)
|
|
74
|
+
|
|
75
|
+
def set_terminal_condition(
|
|
76
|
+
self,
|
|
77
|
+
grid: np.ndarray,
|
|
78
|
+
x_vec: np.ndarray,
|
|
79
|
+
s_vec: np.ndarray,
|
|
80
|
+
product: BaseEquityProduct,
|
|
81
|
+
pricing_env: PricingEnvironment
|
|
82
|
+
) -> None:
|
|
83
|
+
"""
|
|
84
|
+
Set the terminal condition (payoff at maturity).
|
|
85
|
+
|
|
86
|
+
For American options (same as European):
|
|
87
|
+
Call: max(S - K, 0)
|
|
88
|
+
Put: max(K - S, 0)
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
grid: Solution grid [num_x, num_t]
|
|
92
|
+
x_vec: Log-price grid points
|
|
93
|
+
s_vec: Price grid points
|
|
94
|
+
product: American option
|
|
95
|
+
pricing_env: Pricing environment
|
|
96
|
+
"""
|
|
97
|
+
K = product.strike
|
|
98
|
+
|
|
99
|
+
if product.is_call():
|
|
100
|
+
grid[:, -1] = np.maximum(s_vec - K, 0.0)
|
|
101
|
+
else: # put
|
|
102
|
+
grid[:, -1] = np.maximum(K - s_vec, 0.0)
|
|
103
|
+
|
|
104
|
+
def set_boundary_conditions(
|
|
105
|
+
self,
|
|
106
|
+
grid: np.ndarray,
|
|
107
|
+
x_vec: np.ndarray,
|
|
108
|
+
s_vec: np.ndarray,
|
|
109
|
+
t_idx: int,
|
|
110
|
+
tau: float,
|
|
111
|
+
product: BaseEquityProduct,
|
|
112
|
+
pricing_env: PricingEnvironment
|
|
113
|
+
) -> None:
|
|
114
|
+
"""
|
|
115
|
+
Set boundary conditions at spatial edges.
|
|
116
|
+
|
|
117
|
+
For American options:
|
|
118
|
+
Lower boundary (S → 0):
|
|
119
|
+
Call: V → 0
|
|
120
|
+
Put: V → K (immediate exercise value)
|
|
121
|
+
|
|
122
|
+
Upper boundary (S → ∞):
|
|
123
|
+
Call: V → S - K (immediate exercise value)
|
|
124
|
+
Put: V → 0
|
|
125
|
+
|
|
126
|
+
Note: American boundary conditions use intrinsic value
|
|
127
|
+
rather than discounted value since immediate exercise is possible.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
grid: Solution grid [num_x, num_t]
|
|
131
|
+
x_vec: Log-price grid points
|
|
132
|
+
s_vec: Price grid points
|
|
133
|
+
t_idx: Current time index
|
|
134
|
+
tau: Time remaining to maturity
|
|
135
|
+
product: American option
|
|
136
|
+
pricing_env: Pricing environment
|
|
137
|
+
"""
|
|
138
|
+
K = product.strike
|
|
139
|
+
|
|
140
|
+
if product.is_call():
|
|
141
|
+
# Lower boundary: call worth 0 when S = 0
|
|
142
|
+
grid[0, t_idx] = 0.0
|
|
143
|
+
# Upper boundary: call worth at least intrinsic value
|
|
144
|
+
grid[-1, t_idx] = max(s_vec[-1] - K, 0.0)
|
|
145
|
+
else: # put
|
|
146
|
+
# Lower boundary: put worth K when S = 0 (immediate exercise)
|
|
147
|
+
grid[0, t_idx] = K
|
|
148
|
+
# Upper boundary: put worth 0 when S is very large
|
|
149
|
+
grid[-1, t_idx] = 0.0
|
|
150
|
+
|
|
151
|
+
def _apply_step_modifications(
|
|
152
|
+
self,
|
|
153
|
+
grid: np.ndarray,
|
|
154
|
+
x_vec: np.ndarray,
|
|
155
|
+
s_vec: np.ndarray,
|
|
156
|
+
t_idx: int,
|
|
157
|
+
tau: float,
|
|
158
|
+
product: BaseEquityProduct,
|
|
159
|
+
pricing_env: PricingEnvironment
|
|
160
|
+
) -> None:
|
|
161
|
+
"""
|
|
162
|
+
Apply early exercise constraint after each time step.
|
|
163
|
+
|
|
164
|
+
At each grid point, the option value must be at least
|
|
165
|
+
the intrinsic value (what you get by exercising now).
|
|
166
|
+
|
|
167
|
+
V(S, t) = max(continuation_value, intrinsic_value)
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
grid: Solution grid
|
|
171
|
+
x_vec: Log-price grid points
|
|
172
|
+
s_vec: Price grid points
|
|
173
|
+
t_idx: Current time index
|
|
174
|
+
tau: Time remaining to maturity
|
|
175
|
+
product: American option
|
|
176
|
+
pricing_env: Pricing environment
|
|
177
|
+
"""
|
|
178
|
+
K = product.strike
|
|
179
|
+
|
|
180
|
+
# Calculate intrinsic value at all grid points
|
|
181
|
+
if product.is_call():
|
|
182
|
+
intrinsic = np.maximum(s_vec - K, 0.0)
|
|
183
|
+
else: # put
|
|
184
|
+
intrinsic = np.maximum(K - s_vec, 0.0)
|
|
185
|
+
|
|
186
|
+
# Apply early exercise constraint
|
|
187
|
+
grid[:, t_idx] = np.maximum(grid[:, t_idx], intrinsic)
|
|
188
|
+
|
|
189
|
+
def get_critical_points(
|
|
190
|
+
self,
|
|
191
|
+
product: BaseEquityProduct,
|
|
192
|
+
pricing_env: PricingEnvironment
|
|
193
|
+
) -> List[float]:
|
|
194
|
+
"""
|
|
195
|
+
Get critical prices for grid concentration.
|
|
196
|
+
|
|
197
|
+
For American options, the strike is the critical point.
|
|
198
|
+
The early exercise boundary is also important but varies with time.
|
|
199
|
+
|
|
200
|
+
Args:
|
|
201
|
+
product: American option
|
|
202
|
+
pricing_env: Pricing environment
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
List containing the strike price
|
|
206
|
+
"""
|
|
207
|
+
return [product.strike]
|
|
208
|
+
|
|
209
|
+
def __repr__(self):
|
|
210
|
+
return "AmericanPDESolver()"
|
|
211
|
+
|