optPricing 2.2.0__tar.gz → 2.3.2__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.
Files changed (543) hide show
  1. optpricing-2.3.2/.coveragerc +4 -0
  2. {optpricing-2.2.0 → optpricing-2.3.2}/.github/ISSUE_TEMPLATE/bug_report.md +5 -9
  3. optpricing-2.3.2/.github/workflows/ci.yml +45 -0
  4. optpricing-2.3.2/.github/workflows/pages.yml +54 -0
  5. {optpricing-2.2.0 → optpricing-2.3.2}/.gitignore +4 -2
  6. {optpricing-2.2.0 → optpricing-2.3.2}/CHANGELOG.md +2 -1
  7. optpricing-2.3.2/PKG-INFO +216 -0
  8. optpricing-2.3.2/README.md +168 -0
  9. optpricing-2.3.2/artifacts/backtest_logs/SPY_backtest_2025-07-07.csv +6 -0
  10. optpricing-2.3.2/artifacts/backtest_logs/SPY_backtest_2025-07-09.csv +8 -0
  11. optpricing-2.3.2/artifacts/calibrated_params/SPY_BSM_2025-07-03.json +8 -0
  12. optpricing-2.3.2/artifacts/calibrated_params/SPY_BSM_2025-07-07.json +8 -0
  13. optpricing-2.3.2/artifacts/calibrated_params/SPY_BSM_2025-07-08.json +8 -0
  14. optpricing-2.3.2/artifacts/calibrated_params/SPY_BSM_2025-07-09.json +8 -0
  15. optpricing-2.3.2/artifacts/calibrated_params/SPY_Merton_2025-07-03.json +11 -0
  16. optpricing-2.3.2/artifacts/calibrated_params/SPY_Merton_2025-07-07.json +11 -0
  17. optpricing-2.3.2/artifacts/calibrated_params/SPY_Merton_2025-07-08.json +11 -0
  18. optpricing-2.3.2/artifacts/calibrated_params/SPY_Merton_2025-07-09.json +11 -0
  19. optpricing-2.3.2/codecov.yml +7 -0
  20. {optpricing-2.2.0 → optpricing-2.3.2}/config.yaml +1 -1
  21. optpricing-2.3.2/data/market_data_snapshots/AAPL_2025-07-07.parquet +0 -0
  22. optpricing-2.3.2/data/market_data_snapshots/AAPL_2025-07-08.parquet +0 -0
  23. optpricing-2.3.2/data/market_data_snapshots/AAPL_2025-07-09.parquet +0 -0
  24. optpricing-2.3.2/data/market_data_snapshots/AMC_2025-07-07.parquet +0 -0
  25. optpricing-2.3.2/data/market_data_snapshots/AMC_2025-07-08.parquet +0 -0
  26. optpricing-2.3.2/data/market_data_snapshots/AMC_2025-07-09.parquet +0 -0
  27. optpricing-2.3.2/data/market_data_snapshots/AMD_2025-07-07.parquet +0 -0
  28. optpricing-2.3.2/data/market_data_snapshots/AMD_2025-07-08.parquet +0 -0
  29. optpricing-2.3.2/data/market_data_snapshots/AMD_2025-07-09.parquet +0 -0
  30. optpricing-2.3.2/data/market_data_snapshots/AMZN_2025-07-07.parquet +0 -0
  31. optpricing-2.3.2/data/market_data_snapshots/AMZN_2025-07-08.parquet +0 -0
  32. optpricing-2.3.2/data/market_data_snapshots/AMZN_2025-07-09.parquet +0 -0
  33. optpricing-2.3.2/data/market_data_snapshots/BAC_2025-07-07.parquet +0 -0
  34. optpricing-2.3.2/data/market_data_snapshots/BAC_2025-07-08.parquet +0 -0
  35. optpricing-2.3.2/data/market_data_snapshots/BAC_2025-07-09.parquet +0 -0
  36. optpricing-2.3.2/data/market_data_snapshots/BA_2025-07-07.parquet +0 -0
  37. optpricing-2.3.2/data/market_data_snapshots/BA_2025-07-08.parquet +0 -0
  38. optpricing-2.3.2/data/market_data_snapshots/BA_2025-07-09.parquet +0 -0
  39. optpricing-2.3.2/data/market_data_snapshots/CAT_2025-07-07.parquet +0 -0
  40. optpricing-2.3.2/data/market_data_snapshots/CAT_2025-07-08.parquet +0 -0
  41. optpricing-2.3.2/data/market_data_snapshots/CAT_2025-07-09.parquet +0 -0
  42. optpricing-2.3.2/data/market_data_snapshots/CVX_2025-07-07.parquet +0 -0
  43. optpricing-2.3.2/data/market_data_snapshots/CVX_2025-07-08.parquet +0 -0
  44. optpricing-2.3.2/data/market_data_snapshots/CVX_2025-07-09.parquet +0 -0
  45. optpricing-2.3.2/data/market_data_snapshots/GME_2025-07-07.parquet +0 -0
  46. optpricing-2.3.2/data/market_data_snapshots/GME_2025-07-08.parquet +0 -0
  47. optpricing-2.3.2/data/market_data_snapshots/GME_2025-07-09.parquet +0 -0
  48. optpricing-2.3.2/data/market_data_snapshots/GOOGL_2025-07-07.parquet +0 -0
  49. optpricing-2.3.2/data/market_data_snapshots/GOOGL_2025-07-08.parquet +0 -0
  50. optpricing-2.3.2/data/market_data_snapshots/GOOGL_2025-07-09.parquet +0 -0
  51. optpricing-2.3.2/data/market_data_snapshots/GS_2025-07-07.parquet +0 -0
  52. optpricing-2.3.2/data/market_data_snapshots/GS_2025-07-08.parquet +0 -0
  53. optpricing-2.3.2/data/market_data_snapshots/GS_2025-07-09.parquet +0 -0
  54. optpricing-2.3.2/data/market_data_snapshots/HD_2025-07-07.parquet +0 -0
  55. optpricing-2.3.2/data/market_data_snapshots/HD_2025-07-08.parquet +0 -0
  56. optpricing-2.3.2/data/market_data_snapshots/HD_2025-07-09.parquet +0 -0
  57. optpricing-2.3.2/data/market_data_snapshots/JNJ_2025-07-07.parquet +0 -0
  58. optpricing-2.3.2/data/market_data_snapshots/JNJ_2025-07-08.parquet +0 -0
  59. optpricing-2.3.2/data/market_data_snapshots/JNJ_2025-07-09.parquet +0 -0
  60. optpricing-2.3.2/data/market_data_snapshots/JPM_2025-07-07.parquet +0 -0
  61. optpricing-2.3.2/data/market_data_snapshots/JPM_2025-07-08.parquet +0 -0
  62. optpricing-2.3.2/data/market_data_snapshots/JPM_2025-07-09.parquet +0 -0
  63. optpricing-2.3.2/data/market_data_snapshots/META_2025-07-07.parquet +0 -0
  64. optpricing-2.3.2/data/market_data_snapshots/META_2025-07-08.parquet +0 -0
  65. optpricing-2.3.2/data/market_data_snapshots/META_2025-07-09.parquet +0 -0
  66. optpricing-2.3.2/data/market_data_snapshots/MSFT_2025-07-07.parquet +0 -0
  67. optpricing-2.3.2/data/market_data_snapshots/MSFT_2025-07-08.parquet +0 -0
  68. optpricing-2.3.2/data/market_data_snapshots/MSFT_2025-07-09.parquet +0 -0
  69. optpricing-2.3.2/data/market_data_snapshots/NKE_2025-07-07.parquet +0 -0
  70. optpricing-2.3.2/data/market_data_snapshots/NKE_2025-07-08.parquet +0 -0
  71. optpricing-2.3.2/data/market_data_snapshots/NKE_2025-07-09.parquet +0 -0
  72. optpricing-2.3.2/data/market_data_snapshots/NVDA_2025-07-07.parquet +0 -0
  73. optpricing-2.3.2/data/market_data_snapshots/NVDA_2025-07-08.parquet +0 -0
  74. optpricing-2.3.2/data/market_data_snapshots/NVDA_2025-07-09.parquet +0 -0
  75. optpricing-2.3.2/data/market_data_snapshots/PFE_2025-07-07.parquet +0 -0
  76. optpricing-2.3.2/data/market_data_snapshots/PFE_2025-07-08.parquet +0 -0
  77. optpricing-2.3.2/data/market_data_snapshots/PFE_2025-07-09.parquet +0 -0
  78. optpricing-2.3.2/data/market_data_snapshots/QQQ_2025-07-07.parquet +0 -0
  79. optpricing-2.3.2/data/market_data_snapshots/QQQ_2025-07-08.parquet +0 -0
  80. optpricing-2.3.2/data/market_data_snapshots/QQQ_2025-07-09.parquet +0 -0
  81. optpricing-2.3.2/data/market_data_snapshots/SPY_2025-07-07.parquet +0 -0
  82. optpricing-2.3.2/data/market_data_snapshots/SPY_2025-07-08.parquet +0 -0
  83. optpricing-2.3.2/data/market_data_snapshots/SPY_2025-07-09.parquet +0 -0
  84. optpricing-2.3.2/data/market_data_snapshots/TSLA_2025-07-07.parquet +0 -0
  85. optpricing-2.3.2/data/market_data_snapshots/TSLA_2025-07-08.parquet +0 -0
  86. optpricing-2.3.2/data/market_data_snapshots/TSLA_2025-07-09.parquet +0 -0
  87. optpricing-2.3.2/data/market_data_snapshots/UNH_2025-07-07.parquet +0 -0
  88. optpricing-2.3.2/data/market_data_snapshots/UNH_2025-07-08.parquet +0 -0
  89. optpricing-2.3.2/data/market_data_snapshots/UNH_2025-07-09.parquet +0 -0
  90. optpricing-2.3.2/data/market_data_snapshots/WMT_2025-07-07.parquet +0 -0
  91. optpricing-2.3.2/data/market_data_snapshots/WMT_2025-07-08.parquet +0 -0
  92. optpricing-2.3.2/data/market_data_snapshots/WMT_2025-07-09.parquet +0 -0
  93. optpricing-2.3.2/data/market_data_snapshots/XOM_2025-07-07.parquet +0 -0
  94. optpricing-2.3.2/data/market_data_snapshots/XOM_2025-07-08.parquet +0 -0
  95. optpricing-2.3.2/data/market_data_snapshots/XOM_2025-07-09.parquet +0 -0
  96. optpricing-2.3.2/docs/guide/API.md +127 -0
  97. optpricing-2.3.2/docs/guide/CLI.md +150 -0
  98. optpricing-2.3.2/docs/guide/dashboard.md +53 -0
  99. optpricing-2.3.2/docs/guide/examples.md +66 -0
  100. optpricing-2.3.2/docs/guide/getting_started.md +133 -0
  101. optpricing-2.3.2/docs/guide/installation.md +61 -0
  102. optpricing-2.3.2/docs/guide/introduction.md +23 -0
  103. optpricing-2.3.2/docs/index.md +45 -0
  104. optpricing-2.3.2/docs/reference/atoms/index.md +7 -0
  105. optpricing-2.3.2/docs/reference/calibration/index.md +7 -0
  106. optpricing-2.3.2/docs/reference/cli/index.md +8 -0
  107. optpricing-2.3.2/docs/reference/dashboard/index.md +6 -0
  108. optpricing-2.3.2/docs/reference/data/index.md +6 -0
  109. optpricing-2.3.2/docs/reference/index.md +77 -0
  110. optpricing-2.3.2/docs/reference/models/index.md +9 -0
  111. optpricing-2.3.2/docs/reference/parity/index.md +5 -0
  112. optpricing-2.3.2/docs/reference/techniques/index.md +6 -0
  113. optpricing-2.3.2/docs/reference/workflows/index.md +6 -0
  114. optpricing-2.2.0/examples/demo_american.py → optpricing-2.3.2/examples/american_options_benchmark.py +38 -22
  115. optpricing-2.2.0/demo.py → optpricing-2.3.2/examples/european_options_benchmark.py +8 -41
  116. optpricing-2.2.0/examples/demo_general.py → optpricing-2.3.2/examples/getting_started.py +5 -3
  117. optpricing-2.3.2/examples/rate_models_benchmark.py +55 -0
  118. optpricing-2.3.2/mkdocs.yml +87 -0
  119. {optpricing-2.2.0 → optpricing-2.3.2}/pyproject.toml +4 -4
  120. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/__init__.py +5 -2
  121. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/atoms/rate.py +2 -2
  122. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/__init__.py +4 -1
  123. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/calibrator.py +13 -19
  124. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/iv_surface.py +15 -20
  125. optpricing-2.3.2/src/optpricing/calibration/vectorized_pricer.py +88 -0
  126. optpricing-2.3.2/src/optpricing/cli/__init__.py +10 -0
  127. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/commands/calibrate.py +11 -3
  128. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/commands/dashboard.py +1 -1
  129. optpricing-2.3.2/src/optpricing/cli/commands/demo.py +89 -0
  130. optpricing-2.3.2/src/optpricing/cli/commands/price.py +237 -0
  131. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/main.py +3 -9
  132. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/config.py +5 -0
  133. optpricing-2.3.2/src/optpricing/dashboard/Home.py +59 -0
  134. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/dashboard/__init__.py +1 -3
  135. optpricing-2.3.2/src/optpricing/dashboard/pages/1_Pricer_and_Greeks.py +251 -0
  136. optpricing-2.3.2/src/optpricing/dashboard/pages/2_Calibration_and_IV.py +99 -0
  137. optpricing-2.3.2/src/optpricing/dashboard/pages/3_Market_Analytics.py +153 -0
  138. optpricing-2.3.2/src/optpricing/dashboard/pages/4_Model_Fitting.py +85 -0
  139. optpricing-2.3.2/src/optpricing/dashboard/pages/5_Term_Structure.py +63 -0
  140. optpricing-2.3.2/src/optpricing/dashboard/plots.py +235 -0
  141. optpricing-2.3.2/src/optpricing/dashboard/service.py +103 -0
  142. optpricing-2.3.2/src/optpricing/dashboard/widgets.py +93 -0
  143. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/data/historical_manager.py +4 -0
  144. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/data/market_data_manager.py +5 -0
  145. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/__init__.py +1 -1
  146. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/base/__init__.py +1 -0
  147. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/blacks_approx.py +1 -0
  148. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/cgmy.py +3 -3
  149. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/dupire_local.py +5 -1
  150. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/heston.py +4 -4
  151. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/hyperbolic.py +2 -4
  152. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/kou.py +1 -1
  153. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/nig.py +3 -3
  154. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/vg.py +2 -2
  155. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/parity/implied_rate.py +3 -3
  156. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/parity/parity_model.py +1 -1
  157. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/greek_mixin.py +1 -1
  158. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/lattice_technique.py +4 -0
  159. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/closed_form.py +1 -1
  160. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/kernels/__init__.py +25 -1
  161. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/kernels/path_kernels.py +0 -3
  162. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/monte_carlo.py +3 -3
  163. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/bsm_config.py +4 -0
  164. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/heston_config.py +4 -0
  165. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/kou_config.py +4 -0
  166. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/merton_config.py +5 -1
  167. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/nig_config.py +4 -0
  168. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/sabr_jump_config.py +0 -2
  169. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/vg_config.py +5 -1
  170. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/daily_workflow.py +51 -36
  171. optpricing-2.3.2/src/optpricing.egg-info/PKG-INFO +216 -0
  172. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing.egg-info/SOURCES.txt +105 -74
  173. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing.egg-info/requires.txt +1 -0
  174. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_calibrator.py +2 -2
  175. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_fit_jump_parameters.py +1 -1
  176. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_fit_market_params.py +0 -1
  177. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_iv_surface.py +6 -23
  178. optpricing-2.3.2/tests/calibration/test_vectorized_pricer.py +75 -0
  179. {optpricing-2.2.0 → optpricing-2.3.2}/tests/cli/commands/test_price.py +1 -1
  180. {optpricing-2.2.0 → optpricing-2.3.2}/tests/cli/test_main.py +1 -1
  181. optpricing-2.3.2/tests/dashboard/test_plots.py +159 -0
  182. optpricing-2.3.2/tests/dashboard/test_service.py +114 -0
  183. optpricing-2.3.2/tests/dashboard/test_widgets.py +179 -0
  184. {optpricing-2.2.0 → optpricing-2.3.2}/tests/data/test_historical_manager.py +1 -7
  185. optpricing-2.3.2/tests/data/test_market_data_manager.py +193 -0
  186. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_bates.py +3 -1
  187. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_blacks_approx.py +9 -3
  188. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_bsm.py +3 -1
  189. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_cev.py +3 -1
  190. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_cgmy.py +3 -1
  191. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_cir.py +3 -1
  192. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_heston.py +3 -1
  193. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_hyperbolic.py +3 -1
  194. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_kou.py +3 -1
  195. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_merton_jump.py +3 -1
  196. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_nig.py +3 -1
  197. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_perpetual_put.py +3 -1
  198. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_sabr.py +3 -1
  199. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_vasicek.py +3 -1
  200. optpricing-2.3.2/tests/techniques/base/test_greek_mixin.py +158 -0
  201. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/base/test_iv_mixin.py +0 -3
  202. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/kernels/test_lattice_kernels.py +0 -1
  203. optpricing-2.3.2/tests/techniques/kernels/test_mc_kernels.py +484 -0
  204. optpricing-2.3.2/tests/techniques/kernels/test_path_kernels.py +287 -0
  205. optpricing-2.3.2/tests/techniques/test_closed_form.py +172 -0
  206. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_monte_carlo.py +29 -5
  207. optpricing-2.2.0/.github/workflows/ci.yml +0 -80
  208. optpricing-2.2.0/Makefile +0 -23
  209. optpricing-2.2.0/PKG-INFO +0 -105
  210. optpricing-2.2.0/README.md +0 -58
  211. optpricing-2.2.0/docs/guide/dashboard.md +0 -45
  212. optpricing-2.2.0/docs/guide/getting_started.md +0 -218
  213. optpricing-2.2.0/docs/guide/installation.md +0 -33
  214. optpricing-2.2.0/docs/guide/introduction.md +0 -35
  215. optpricing-2.2.0/docs/index.md +0 -19
  216. optpricing-2.2.0/docs/reference/atoms/bond.md +0 -3
  217. optpricing-2.2.0/docs/reference/atoms/index.md +0 -8
  218. optpricing-2.2.0/docs/reference/atoms/option.md +0 -11
  219. optpricing-2.2.0/docs/reference/atoms/rate.md +0 -3
  220. optpricing-2.2.0/docs/reference/atoms/stock.md +0 -3
  221. optpricing-2.2.0/docs/reference/calibration/calibrator.md +0 -3
  222. optpricing-2.2.0/docs/reference/calibration/fit_jump_parameters.md +0 -3
  223. optpricing-2.2.0/docs/reference/calibration/fit_market_params.md +0 -11
  224. optpricing-2.2.0/docs/reference/calibration/index.md +0 -9
  225. optpricing-2.2.0/docs/reference/calibration/iv_surface.md +0 -3
  226. optpricing-2.2.0/docs/reference/calibration/technique_selector.md +0 -3
  227. optpricing-2.2.0/docs/reference/calibration/vectorized_bsm_iv.md +0 -3
  228. optpricing-2.2.0/docs/reference/calibration/vectorized_integration_iv.md +0 -3
  229. optpricing-2.2.0/docs/reference/cli/backtest.md +0 -5
  230. optpricing-2.2.0/docs/reference/cli/calibrate.md +0 -5
  231. optpricing-2.2.0/docs/reference/cli/data.md +0 -5
  232. optpricing-2.2.0/docs/reference/cli/index.md +0 -17
  233. optpricing-2.2.0/docs/reference/cli/price.md +0 -5
  234. optpricing-2.2.0/docs/reference/cli/tools.md +0 -5
  235. optpricing-2.2.0/docs/reference/dashboard/index.md +0 -7
  236. optpricing-2.2.0/docs/reference/dashboard/plots.md +0 -11
  237. optpricing-2.2.0/docs/reference/dashboard/service.md +0 -5
  238. optpricing-2.2.0/docs/reference/dashboard/widgets.md +0 -7
  239. optpricing-2.2.0/docs/reference/data/historical_manager.md +0 -3
  240. optpricing-2.2.0/docs/reference/data/index.md +0 -6
  241. optpricing-2.2.0/docs/reference/data/market_data_manager.md +0 -3
  242. optpricing-2.2.0/docs/reference/models/base/base_model.md +0 -3
  243. optpricing-2.2.0/docs/reference/models/base/index.md +0 -6
  244. optpricing-2.2.0/docs/reference/models/base/validators.md +0 -3
  245. optpricing-2.2.0/docs/reference/models/bates.md +0 -3
  246. optpricing-2.2.0/docs/reference/models/blacks_approx.md +0 -3
  247. optpricing-2.2.0/docs/reference/models/bsm.md +0 -3
  248. optpricing-2.2.0/docs/reference/models/cev.md +0 -3
  249. optpricing-2.2.0/docs/reference/models/cgmy.md +0 -3
  250. optpricing-2.2.0/docs/reference/models/cir.md +0 -3
  251. optpricing-2.2.0/docs/reference/models/dupire_local.md +0 -3
  252. optpricing-2.2.0/docs/reference/models/heston.md +0 -3
  253. optpricing-2.2.0/docs/reference/models/hyperbolic.md +0 -3
  254. optpricing-2.2.0/docs/reference/models/index.md +0 -12
  255. optpricing-2.2.0/docs/reference/models/kou.md +0 -3
  256. optpricing-2.2.0/docs/reference/models/merton_jump.md +0 -3
  257. optpricing-2.2.0/docs/reference/models/nig.md +0 -3
  258. optpricing-2.2.0/docs/reference/models/perpetual_put.md +0 -3
  259. optpricing-2.2.0/docs/reference/models/sabr.md +0 -3
  260. optpricing-2.2.0/docs/reference/models/sabr_jump.md +0 -3
  261. optpricing-2.2.0/docs/reference/models/vasicek.md +0 -3
  262. optpricing-2.2.0/docs/reference/models/vg.md +0 -3
  263. optpricing-2.2.0/docs/reference/parity/implied_rate.md +0 -3
  264. optpricing-2.2.0/docs/reference/parity/index.md +0 -6
  265. optpricing-2.2.0/docs/reference/parity/parity_model.md +0 -3
  266. optpricing-2.2.0/docs/reference/techniques/american_monte_carlo.md +0 -3
  267. optpricing-2.2.0/docs/reference/techniques/base/base_technique.md +0 -3
  268. optpricing-2.2.0/docs/reference/techniques/base/greek_mixin.md +0 -3
  269. optpricing-2.2.0/docs/reference/techniques/base/index.md +0 -10
  270. optpricing-2.2.0/docs/reference/techniques/base/iv_mixin.md +0 -3
  271. optpricing-2.2.0/docs/reference/techniques/base/lattice_technique.md +0 -3
  272. optpricing-2.2.0/docs/reference/techniques/base/pricing_result.md +0 -3
  273. optpricing-2.2.0/docs/reference/techniques/base/random_utils.md +0 -3
  274. optpricing-2.2.0/docs/reference/techniques/closed_form.md +0 -3
  275. optpricing-2.2.0/docs/reference/techniques/crr.md +0 -3
  276. optpricing-2.2.0/docs/reference/techniques/fft.md +0 -3
  277. optpricing-2.2.0/docs/reference/techniques/index.md +0 -13
  278. optpricing-2.2.0/docs/reference/techniques/integration.md +0 -3
  279. optpricing-2.2.0/docs/reference/techniques/kernels/american_mc_kernels.md +0 -5
  280. optpricing-2.2.0/docs/reference/techniques/kernels/index.md +0 -6
  281. optpricing-2.2.0/docs/reference/techniques/kernels/lattice_kernels.md +0 -5
  282. optpricing-2.2.0/docs/reference/techniques/kernels/mc_kernels.md +0 -5
  283. optpricing-2.2.0/docs/reference/techniques/leisen_reimer.md +0 -3
  284. optpricing-2.2.0/docs/reference/techniques/monte_carlo.md +0 -3
  285. optpricing-2.2.0/docs/reference/techniques/pde.md +0 -3
  286. optpricing-2.2.0/docs/reference/techniques/topm.md +0 -3
  287. optpricing-2.2.0/docs/reference/workflows/backtest_workflow.md +0 -3
  288. optpricing-2.2.0/docs/reference/workflows/daily_workflow.md +0 -3
  289. optpricing-2.2.0/docs/reference/workflows/index.md +0 -10
  290. optpricing-2.2.0/examples/project_tree.py +0 -39
  291. optpricing-2.2.0/mkdocs.yml +0 -156
  292. optpricing-2.2.0/src/optpricing/cli/__init__.py +0 -10
  293. optpricing-2.2.0/src/optpricing/cli/commands/demo.py +0 -53
  294. optpricing-2.2.0/src/optpricing/cli/commands/price.py +0 -165
  295. optpricing-2.2.0/src/optpricing/dashboard/app.py +0 -26
  296. optpricing-2.2.0/src/optpricing/dashboard/pages/1_Calibration.py +0 -76
  297. optpricing-2.2.0/src/optpricing/dashboard/pages/2_Pricer_and_Greeks.py +0 -260
  298. optpricing-2.2.0/src/optpricing/dashboard/pages/3_Financial_Tools.py +0 -267
  299. optpricing-2.2.0/src/optpricing/dashboard/plots.py +0 -157
  300. optpricing-2.2.0/src/optpricing/dashboard/service.py +0 -176
  301. optpricing-2.2.0/src/optpricing/dashboard/widgets.py +0 -87
  302. optpricing-2.2.0/src/optpricing.egg-info/PKG-INFO +0 -105
  303. optpricing-2.2.0/tests/dashboard/test_plots.py +0 -50
  304. optpricing-2.2.0/tests/dashboard/test_service.py +0 -177
  305. optpricing-2.2.0/tests/data/test_market_data_manager.py +0 -70
  306. optpricing-2.2.0/tests/techniques/base/test_greek_mixin.py +0 -63
  307. optpricing-2.2.0/tests/techniques/kernels/test_mc_kernels.py +0 -146
  308. optpricing-2.2.0/tests/techniques/kernels/test_path_kernels.py +0 -149
  309. optpricing-2.2.0/tests/techniques/test_closed_form.py +0 -83
  310. {optpricing-2.2.0 → optpricing-2.3.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  311. {optpricing-2.2.0 → optpricing-2.3.2}/.github/workflows/publish.yml +0 -0
  312. {optpricing-2.2.0 → optpricing-2.3.2}/.pre-commit-config.yaml +0 -0
  313. {optpricing-2.2.0 → optpricing-2.3.2}/CODE_OF_CONDUCT.md +0 -0
  314. {optpricing-2.2.0 → optpricing-2.3.2}/CONTRIBUTING.md +0 -0
  315. {optpricing-2.2.0 → optpricing-2.3.2}/LICENSE +0 -0
  316. {optpricing-2.2.0 → optpricing-2.3.2}/MANIFEST.in +0 -0
  317. {optpricing-2.2.0 → optpricing-2.3.2}/PULL_REQUEST_TEMPLATE.md +0 -0
  318. {optpricing-2.2.0 → optpricing-2.3.2}/SECURITY.md +0 -0
  319. {optpricing-2.2.0 → optpricing-2.3.2}/artifacts/backtest_logs/SPY_backtest_2025-06-17.csv +0 -0
  320. {optpricing-2.2.0 → optpricing-2.3.2}/artifacts/calibrated_params/SPY_BSM_2023-01-01.json +0 -0
  321. {optpricing-2.2.0 → optpricing-2.3.2}/artifacts/calibrated_params/SPY_BSM_2025-06-17.json +0 -0
  322. {optpricing-2.2.0 → optpricing-2.3.2}/artifacts/calibrated_params/SPY_Black-Scholes_2025-06-17.json +0 -0
  323. {optpricing-2.2.0 → optpricing-2.3.2}/artifacts/calibrated_params/SPY_Merton_2025-06-17.json +0 -0
  324. {optpricing-2.2.0 → optpricing-2.3.2}/artifacts/calibration_logs/SPY_evaluation_2025-06-16.csv +0 -0
  325. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/AAPL_10y_returns.parquet +0 -0
  326. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/AMC_10y_returns.parquet +0 -0
  327. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/AMD_10y_returns.parquet +0 -0
  328. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/AMZN_10y_returns.parquet +0 -0
  329. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/BAC_10y_returns.parquet +0 -0
  330. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/BA_10y_returns.parquet +0 -0
  331. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/CAT_10y_returns.parquet +0 -0
  332. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/CVX_10y_returns.parquet +0 -0
  333. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/GME_10y_returns.parquet +0 -0
  334. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/GOOGL_10y_returns.parquet +0 -0
  335. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/GS_10y_returns.parquet +0 -0
  336. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/HD_10y_returns.parquet +0 -0
  337. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/JNJ_10y_returns.parquet +0 -0
  338. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/JPM_10y_returns.parquet +0 -0
  339. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/META_10y_returns.parquet +0 -0
  340. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/MSFT_10y_returns.parquet +0 -0
  341. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/NKE_10y_returns.parquet +0 -0
  342. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/NVDA_10y_returns.parquet +0 -0
  343. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/PFE_10y_returns.parquet +0 -0
  344. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/QQQ_10y_returns.parquet +0 -0
  345. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/SPY_10y_returns.parquet +0 -0
  346. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/SPY_5y_returns.parquet +0 -0
  347. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/TSLA_10y_returns.parquet +0 -0
  348. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/UNH_10y_returns.parquet +0 -0
  349. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/WMT_10y_returns.parquet +0 -0
  350. {optpricing-2.2.0 → optpricing-2.3.2}/data/historical_data/XOM_10y_returns.parquet +0 -0
  351. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AAPL_2025-06-16.parquet +0 -0
  352. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AAPL_2025-06-17.parquet +0 -0
  353. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AAPL_2025-06-26.parquet +0 -0
  354. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AAPL_2025-07-02.parquet +0 -0
  355. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AAPL_2025-07-03.parquet +0 -0
  356. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMC_2025-06-17.parquet +0 -0
  357. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMC_2025-06-26.parquet +0 -0
  358. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMC_2025-07-02.parquet +0 -0
  359. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMC_2025-07-03.parquet +0 -0
  360. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMD_2025-06-17.parquet +0 -0
  361. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMD_2025-06-26.parquet +0 -0
  362. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMD_2025-07-02.parquet +0 -0
  363. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMD_2025-07-03.parquet +0 -0
  364. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMZN_2025-06-17.parquet +0 -0
  365. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMZN_2025-06-26.parquet +0 -0
  366. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMZN_2025-07-02.parquet +0 -0
  367. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/AMZN_2025-07-03.parquet +0 -0
  368. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BAC_2025-06-17.parquet +0 -0
  369. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BAC_2025-06-26.parquet +0 -0
  370. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BAC_2025-07-02.parquet +0 -0
  371. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BAC_2025-07-03.parquet +0 -0
  372. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BA_2025-06-17.parquet +0 -0
  373. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BA_2025-06-26.parquet +0 -0
  374. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BA_2025-07-02.parquet +0 -0
  375. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/BA_2025-07-03.parquet +0 -0
  376. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CAT_2025-06-17.parquet +0 -0
  377. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CAT_2025-06-26.parquet +0 -0
  378. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CAT_2025-07-02.parquet +0 -0
  379. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CAT_2025-07-03.parquet +0 -0
  380. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CVX_2025-06-17.parquet +0 -0
  381. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CVX_2025-06-26.parquet +0 -0
  382. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CVX_2025-07-02.parquet +0 -0
  383. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/CVX_2025-07-03.parquet +0 -0
  384. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GME_2025-06-17.parquet +0 -0
  385. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GME_2025-06-26.parquet +0 -0
  386. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GME_2025-07-02.parquet +0 -0
  387. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GME_2025-07-03.parquet +0 -0
  388. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GOOGL_2025-06-16.parquet +0 -0
  389. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GOOGL_2025-06-17.parquet +0 -0
  390. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GOOGL_2025-06-26.parquet +0 -0
  391. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GOOGL_2025-07-02.parquet +0 -0
  392. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GOOGL_2025-07-03.parquet +0 -0
  393. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GS_2025-06-17.parquet +0 -0
  394. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GS_2025-06-26.parquet +0 -0
  395. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GS_2025-07-02.parquet +0 -0
  396. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/GS_2025-07-03.parquet +0 -0
  397. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/HD_2025-06-17.parquet +0 -0
  398. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/HD_2025-06-26.parquet +0 -0
  399. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/HD_2025-07-02.parquet +0 -0
  400. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/HD_2025-07-03.parquet +0 -0
  401. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JNJ_2025-06-17.parquet +0 -0
  402. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JNJ_2025-06-26.parquet +0 -0
  403. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JNJ_2025-07-02.parquet +0 -0
  404. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JNJ_2025-07-03.parquet +0 -0
  405. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JPM_2025-06-17.parquet +0 -0
  406. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JPM_2025-06-26.parquet +0 -0
  407. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JPM_2025-07-02.parquet +0 -0
  408. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/JPM_2025-07-03.parquet +0 -0
  409. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/META_2025-06-16.parquet +0 -0
  410. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/META_2025-06-17.parquet +0 -0
  411. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/META_2025-06-26.parquet +0 -0
  412. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/META_2025-07-02.parquet +0 -0
  413. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/META_2025-07-03.parquet +0 -0
  414. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/MSFT_2025-06-17.parquet +0 -0
  415. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/MSFT_2025-06-26.parquet +0 -0
  416. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/MSFT_2025-07-02.parquet +0 -0
  417. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/MSFT_2025-07-03.parquet +0 -0
  418. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NKE_2025-06-17.parquet +0 -0
  419. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NKE_2025-06-26.parquet +0 -0
  420. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NKE_2025-07-02.parquet +0 -0
  421. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NKE_2025-07-03.parquet +0 -0
  422. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NVDA_2025-06-17.parquet +0 -0
  423. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NVDA_2025-06-26.parquet +0 -0
  424. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NVDA_2025-07-02.parquet +0 -0
  425. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/NVDA_2025-07-03.parquet +0 -0
  426. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/PFE_2025-06-17.parquet +0 -0
  427. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/PFE_2025-06-26.parquet +0 -0
  428. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/PFE_2025-07-02.parquet +0 -0
  429. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/PFE_2025-07-03.parquet +0 -0
  430. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/QQQ_2025-06-17.parquet +0 -0
  431. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/QQQ_2025-06-26.parquet +0 -0
  432. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/QQQ_2025-07-02.parquet +0 -0
  433. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/QQQ_2025-07-03.parquet +0 -0
  434. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/SPY_2025-06-16.parquet +0 -0
  435. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/SPY_2025-06-17.parquet +0 -0
  436. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/SPY_2025-06-26.parquet +0 -0
  437. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/SPY_2025-07-02.parquet +0 -0
  438. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/SPY_2025-07-03.parquet +0 -0
  439. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/TSLA_2025-06-16.parquet +0 -0
  440. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/TSLA_2025-06-17.parquet +0 -0
  441. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/TSLA_2025-06-26.parquet +0 -0
  442. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/TSLA_2025-07-02.parquet +0 -0
  443. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/TSLA_2025-07-03.parquet +0 -0
  444. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/UNH_2025-06-17.parquet +0 -0
  445. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/UNH_2025-06-26.parquet +0 -0
  446. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/UNH_2025-07-02.parquet +0 -0
  447. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/UNH_2025-07-03.parquet +0 -0
  448. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/WMT_2025-06-17.parquet +0 -0
  449. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/WMT_2025-06-26.parquet +0 -0
  450. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/WMT_2025-07-02.parquet +0 -0
  451. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/WMT_2025-07-03.parquet +0 -0
  452. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/XOM_2025-06-17.parquet +0 -0
  453. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/XOM_2025-06-26.parquet +0 -0
  454. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/XOM_2025-07-02.parquet +0 -0
  455. {optpricing-2.2.0 → optpricing-2.3.2}/data/market_data_snapshots/XOM_2025-07-03.parquet +0 -0
  456. {optpricing-2.2.0 → optpricing-2.3.2}/docs/images/bates.png +0 -0
  457. {optpricing-2.2.0 → optpricing-2.3.2}/docs/images/calibration.png +0 -0
  458. {optpricing-2.2.0 → optpricing-2.3.2}/docs/images/fit_jump.png +0 -0
  459. {optpricing-2.2.0 → optpricing-2.3.2}/docs/images/zcb.png +0 -0
  460. {optpricing-2.2.0 → optpricing-2.3.2}/setup.cfg +0 -0
  461. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/atoms/__init__.py +0 -0
  462. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/atoms/bond.py +0 -0
  463. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/atoms/option.py +0 -0
  464. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/atoms/stock.py +0 -0
  465. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/fit_jump_parameters.py +0 -0
  466. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/fit_market_params.py +0 -0
  467. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/technique_selector.py +0 -0
  468. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/vectorized_bsm_iv.py +0 -0
  469. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/calibration/vectorized_integration_iv.py +0 -0
  470. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/commands/__init__.py +0 -0
  471. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/commands/backtest.py +0 -0
  472. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/commands/data.py +0 -0
  473. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/cli/commands/tools.py +0 -0
  474. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/dashboard/pages/__init__.py +0 -0
  475. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/data/__init__.py +0 -0
  476. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/base/base_model.py +0 -0
  477. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/base/validators.py +0 -0
  478. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/bates.py +0 -0
  479. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/bsm.py +0 -0
  480. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/cev.py +0 -0
  481. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/cir.py +0 -0
  482. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/merton_jump.py +0 -0
  483. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/perpetual_put.py +0 -0
  484. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/sabr.py +0 -0
  485. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/sabr_jump.py +0 -0
  486. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/models/vasicek.py +0 -0
  487. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/parity/__init__.py +0 -0
  488. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/__init__.py +0 -0
  489. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/american_monte_carlo.py +0 -0
  490. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/__init__.py +0 -0
  491. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/base_technique.py +0 -0
  492. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/iv_mixin.py +0 -0
  493. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/pricing_result.py +0 -0
  494. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/base/random_utils.py +0 -0
  495. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/crr.py +0 -0
  496. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/fft.py +0 -0
  497. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/integration.py +0 -0
  498. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/kernels/american_mc_kernels.py +0 -0
  499. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/kernels/lattice_kernels.py +0 -0
  500. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/kernels/mc_kernels.py +0 -0
  501. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/leisen_reimer.py +0 -0
  502. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/pde.py +0 -0
  503. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/techniques/topm.py +0 -0
  504. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/__init__.py +0 -0
  505. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/backtest_workflow.py +0 -0
  506. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/__init__.py +0 -0
  507. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/bates_config.py +0 -0
  508. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/cev_config.py +0 -0
  509. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/cgmy_config.py +0 -0
  510. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/hyperbolic_config.py +0 -0
  511. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing/workflows/configs/sabr_config.py +0 -0
  512. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing.egg-info/dependency_links.txt +0 -0
  513. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing.egg-info/entry_points.txt +0 -0
  514. {optpricing-2.2.0 → optpricing-2.3.2}/src/optpricing.egg-info/top_level.txt +0 -0
  515. {optpricing-2.2.0 → optpricing-2.3.2}/tests/atoms/test_bond.py +0 -0
  516. {optpricing-2.2.0 → optpricing-2.3.2}/tests/atoms/test_option.py +0 -0
  517. {optpricing-2.2.0 → optpricing-2.3.2}/tests/atoms/test_rate.py +0 -0
  518. {optpricing-2.2.0 → optpricing-2.3.2}/tests/atoms/test_stock.py +0 -0
  519. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_technique_selector.py +0 -0
  520. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_vectorized_bsm_iv.py +0 -0
  521. {optpricing-2.2.0 → optpricing-2.3.2}/tests/calibration/test_vectorized_integration_iv.py +0 -0
  522. {optpricing-2.2.0 → optpricing-2.3.2}/tests/cli/commands/test_backtest.py +0 -0
  523. {optpricing-2.2.0 → optpricing-2.3.2}/tests/cli/commands/test_calibrate.py +0 -0
  524. {optpricing-2.2.0 → optpricing-2.3.2}/tests/cli/commands/test_data.py +0 -0
  525. {optpricing-2.2.0 → optpricing-2.3.2}/tests/cli/commands/test_tools.py +0 -0
  526. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/base/test_base_model.py +0 -0
  527. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/base/test_validators.py +0 -0
  528. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_dupire_local.py +0 -0
  529. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_sabr_jump.py +0 -0
  530. {optpricing-2.2.0 → optpricing-2.3.2}/tests/models/test_vg.py +0 -0
  531. {optpricing-2.2.0 → optpricing-2.3.2}/tests/parity/test_implied_rate.py +0 -0
  532. {optpricing-2.2.0 → optpricing-2.3.2}/tests/parity/test_parity_model.py +0 -0
  533. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/base/test_pricing_result.py +0 -0
  534. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/base/test_random_utils.py +0 -0
  535. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_american_monte_carlo.py +0 -0
  536. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_crr.py +0 -0
  537. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_fft.py +0 -0
  538. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_integration.py +0 -0
  539. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_leisen_reimer.py +0 -0
  540. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_pde.py +0 -0
  541. {optpricing-2.2.0 → optpricing-2.3.2}/tests/techniques/test_topm.py +0 -0
  542. {optpricing-2.2.0 → optpricing-2.3.2}/tests/workflows/test_backtest_workflow.py +0 -0
  543. {optpricing-2.2.0 → optpricing-2.3.2}/tests/workflows/test_daily_workflow.py +0 -0
@@ -0,0 +1,4 @@
1
+ [run]
2
+ source = src/optpricing
3
+ omit =
4
+ src/optpricing/dashboard/pages/*
@@ -12,6 +12,7 @@ A clear and concise description of what the bug is.
12
12
 
13
13
  **To Reproduce**
14
14
  Steps to reproduce the behavior:
15
+
15
16
  1. Go to '...'
16
17
  2. Click on '....'
17
18
  3. Scroll down to '....'
@@ -24,15 +25,10 @@ A clear and concise description of what you expected to happen.
24
25
  If applicable, add screenshots to help explain your problem.
25
26
 
26
27
  **Desktop (please complete the following information):**
27
- - OS: [e.g. iOS]
28
- - Browser [e.g. chrome, safari]
29
- - Version [e.g. 22]
30
-
31
- **Smartphone (please complete the following information):**
32
- - Device: [e.g. iPhone6]
33
- - OS: [e.g. iOS8.1]
34
- - Browser [e.g. stock browser, safari]
35
- - Version [e.g. 22]
28
+
29
+ - OS: [e.g. iOS]
30
+ - Browser [e.g. chrome, safari]
31
+ - Version [e.g. 22]
36
32
 
37
33
  **Additional context**
38
34
  Add any other context about the problem here.
@@ -0,0 +1,45 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+
9
+ jobs:
10
+ test-and-lint:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ python-version: ["3.10", "3.11"]
16
+
17
+ steps:
18
+ - name: Checkout repository
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ uses: actions/setup-python@v4
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+ cache: 'pip'
26
+
27
+ - name: Install dependencies
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ pip install -e .[dev]
31
+
32
+ - name: Lint with ruff
33
+ run: |
34
+ ruff check .
35
+ ruff format --check .
36
+
37
+ - name: Run tests with pytest and generate coverage report
38
+ run: |
39
+ pytest --cov=src/optpricing --cov-report=xml
40
+
41
+ - name: Upload coverage reports to Codecov
42
+ uses: codecov/codecov-action@v5
43
+ with:
44
+ flags: unittests
45
+ fail_ci_if_error: false
@@ -0,0 +1,54 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+
7
+ pull_request:
8
+ branches: [ "main" ]
9
+
10
+ workflow_dispatch:
11
+
12
+ concurrency:
13
+ group: "pages"
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ build-deploy:
18
+ runs-on: ubuntu-latest
19
+
20
+ permissions:
21
+ contents: read
22
+ pages: write
23
+ id-token: write
24
+
25
+ steps:
26
+ - name: Checkout repository
27
+ uses: actions/checkout@v4
28
+
29
+ - name: Set up Python
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: '3.11'
33
+ cache: 'pip'
34
+
35
+ - name: Install dependencies for docs
36
+ run: |
37
+ python -m pip install --upgrade pip
38
+ pip install .[dev]
39
+
40
+ - name: Configure Pages
41
+ uses: actions/configure-pages@v4
42
+
43
+ - name: Build MkDocs site
44
+ run: mkdocs build
45
+
46
+ - name: Upload artifact
47
+ uses: actions/upload-pages-artifact@v3
48
+ with:
49
+ path: ./site
50
+
51
+ - name: Deploy to GitHub Pages
52
+ if: github.event_name == 'push'
53
+ id: deployment
54
+ uses: actions/deploy-pages@v4
@@ -25,5 +25,7 @@ htmlcov/
25
25
  site/
26
26
 
27
27
  # Ignore my local notes file
28
- tmp.txt
29
- TODO.txt
28
+ todo/
29
+ notes/
30
+ text_drafts/
31
+ todo.txt
@@ -1,6 +1,7 @@
1
1
  # Changelog
2
2
 
3
3
  ## [2.0.0] - 2025-06-26
4
+
4
5
  ### Added
5
- - Shipped to PyPI `pyproject.toml`
6
6
 
7
+ - Shipped to PyPI `pyproject.toml`
@@ -0,0 +1,216 @@
1
+ Metadata-Version: 2.4
2
+ Name: optpricing
3
+ Version: 2.3.2
4
+ Summary: A financial options pricing and analysis library.
5
+ Author-email: Diljit Singh <first_last22@google.com>
6
+ License: # MIT LICENSE
7
+
8
+ Copyright 2025 Diljit Singh
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+
16
+ Project-URL: Homepage, https://diljit22.github.io/quantfin/
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Topic :: Office/Business :: Financial :: Investment
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: numpy~=2.2.5
25
+ Requires-Dist: scipy~=1.15.2
26
+ Requires-Dist: pandas~=2.2.3
27
+ Requires-Dist: numba~=0.61.2
28
+ Requires-Dist: pyyaml~=6.0.2
29
+ Requires-Dist: click~=8.1
30
+ Requires-Dist: typer~=0.15.2
31
+ Requires-Dist: streamlit~=1.45.1
32
+ Requires-Dist: matplotlib~=3.10.1
33
+ Requires-Dist: plotly~=6.1.2
34
+ Requires-Dist: yfinance~=0.2.63
35
+ Requires-Dist: tabulate~=0.9.0
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest; extra == "dev"
38
+ Requires-Dist: pytest-cov; extra == "dev"
39
+ Requires-Dist: ruff==0.11.6; extra == "dev"
40
+ Requires-Dist: mkdocs; extra == "dev"
41
+ Requires-Dist: mkdocs-material; extra == "dev"
42
+ Requires-Dist: mkdocstrings[python]; extra == "dev"
43
+ Requires-Dist: mkdocs-section-index; extra == "dev"
44
+ Requires-Dist: line_profiler; extra == "dev"
45
+ Requires-Dist: pre-commit; extra == "dev"
46
+ Requires-Dist: codecov; extra == "dev"
47
+ Dynamic: license-file
48
+
49
+ # OptPricing: A Quantitative Finance Library for Derivative Pricing and Analysis
50
+
51
+ [![Tests](https://img.shields.io/github/actions/workflow/status/diljit22/quantfin/ci.yml?branch=main&label=tests)](https://github.com/diljit22/quantfin/actions/workflows/ci.yml)
52
+ [![Coverage](https://codecov.io/gh/diljit22/quantfin/branch/main/graph/badge.svg)](https://codecov.io/gh/diljit22/quantfin)
53
+ [![Ruff](https://img.shields.io/github/actions/workflow/status/diljit22/quantfin/ci.yml?branch=main&label=ruff)](https://github.com/diljit22/quantfin/actions/workflows/ci.yml)
54
+ [![Docs](https://img.shields.io/github/actions/workflow/status/diljit22/quantfin/ci.yml?branch=main&label=docs)](https://github.com/diljit22/quantfin/actions/workflows/ci.yml)
55
+ [![PyPI version](https://img.shields.io/pypi/v/optpricing.svg)](https://pypi.org/project/optpricing/)
56
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
57
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
58
+
59
+ `optpricing` is a Python library for pricing, calibrating, and analyzing financial derivatives. It is built with a focus on architectural clarity, model breadth, and practical usability through a robust API, command-line interface, and an interactive dashboard.
60
+
61
+ Diljit Singh
62
+ linkedin.com/in/singhdiljit/
63
+
64
+ ---
65
+
66
+ ## Core Features
67
+
68
+ * **Model Library**: Implements a comprehensive set of models, including:
69
+ * **Stochastic Volatility**: Heston, SABR
70
+ * **Jump-Diffusion**: Merton, Bates, Kou, SABR with Jumps
71
+ * **Pure Levy Processes**: Variance Gamma (VG), Normal Inverse Gaussian (NIG), CGMY, Hyperbolic
72
+ * **Interest Rate Models**: Vasicek, Cox-Ingersoll-Ross (CIR), Put-Call Parity Implied Rate
73
+ * **Local Volatility**: Dupire's Equation
74
+
75
+ * **Pricing Engines**: Provides a suite of numerical methods, allowing for technique comparison and validation:
76
+ * Analytic closed-form solutions
77
+ * Numerical integration and FFT-based pricing via characteristic functions
78
+ * Finite difference (PDE) solver using a Crank-Nicolson scheme
79
+ * Binomial and trinomial tree methods (CRR, TOPM, Leisen-Reimer) for European and American options
80
+ * High-performance Monte Carlo engine for European and American options, accelerated with `numba`, featuring variance reduction techniques (e.g., antithetic variates, control variates, importance sampling)
81
+
82
+ * **Interfaces**:
83
+ * **Programmatic API**: Use the package as a Python library to build custom financial models in your scripts. Define options, stocks, rates, and models programmatically to compute prices and other metrics.
84
+ * **Command-Line Interface (CLI)**: A robust CLI for live pricing, data management, model calibration, and historical backtesting.
85
+ * **Interactive Dashboard (UI)**: A Streamlit application for visual analysis of option chains, implied volatility surfaces, and model calibrations.
86
+
87
+ * **Workflow Automation**: High-level classes that orchestrate complex tasks like daily calibration runs and out-of-sample performance evaluation.
88
+
89
+ ---
90
+
91
+ ## Quick Start
92
+
93
+ `optpricing` is designed for a straightforward installation using `pip` and is compatible with Python 3.10 and higher.
94
+
95
+ ### 1. Install the Library
96
+
97
+ ```bash
98
+ pip install optpricing
99
+ ```
100
+
101
+ ### 2. Download Historical Data
102
+
103
+ Some models require historical data (e.g., for calibration). Download data for a ticker like SPY:
104
+
105
+ ```bash
106
+ optpricing data download --ticker SPY
107
+ ```
108
+
109
+ For more details, see the [Getting Started Guide](https://diljit22.github.io/quantFin/guide/getting_started/).
110
+
111
+ ### 3. Use the CLI
112
+
113
+ Price an option directly from the terminal. The command below fetches the live option chain for AAPL, retrieves the current dividend rate, calculates the implied risk-free rate from at-the-money contracts, and prices the contract with Heston’s model using its default pricing technique (FFT):
114
+
115
+ ```bash
116
+ optpricing price --ticker AAPL --strike 630 --maturity 2025-12-19 --model Heston --param "rho=-0.7" --param "vol_of_vol=0.5"
117
+ ```
118
+
119
+ To price the same contract as an American Option use:
120
+
121
+ ```bash
122
+ optpricing price -t AAPL -k 210 -T 2025-12-19 --style american --model Heston --param "rho=-0.7" --param "vol_of_vol=0.5"
123
+ ```
124
+
125
+ For more details, see the [CLI Guide](https://diljit22.github.io/quantFin/guide/CLI/).
126
+
127
+ ### 4. Launch the Dashboard
128
+
129
+ Visualize option chains and model outputs, interact with a pricing calculator featuring 15 models and 10 techniques.
130
+
131
+ ```bash
132
+ optpricing dashboard
133
+ ```
134
+
135
+ For more details, see the [Dashboard Guide](https://diljit22.github.io/quantFin/guide/dashboard/).
136
+
137
+ ### 5. Use the Programmatic API
138
+
139
+ The most powerful way to use the package is via the API, which provides customization of nearly every aspect of pricing:
140
+
141
+ ```python
142
+ from optpricing import Option, OptionType, Rate, Stock, ZeroCouponBond
143
+ from optpricing.models import BSMModel, CIRModel, VasicekModel
144
+ from optpricing.techniques import ClosedFormTechnique
145
+
146
+ # Define an option, underlying and rate
147
+ option = Option(strike=105, maturity=1.0, option_type=OptionType.CALL)
148
+ stock = Stock(spot=100, dividend=0.01)
149
+ rate = Rate(rate=0.05)
150
+
151
+ # Choose a model and technique
152
+ bsm_model = BSMModel(params={"sigma": 0.20})
153
+ cf_technique = ClosedFormTechnique()
154
+
155
+ result = cf_technique.price(option, stock, bsm_model, rate)
156
+ print(f"The option price is: {result.price:.4f}")
157
+
158
+
159
+ delta = cf_technique.delta(option, stock, bsm_model, rate)
160
+ gamma = cf_technique.gamma(option, stock, bsm_model, rate)
161
+ vega = cf_technique.vega(option, stock, bsm_model, rate)
162
+
163
+ print(f"Delta: {delta:.4f}")
164
+ print(f"Gamma: {gamma:.4f}")
165
+ print(f"Vega: {vega:.4f}")
166
+
167
+ target_price = 7.50
168
+ iv = cf_technique.implied_volatility(
169
+ option, stock, bsm_model, rate, target_price=target_price
170
+ )
171
+ print(f"Implied volatility for price ${target_price:.2f}: {iv:.4%}")
172
+
173
+
174
+ # Zero Coupon Bond
175
+ bond = ZeroCouponBond(maturity=1.0)
176
+ r0_stock = Stock(spot=0.05) # initial short rate
177
+ dummy_rate = Rate(rate=0.0) # ignored by rate models
178
+
179
+ vasicek = VasicekModel(params={"kappa": 0.86, "theta": 0.09, "sigma": 0.02})
180
+ cir = CIRModel(params={"kappa": 0.86, "theta": 0.09, "sigma": 0.02})
181
+
182
+ p_vasi = cf_technique.price(bond, r0_stock, vasicek, dummy_rate).price
183
+ p_cir = cf_technique.price(bond, r0_stock, cir, dummy_rate).price
184
+
185
+ print(f"Vasicek ZCB Price: {p_vasi:.4f}")
186
+ print(f"CIR ZCB Price: {p_cir:.4f}")
187
+ ```
188
+
189
+ For more details, see the [API Guide](https://diljit22.github.io/quantFin/guide/API/).
190
+
191
+ ---
192
+
193
+ ## Documentation
194
+
195
+ The full documentation includes installation instructions, user guides, examples, and a complete API reference.
196
+
197
+ * **[View the Official Documentation](https://diljit22.github.io/quantFin/)**
198
+
199
+ ### Guides
200
+
201
+ * [Introduction](https://diljit22.github.io/quantFin/guide/introduction/)
202
+ * [Installation](https://diljit22.github.io/quantFin/guide/installation/)
203
+ * [Getting Started](https://diljit22.github.io/quantFin/guide/getting_started/)
204
+ * [CLI](https://diljit22.github.io/quantFin/guide/CLI/)
205
+ * [Dashboard](https://diljit22.github.io/quantFin/guide/dashboard/)
206
+ * [API](https://diljit22.github.io/quantFin/guide/API/)
207
+ * [Examples](https://diljit22.github.io/quantFin/guide/examples/)
208
+ * [API Reference](https://diljit22.github.io/quantFin/reference/)
209
+
210
+ ## Contributing
211
+
212
+ Contributions are welcome; see [CONTRIBUTING](/CONTRIBUTING.md) for details.
213
+
214
+ ## License
215
+
216
+ This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
@@ -0,0 +1,168 @@
1
+ # OptPricing: A Quantitative Finance Library for Derivative Pricing and Analysis
2
+
3
+ [![Tests](https://img.shields.io/github/actions/workflow/status/diljit22/quantfin/ci.yml?branch=main&label=tests)](https://github.com/diljit22/quantfin/actions/workflows/ci.yml)
4
+ [![Coverage](https://codecov.io/gh/diljit22/quantfin/branch/main/graph/badge.svg)](https://codecov.io/gh/diljit22/quantfin)
5
+ [![Ruff](https://img.shields.io/github/actions/workflow/status/diljit22/quantfin/ci.yml?branch=main&label=ruff)](https://github.com/diljit22/quantfin/actions/workflows/ci.yml)
6
+ [![Docs](https://img.shields.io/github/actions/workflow/status/diljit22/quantfin/ci.yml?branch=main&label=docs)](https://github.com/diljit22/quantfin/actions/workflows/ci.yml)
7
+ [![PyPI version](https://img.shields.io/pypi/v/optpricing.svg)](https://pypi.org/project/optpricing/)
8
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
+
11
+ `optpricing` is a Python library for pricing, calibrating, and analyzing financial derivatives. It is built with a focus on architectural clarity, model breadth, and practical usability through a robust API, command-line interface, and an interactive dashboard.
12
+
13
+ Diljit Singh
14
+ linkedin.com/in/singhdiljit/
15
+
16
+ ---
17
+
18
+ ## Core Features
19
+
20
+ * **Model Library**: Implements a comprehensive set of models, including:
21
+ * **Stochastic Volatility**: Heston, SABR
22
+ * **Jump-Diffusion**: Merton, Bates, Kou, SABR with Jumps
23
+ * **Pure Levy Processes**: Variance Gamma (VG), Normal Inverse Gaussian (NIG), CGMY, Hyperbolic
24
+ * **Interest Rate Models**: Vasicek, Cox-Ingersoll-Ross (CIR), Put-Call Parity Implied Rate
25
+ * **Local Volatility**: Dupire's Equation
26
+
27
+ * **Pricing Engines**: Provides a suite of numerical methods, allowing for technique comparison and validation:
28
+ * Analytic closed-form solutions
29
+ * Numerical integration and FFT-based pricing via characteristic functions
30
+ * Finite difference (PDE) solver using a Crank-Nicolson scheme
31
+ * Binomial and trinomial tree methods (CRR, TOPM, Leisen-Reimer) for European and American options
32
+ * High-performance Monte Carlo engine for European and American options, accelerated with `numba`, featuring variance reduction techniques (e.g., antithetic variates, control variates, importance sampling)
33
+
34
+ * **Interfaces**:
35
+ * **Programmatic API**: Use the package as a Python library to build custom financial models in your scripts. Define options, stocks, rates, and models programmatically to compute prices and other metrics.
36
+ * **Command-Line Interface (CLI)**: A robust CLI for live pricing, data management, model calibration, and historical backtesting.
37
+ * **Interactive Dashboard (UI)**: A Streamlit application for visual analysis of option chains, implied volatility surfaces, and model calibrations.
38
+
39
+ * **Workflow Automation**: High-level classes that orchestrate complex tasks like daily calibration runs and out-of-sample performance evaluation.
40
+
41
+ ---
42
+
43
+ ## Quick Start
44
+
45
+ `optpricing` is designed for a straightforward installation using `pip` and is compatible with Python 3.10 and higher.
46
+
47
+ ### 1. Install the Library
48
+
49
+ ```bash
50
+ pip install optpricing
51
+ ```
52
+
53
+ ### 2. Download Historical Data
54
+
55
+ Some models require historical data (e.g., for calibration). Download data for a ticker like SPY:
56
+
57
+ ```bash
58
+ optpricing data download --ticker SPY
59
+ ```
60
+
61
+ For more details, see the [Getting Started Guide](https://diljit22.github.io/quantFin/guide/getting_started/).
62
+
63
+ ### 3. Use the CLI
64
+
65
+ Price an option directly from the terminal. The command below fetches the live option chain for AAPL, retrieves the current dividend rate, calculates the implied risk-free rate from at-the-money contracts, and prices the contract with Heston’s model using its default pricing technique (FFT):
66
+
67
+ ```bash
68
+ optpricing price --ticker AAPL --strike 630 --maturity 2025-12-19 --model Heston --param "rho=-0.7" --param "vol_of_vol=0.5"
69
+ ```
70
+
71
+ To price the same contract as an American Option use:
72
+
73
+ ```bash
74
+ optpricing price -t AAPL -k 210 -T 2025-12-19 --style american --model Heston --param "rho=-0.7" --param "vol_of_vol=0.5"
75
+ ```
76
+
77
+ For more details, see the [CLI Guide](https://diljit22.github.io/quantFin/guide/CLI/).
78
+
79
+ ### 4. Launch the Dashboard
80
+
81
+ Visualize option chains and model outputs, interact with a pricing calculator featuring 15 models and 10 techniques.
82
+
83
+ ```bash
84
+ optpricing dashboard
85
+ ```
86
+
87
+ For more details, see the [Dashboard Guide](https://diljit22.github.io/quantFin/guide/dashboard/).
88
+
89
+ ### 5. Use the Programmatic API
90
+
91
+ The most powerful way to use the package is via the API, which provides customization of nearly every aspect of pricing:
92
+
93
+ ```python
94
+ from optpricing import Option, OptionType, Rate, Stock, ZeroCouponBond
95
+ from optpricing.models import BSMModel, CIRModel, VasicekModel
96
+ from optpricing.techniques import ClosedFormTechnique
97
+
98
+ # Define an option, underlying and rate
99
+ option = Option(strike=105, maturity=1.0, option_type=OptionType.CALL)
100
+ stock = Stock(spot=100, dividend=0.01)
101
+ rate = Rate(rate=0.05)
102
+
103
+ # Choose a model and technique
104
+ bsm_model = BSMModel(params={"sigma": 0.20})
105
+ cf_technique = ClosedFormTechnique()
106
+
107
+ result = cf_technique.price(option, stock, bsm_model, rate)
108
+ print(f"The option price is: {result.price:.4f}")
109
+
110
+
111
+ delta = cf_technique.delta(option, stock, bsm_model, rate)
112
+ gamma = cf_technique.gamma(option, stock, bsm_model, rate)
113
+ vega = cf_technique.vega(option, stock, bsm_model, rate)
114
+
115
+ print(f"Delta: {delta:.4f}")
116
+ print(f"Gamma: {gamma:.4f}")
117
+ print(f"Vega: {vega:.4f}")
118
+
119
+ target_price = 7.50
120
+ iv = cf_technique.implied_volatility(
121
+ option, stock, bsm_model, rate, target_price=target_price
122
+ )
123
+ print(f"Implied volatility for price ${target_price:.2f}: {iv:.4%}")
124
+
125
+
126
+ # Zero Coupon Bond
127
+ bond = ZeroCouponBond(maturity=1.0)
128
+ r0_stock = Stock(spot=0.05) # initial short rate
129
+ dummy_rate = Rate(rate=0.0) # ignored by rate models
130
+
131
+ vasicek = VasicekModel(params={"kappa": 0.86, "theta": 0.09, "sigma": 0.02})
132
+ cir = CIRModel(params={"kappa": 0.86, "theta": 0.09, "sigma": 0.02})
133
+
134
+ p_vasi = cf_technique.price(bond, r0_stock, vasicek, dummy_rate).price
135
+ p_cir = cf_technique.price(bond, r0_stock, cir, dummy_rate).price
136
+
137
+ print(f"Vasicek ZCB Price: {p_vasi:.4f}")
138
+ print(f"CIR ZCB Price: {p_cir:.4f}")
139
+ ```
140
+
141
+ For more details, see the [API Guide](https://diljit22.github.io/quantFin/guide/API/).
142
+
143
+ ---
144
+
145
+ ## Documentation
146
+
147
+ The full documentation includes installation instructions, user guides, examples, and a complete API reference.
148
+
149
+ * **[View the Official Documentation](https://diljit22.github.io/quantFin/)**
150
+
151
+ ### Guides
152
+
153
+ * [Introduction](https://diljit22.github.io/quantFin/guide/introduction/)
154
+ * [Installation](https://diljit22.github.io/quantFin/guide/installation/)
155
+ * [Getting Started](https://diljit22.github.io/quantFin/guide/getting_started/)
156
+ * [CLI](https://diljit22.github.io/quantFin/guide/CLI/)
157
+ * [Dashboard](https://diljit22.github.io/quantFin/guide/dashboard/)
158
+ * [API](https://diljit22.github.io/quantFin/guide/API/)
159
+ * [Examples](https://diljit22.github.io/quantFin/guide/examples/)
160
+ * [API Reference](https://diljit22.github.io/quantFin/reference/)
161
+
162
+ ## Contributing
163
+
164
+ Contributions are welcome; see [CONTRIBUTING](/CONTRIBUTING.md) for details.
165
+
166
+ ## License
167
+
168
+ This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
@@ -0,0 +1,6 @@
1
+ Eval Date,Model,Out-of-Sample RMSE
2
+ 2025-07-03,BSM,11.160890957057632
3
+ 2025-07-02,BSM,10.263303567917294
4
+ 2025-06-26,BSM,11.23164730000395
5
+ 2025-06-17,BSM,8.025361660077047
6
+ 2025-06-16,BSM,8.450145179833529
@@ -0,0 +1,8 @@
1
+ Eval Date,Model,Out-of-Sample RMSE
2
+ 2025-07-08,BSM,10.170957494669732
3
+ 2025-07-07,BSM,9.960832785279184
4
+ 2025-07-03,BSM,11.160890957057632
5
+ 2025-07-02,BSM,10.263303567917294
6
+ 2025-06-26,BSM,11.23164730000395
7
+ 2025-06-17,BSM,8.025361660077047
8
+ 2025-06-16,BSM,8.450145179833529
@@ -0,0 +1,8 @@
1
+ {
2
+ "model": "BSM",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-03",
5
+ "params": {
6
+ "sigma": 0.18311375184055745
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "model": "BSM",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-07",
5
+ "params": {
6
+ "sigma": 0.18518990454903567
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "model": "BSM",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-08",
5
+ "params": {
6
+ "sigma": 0.18289235017900857
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "model": "BSM",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-09",
5
+ "params": {
6
+ "sigma": 0.18053659422178386
7
+ }
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "model": "Merton",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-03",
5
+ "params": {
6
+ "sigma": 0.14899806945368946,
7
+ "lambda": 3.5097493036211698,
8
+ "mu_j": -0.013195804678398376,
9
+ "sigma_j": 0.05717547425526682
10
+ }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "model": "Merton",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-07",
5
+ "params": {
6
+ "sigma": 0.14899806945368946,
7
+ "lambda": 3.5097493036211698,
8
+ "mu_j": -0.013195804678398376,
9
+ "sigma_j": 0.05717547425526682
10
+ }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "model": "Merton",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-08",
5
+ "params": {
6
+ "sigma": 0.14899806945368946,
7
+ "lambda": 3.5097493036211698,
8
+ "mu_j": -0.013195804678398376,
9
+ "sigma_j": 0.05717547425526682
10
+ }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "model": "Merton",
3
+ "ticker": "SPY",
4
+ "date": "2025-07-09",
5
+ "params": {
6
+ "sigma": 0.14899806945368946,
7
+ "lambda": 3.5097493036211698,
8
+ "mu_j": -0.013195804678398376,
9
+ "sigma_j": 0.05717547425526682
10
+ }
11
+ }
@@ -0,0 +1,7 @@
1
+ coverage:
2
+ range: "70..90"
3
+ status:
4
+ project:
5
+ enabled: false
6
+ ignore:
7
+ - "src/optpricing/dashboard/pages/*"
@@ -5,7 +5,7 @@ live_data_provider: "yfinance"
5
5
  data_directory: "data"
6
6
  artifacts_directory: "artifacts"
7
7
 
8
- # Used by 'optpricing data download --all'
8
+ # Used by --all in CLI commands
9
9
  default_tickers:
10
10
  - SPY
11
11
  - QQQ