option-chain-analytics 5.2.1__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.
- option_chain_analytics-5.2.1/CHANGELOG.md +242 -0
- option_chain_analytics-5.2.1/CITATION.cff +20 -0
- option_chain_analytics-5.2.1/CODE_OF_CONDUCT.md +24 -0
- option_chain_analytics-5.2.1/CONTRIBUTING.md +54 -0
- option_chain_analytics-5.2.1/LICENSE +21 -0
- option_chain_analytics-5.2.1/MANIFEST.in +18 -0
- option_chain_analytics-5.2.1/PKG-INFO +581 -0
- option_chain_analytics-5.2.1/README.md +515 -0
- option_chain_analytics-5.2.1/RELEASING.md +51 -0
- option_chain_analytics-5.2.1/SECURITY.md +24 -0
- option_chain_analytics-5.2.1/docs/comparison.md +16 -0
- option_chain_analytics-5.2.1/docs/conf.py +35 -0
- option_chain_analytics-5.2.1/docs/data_sources.md +239 -0
- option_chain_analytics-5.2.1/docs/first_success.md +26 -0
- option_chain_analytics-5.2.1/docs/index.md +27 -0
- option_chain_analytics-5.2.1/docs/point_in_time.md +51 -0
- option_chain_analytics-5.2.1/docs/queries.md +46 -0
- option_chain_analytics-5.2.1/docs/schema.md +56 -0
- option_chain_analytics-5.2.1/examples/README.md +51 -0
- option_chain_analytics-5.2.1/examples/build_thetadata_eod_cache.py +146 -0
- option_chain_analytics-5.2.1/examples/fetch_thetadata_atm_timeseries.py +309 -0
- option_chain_analytics-5.2.1/examples/fetch_thetadata_eod.py +267 -0
- option_chain_analytics-5.2.1/examples/first_success.py +68 -0
- option_chain_analytics-5.2.1/examples/run_chain_report.py +86 -0
- option_chain_analytics-5.2.1/pyproject.toml +162 -0
- option_chain_analytics-5.2.1/setup.cfg +4 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/__init__.py +62 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/conventions.py +81 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/__init__.py +46 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/bloomberg.py +9 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/cache.py +171 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/cboe.py +887 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/deribit.py +339 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/loaders.py +92 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/simulated.py +182 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/tardis.py +499 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/thetadata.py +802 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/data/thetadata_cache.py +447 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/local_path.py +61 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/option_chain.py +993 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/option_data.py +271 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/reconstruction.py +148 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/utils/__init__.py +13 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/utils/forward_discount.py +211 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/utils/portfolio_payoff.py +94 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/utils/roll_maturities.py +190 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/visuals/__init__.py +3 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/visuals/chain_report.py +57 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/visuals/plots.py +264 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics/visuals/slices.py +130 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics.egg-info/PKG-INFO +581 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics.egg-info/SOURCES.txt +72 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics.egg-info/dependency_links.txt +1 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics.egg-info/requires.txt +42 -0
- option_chain_analytics-5.2.1/src/option_chain_analytics.egg-info/top_level.txt +1 -0
- option_chain_analytics-5.2.1/tests/conftest.py +5 -0
- option_chain_analytics-5.2.1/tests/test_cboe_loader.py +318 -0
- option_chain_analytics-5.2.1/tests/test_chain_loading.py +135 -0
- option_chain_analytics-5.2.1/tests/test_chain_report_example.py +19 -0
- option_chain_analytics-5.2.1/tests/test_example_entrypoints.py +50 -0
- option_chain_analytics-5.2.1/tests/test_first_success.py +11 -0
- option_chain_analytics-5.2.1/tests/test_implied_forwards.py +70 -0
- option_chain_analytics-5.2.1/tests/test_local_path_defaults.py +58 -0
- option_chain_analytics-5.2.1/tests/test_module_layout.py +199 -0
- option_chain_analytics-5.2.1/tests/test_option_chain.py +30 -0
- option_chain_analytics-5.2.1/tests/test_project_metadata.py +83 -0
- option_chain_analytics-5.2.1/tests/test_public_module_cleanup.py +52 -0
- option_chain_analytics-5.2.1/tests/test_simulated_data.py +111 -0
- option_chain_analytics-5.2.1/tests/test_thetadata_cache_example.py +196 -0
- option_chain_analytics-5.2.1/tests/test_thetadata_example.py +47 -0
- option_chain_analytics-5.2.1/tests/test_thetadata_loader.py +267 -0
- option_chain_analytics-5.2.1/tests/test_thetadata_timeseries_example.py +89 -0
- option_chain_analytics-5.2.1/tools/generate_readme_figures.py +237 -0
- option_chain_analytics-5.2.1/tools/verify_distribution.py +163 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable public changes to OptionChainAnalytics are recorded here.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [5.2.1] - 2026-09-08
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added explicit stack dependency and optional-import boundary checks, including
|
|
12
|
+
isolated maintainer adapters, plus a fresh Python 3.10 lowest-direct dependency CI lane.
|
|
13
|
+
|
|
14
|
+
- Added tag-driven PyPI Trusted Publishing with release-identity and distribution
|
|
15
|
+
validation; creating a GitHub Release remains optional.
|
|
16
|
+
|
|
17
|
+
- Added a lowest-dependency CI variant for the optional `bloomberg` extra, with
|
|
18
|
+
core-import isolation checks that do not require live Bloomberg access.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Aligned package summaries, software citations, README navigation, and documentation
|
|
23
|
+
landing pages with the canonical package identity and Read the Docs documentation.
|
|
24
|
+
|
|
25
|
+
- Pointed package documentation metadata to the Read the Docs root and replaced
|
|
26
|
+
the legacy GitHub Pages documentation build with redirects.
|
|
27
|
+
|
|
28
|
+
## [5.2.0] - 2026-08-24
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- `ChainTs.load_price_data` returns a selected and optionally resampled underlying series from
|
|
33
|
+
the `spot_data` panel linked to the same option-chain history.
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
|
|
37
|
+
- Retired the contributor-facing `dev` extra in favor of PEP 735 dependency groups:
|
|
38
|
+
`test` for pytest and Python 3.10 TOML support, and `lint` for Ruff. The user-facing
|
|
39
|
+
provider, documentation, and aggregate extras remain available.
|
|
40
|
+
|
|
41
|
+
## [5.1.0] - 2026-08-22
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Component development diagnostics now live beside their owning modules in source-only
|
|
46
|
+
`run_local/*_run.py` namespace folders and use the `Locals` / `run_local(local=...)` contract.
|
|
47
|
+
- Runnable examples use the same dispatcher names while remaining broader repository workflows;
|
|
48
|
+
automated pytest modules remain centralized under `tests/`.
|
|
49
|
+
- Wheel and source-distribution verification reject development runners.
|
|
50
|
+
|
|
51
|
+
## [5.0.0] - 2026-08-20
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- `create_chain_at_time` is the canonical exact/previous point-in-time reconstruction function.
|
|
56
|
+
- `option_chain_analytics.option_data`, `.conventions`, and `.reconstruction` provide explicit
|
|
57
|
+
homes for normalized containers, shared conventions, and chain reconstruction.
|
|
58
|
+
- `examples/build_thetadata_eod_cache.py` now exposes `create_thetadata_options_data`, which builds
|
|
59
|
+
or resumes monthly ThetaData partitions and returns the complete history as one `OptionsDataDFs`.
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
- `create_chain_timeseries` now accepts the clearly named `options_data` input and delegates each
|
|
64
|
+
scheduled observation to `create_chain_at_time` without changing the no-look-ahead policy.
|
|
65
|
+
- Provider-independent call-put parity forward/discount inference moved from the one-file
|
|
66
|
+
`fitters` package to `option_chain_analytics.utils.forward_discount`.
|
|
67
|
+
- Provider loading is split by responsibility across `data.cache`, `data.cboe`, `data.tardis`,
|
|
68
|
+
`data.deribit`, and `data.loaders`; package-root `DataSource` and `ts_data_loader_wrapper` remain
|
|
69
|
+
unchanged.
|
|
70
|
+
- The provider modules now document their data ownership, timestamp, quote-unit, cache, and
|
|
71
|
+
optional-dependency boundaries in detail. The README includes an installed-package ThetaData
|
|
72
|
+
workflow from resumable cache construction through rolling ATM/skew plots and an exact-date
|
|
73
|
+
multi-expiry chain report.
|
|
74
|
+
- All tracked runnable examples now use the maintainer-standard `LocalTests` enum and
|
|
75
|
+
`run_local_test(local_test=...)` dispatcher entry point.
|
|
76
|
+
- Normalized CBOE, Tardis EOD, and ThetaData caches now resolve through `OCA_CACHE_PATH`, defaulting
|
|
77
|
+
to the ignored repository `resources/` directory. `OCA_DATA_PATH` remains the separate root for
|
|
78
|
+
raw provider archives, while custom CBOE/Tardis directories retain co-located caches.
|
|
79
|
+
- The root and examples READMEs now provide the authoritative six-example inventory, including
|
|
80
|
+
each workflow's data prerequisite, network behavior, output, and cache-first command sequence.
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- ATM call/put and volatility queries now fall back to the nearest valid quote on each option side
|
|
85
|
+
when a provider reports asymmetric strike grids, avoiding failures in otherwise valid ThetaData
|
|
86
|
+
histories.
|
|
87
|
+
|
|
88
|
+
### Removed
|
|
89
|
+
|
|
90
|
+
- Removed the canonical and historical compatibility module paths named `chain_loader_from_ts.py`,
|
|
91
|
+
`chain_ts.py`, and `config.py`.
|
|
92
|
+
- Removed `create_chain_from_from_options_dfs` and its doubled-`from` public name.
|
|
93
|
+
- Removed the research helpers `generate_atm_vols_skew` and `generate_vol_delta_ts`; rolled
|
|
94
|
+
empirical analytics now live in their downstream SVM examples and SigmaStrats research code.
|
|
95
|
+
- Removed the CCXT exchange adapter and integration surface; exchange-specific spot and funding
|
|
96
|
+
retrieval now belongs to downstream research applications rather than OCA.
|
|
97
|
+
- Removed the maintainer-only combined local-cache CLI from tracked public examples; the ignored
|
|
98
|
+
`prop/` copy remains available for private CBOE and Tardis archives.
|
|
99
|
+
- Removed the now-empty `option_chain_analytics.fitters` module path without a compatibility shim.
|
|
100
|
+
- Removed the monolithic `option_chain_analytics.ts_loaders` module path; provider-specific imports
|
|
101
|
+
now use their owning `option_chain_analytics.data` modules.
|
|
102
|
+
- Removed the legacy approximate LogSV smile fitter and its embedded OCA report/demo module after
|
|
103
|
+
migrating the provider-independent analytics to `stochvolmodels.fitters` and updating
|
|
104
|
+
SigmaStrats to import the synthetic grid-price helper from SVM.
|
|
105
|
+
- Removed obsolete Bloomberg-surface, legacy crypto-volatility/funding, option-portfolio bump, and
|
|
106
|
+
duplicate CBOE-cache examples. The retained examples now use deterministic data, standardized
|
|
107
|
+
local caches, or explicit provider access.
|
|
108
|
+
|
|
109
|
+
## [4.0.0] - 2026-08-19
|
|
110
|
+
|
|
111
|
+
### Added
|
|
112
|
+
|
|
113
|
+
- `build_thetadata_eod_cache` and `load_thetadata_eod_cache` provide resumable monthly ThetaData
|
|
114
|
+
EOD Parquet partitions in OCA's canonical schema, including bounded report-date loading for
|
|
115
|
+
research workflows.
|
|
116
|
+
- ThetaData EOD loaders now retrieve the provider's `SOFR` history by default and use the latest
|
|
117
|
+
point-in-time rate as a flat continuously compounded discount anchor. Pass `rate_symbol=None`
|
|
118
|
+
to retain parity-only estimation, or select another supported ThetaData rate symbol.
|
|
119
|
+
- `DataSource.TARDIS_EOD_LOCAL`, `build_local_tardis_eod_options_cache`, and
|
|
120
|
+
`load_local_tardis_eod_options_data` provide exact 08:00 UTC BTC/ETH daily caches from local
|
|
121
|
+
hourly Tardis archives, including exact-time Deribit index prices and source fingerprints.
|
|
122
|
+
- `examples/build_local_options_caches.py` builds SPX, VIX, BTC, and ETH caches in one command.
|
|
123
|
+
- `DataSource.THETADATA_EOD`, `load_thetadata_eod_options_data`,
|
|
124
|
+
`load_thetadata_eod_options_timeseries`, and `map_thetadata_eod_options_data` provide point-in-time
|
|
125
|
+
normalization of ThetaData national EOD equity and ETF option reports.
|
|
126
|
+
- The optional `thetadata` integration extra and a credential-free deterministic example provide
|
|
127
|
+
an opt-in authenticated live mode and selectable ATM-volatility or delta-skew output.
|
|
128
|
+
- A callable ThetaData EOD time-series example builds `OptionsDataDFs`, reconstructs exact
|
|
129
|
+
point-in-time chains, extracts rolling ATM volatility and delta skew, and produces Matplotlib
|
|
130
|
+
plots for either metric.
|
|
131
|
+
|
|
132
|
+
### Changed
|
|
133
|
+
|
|
134
|
+
- The ThetaData ATM/skew and chain-report examples now default to the local SPY cache; authenticated
|
|
135
|
+
live history remains an explicit opt-in path.
|
|
136
|
+
- CBOE SPX and VIX cache conversion now replaces legacy fitted terms with robust parity forwards
|
|
137
|
+
and discounts plus `vanilla-option-pricers` implied volatilities, delta, and vega. SPX is treated
|
|
138
|
+
as PM-settled SPXW at 16:00 New York; VIX uses its 09:30 morning SOQ convention.
|
|
139
|
+
- Normalized local caches now use schema version 3 and one physical `SliceColumn` schema across
|
|
140
|
+
SPX, VIX, BTC, and ETH: UTC timestamps, Arrow strings, and `float64` numerics. CBOE schema-2
|
|
141
|
+
caches must be rebuilt explicitly; metadata records the shared dtype policy and provider-specific
|
|
142
|
+
observation, settlement, analytics, price, and source-fingerprint policies.
|
|
143
|
+
- Call-put parity fitting now uses inverse-spread weights, Huber reweighting, enforced discount
|
|
144
|
+
bounds, and an optional externally supplied discount factor. The provider-neutral implementation
|
|
145
|
+
now lives in `option_chain_analytics.fitters.forward_discount`.
|
|
146
|
+
- ThetaData keeps provider policy in its adapter: SOFR selection, point-in-time report alignment,
|
|
147
|
+
rate staleness, US-equity/ETF scope, expiry timestamp, and provider-level discount bounds.
|
|
148
|
+
- ThetaData implied volatilities and Greeks continue to use `vanilla-option-pricers` exclusively;
|
|
149
|
+
provider IVs are not mixed into OCA's normalized analytics.
|
|
150
|
+
- ThetaData option reports preserve call/put contracts and raw bid/ask quotes while deriving
|
|
151
|
+
forwards and discounts from call-put parity and implied volatilities and Greeks through
|
|
152
|
+
`vanilla-option-pricers`.
|
|
153
|
+
- The optional ThetaData extra installs `python-dotenv`, which ThetaData 1.0.10 imports but does
|
|
154
|
+
not declare in its wheel metadata.
|
|
155
|
+
|
|
156
|
+
### Fixed
|
|
157
|
+
|
|
158
|
+
- Chain reports now use current Matplotlib primitives for ATM annotations and open-interest
|
|
159
|
+
legends instead of removed `qis` helpers, and support filtered single-strike slices.
|
|
160
|
+
|
|
161
|
+
### Removed
|
|
162
|
+
|
|
163
|
+
- Removed the unused and untested CVXPY quote fitter, the `fitters` optional extra, and CVXPY from
|
|
164
|
+
the `all` extra. Generic parity fitting remains part of the core installation.
|
|
165
|
+
- Removed the incomplete Yahoo snapshot adapter, its public lazy export, the `yahoo` extra, and the
|
|
166
|
+
`yfinance` dependency from `all`. The deterministic simulated-data and injected ThetaData-client
|
|
167
|
+
examples remain the credential-free workflows.
|
|
168
|
+
|
|
169
|
+
## [3.0.0] - 2026-08-16
|
|
170
|
+
|
|
171
|
+
### Changed
|
|
172
|
+
|
|
173
|
+
- Renamed the complete local SPX/VIX integration to CBOE terminology: the optional extra is now
|
|
174
|
+
`cboe`, the provider enum is `DataSource.CBOE_LOCAL`, and the loader and mapper are
|
|
175
|
+
`load_local_cboe_options_data` and `map_cboe_options_data`.
|
|
176
|
+
- Local files now resolve under `cboe_options/`, normalized caches identify themselves as
|
|
177
|
+
`option_chain_analytics.cboe.normalized`, and source attributes use `cboe_options`.
|
|
178
|
+
|
|
179
|
+
### Removed
|
|
180
|
+
|
|
181
|
+
- Removed the pre-3.0 source-label API, extra, constants, cache identifier, and directory name.
|
|
182
|
+
Existing normalized SPX/VIX caches must be rebuilt once to receive the CBOE cache metadata.
|
|
183
|
+
|
|
184
|
+
## [2.0.1] - 2026-08-16
|
|
185
|
+
|
|
186
|
+
### Added
|
|
187
|
+
|
|
188
|
+
- `build_local_cboe_options_cache`, which streams source Feather batches into one validated,
|
|
189
|
+
compressed normalized Parquet cache per SPX/VIX underlying.
|
|
190
|
+
- Root `AGENTS.md` guidance covering point-in-time, provider, cache, licensing, dependency, and
|
|
191
|
+
release invariants for automated coding agents.
|
|
192
|
+
|
|
193
|
+
### Changed
|
|
194
|
+
|
|
195
|
+
- Restored support for Python 3.10 and newer, with CI across Python 3.10-3.14 and Python 3.10
|
|
196
|
+
fallbacks in project and distribution metadata checks.
|
|
197
|
+
- CBOE normalisation now always derives bid/ask implied volatilities from source row prices using
|
|
198
|
+
the contemporaneous forward, discount factor, and time to maturity.
|
|
199
|
+
- `load_local_cboe_options_data` now prefers validated per-underlying Parquet caches while retaining
|
|
200
|
+
source parsing as the fallback and supporting filtered point-in-time loads.
|
|
201
|
+
- Point-in-time reconstruction now supports an explicit `previous` observation policy that can
|
|
202
|
+
only select data at or before the requested timestamp; exact selection remains the default.
|
|
203
|
+
|
|
204
|
+
### Fixed
|
|
205
|
+
|
|
206
|
+
- Scheduled chain construction now records the actual selected observation time and cannot borrow
|
|
207
|
+
a later observation when the requested schedule timestamp is absent.
|
|
208
|
+
- Non-invertible CBOE quotes now produce `NaN` bid/ask IV rather than aborting normalization of a
|
|
209
|
+
complete cache build.
|
|
210
|
+
|
|
211
|
+
## [2.0.0] - 2026-08-16
|
|
212
|
+
|
|
213
|
+
### Added
|
|
214
|
+
|
|
215
|
+
- `generate_simulated_options_data`, a deterministic offline `OptionsDataDFs` fixture for tests,
|
|
216
|
+
examples, and documentation.
|
|
217
|
+
- A release-gating `examples/first_success.py` workflow and task-oriented Sphinx documentation.
|
|
218
|
+
- SPX/VIX CBOE fitted-chain mapping to the native option-panel schema.
|
|
219
|
+
|
|
220
|
+
### Changed
|
|
221
|
+
|
|
222
|
+
- Adopted a `src/` package layout and moved repository-only scripts to root `examples/`.
|
|
223
|
+
- Raised the minimum supported Python version to 3.14.
|
|
224
|
+
- Consolidated package metadata in `pyproject.toml` and moved provider integrations to optional
|
|
225
|
+
extras so the offline data-container workflow does not install unrelated feeds.
|
|
226
|
+
- Made the MIT licence explicit and added `CITATION.cff`.
|
|
227
|
+
- Made provider modules lazy under `option_chain_analytics.data` so optional feeds are not imported
|
|
228
|
+
merely to use simulated data.
|
|
229
|
+
- Preserved the historical `option_chain_analytics.data.chain_ts`, `.config`, and
|
|
230
|
+
`.chain_loader_from_ts` import paths as compatibility modules for downstream research code.
|
|
231
|
+
- Local data and output paths now default to ignored repository directories and support
|
|
232
|
+
`OCA_DATA_PATH` and `OCA_OUTPUT_PATH` overrides.
|
|
233
|
+
- Corrected `NearestStrikeOnGrid.BELOW` and `ABOVE` to select the lower and upper grid values,
|
|
234
|
+
respectively; downstream SigmaStrats usage was updated to retain intended behavior.
|
|
235
|
+
|
|
236
|
+
### Fixed
|
|
237
|
+
|
|
238
|
+
- Removed obsolete AWS PostgreSQL trial-account configuration and machine-specific settings.
|
|
239
|
+
|
|
240
|
+
### Removed
|
|
241
|
+
|
|
242
|
+
- Legacy `setup.py` and `requirements.txt` metadata duplicated by `pyproject.toml`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use this software, please cite it using the metadata from this file."
|
|
3
|
+
type: software
|
|
4
|
+
title: "option-chain-analytics: Point-in-time option-chain containers, feed normalisation, reconstruction, and queries for quantitative research"
|
|
5
|
+
version: 5.2.1
|
|
6
|
+
date-released: "2026-09-08"
|
|
7
|
+
authors:
|
|
8
|
+
- family-names: Sepp
|
|
9
|
+
given-names: Artur
|
|
10
|
+
orcid: "https://orcid.org/0000-0002-7038-1748"
|
|
11
|
+
repository-code: "https://github.com/ArturSepp/OptionChainAnalytics"
|
|
12
|
+
url: "https://pypi.org/project/option-chain-analytics/"
|
|
13
|
+
license: MIT
|
|
14
|
+
keywords:
|
|
15
|
+
- option-chains
|
|
16
|
+
- options-data
|
|
17
|
+
- implied-volatility
|
|
18
|
+
- quantitative-finance
|
|
19
|
+
- point-in-time-data
|
|
20
|
+
- python
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our commitment
|
|
4
|
+
|
|
5
|
+
We are committed to a professional, welcoming, and harassment-free project for everyone,
|
|
6
|
+
regardless of background, identity, experience, or viewpoint.
|
|
7
|
+
|
|
8
|
+
Constructive participation includes being respectful, giving specific technical feedback,
|
|
9
|
+
acknowledging mistakes, protecting private information, and focusing disagreement on evidence and
|
|
10
|
+
the work. Harassment, threats, discriminatory language, personal attacks, sexualized conduct,
|
|
11
|
+
trolling, and publishing another person's private information are unacceptable.
|
|
12
|
+
|
|
13
|
+
## Scope and enforcement
|
|
14
|
+
|
|
15
|
+
This policy applies in repository issues, pull requests, reviews, discussions, and other spaces
|
|
16
|
+
where someone represents the OptionChainAnalytics project. Maintainers may edit or remove content,
|
|
17
|
+
reject contributions, issue warnings, or temporarily or permanently restrict participation when
|
|
18
|
+
behavior violates this policy.
|
|
19
|
+
|
|
20
|
+
Report conduct concerns privately to `artursepp@gmail.com`. Reports will be reviewed fairly and the
|
|
21
|
+
privacy and safety of reporters will be respected. Do not use public issues for conduct reports.
|
|
22
|
+
|
|
23
|
+
This policy is informed by the [Contributor Covenant](https://www.contributor-covenant.org/),
|
|
24
|
+
version 2.1.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Contributing to OptionChainAnalytics
|
|
2
|
+
|
|
3
|
+
Thank you for considering a contribution. OCA is intentionally focused on point-in-time
|
|
4
|
+
option-chain containers, feed normalisation, reconstruction, and queries. Pricing belongs in
|
|
5
|
+
`vanilla-option-pricers`; generic analytics and plotting belong in `qis`; strategy backtests and
|
|
6
|
+
paper-specific portfolio logic belong in their research repositories.
|
|
7
|
+
|
|
8
|
+
## Before opening an issue
|
|
9
|
+
|
|
10
|
+
- Search existing issues and state the smallest reproducible task or defect.
|
|
11
|
+
- Do not attach proprietary, licensed, credentialed, or personally identifying data.
|
|
12
|
+
- For a data adapter, document the provider, access/licensing boundary, timezone, spot/forward
|
|
13
|
+
convention, quote units, multiplier, and missing-data behavior.
|
|
14
|
+
- Report security concerns privately as described in [SECURITY.md](SECURITY.md).
|
|
15
|
+
|
|
16
|
+
## Development setup
|
|
17
|
+
|
|
18
|
+
OCA requires Python 3.10 or newer. The full test matrix covers Python 3.10 through 3.14.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
python -m venv .venv
|
|
22
|
+
python -m pip install -e ".[dev,docs]"
|
|
23
|
+
pytest -q
|
|
24
|
+
ruff check src tests examples tools docs/conf.py
|
|
25
|
+
sphinx-build -W -b html docs docs/_build/html
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Run `python examples/first_success.py` to verify the credential-free public path. Before submitting
|
|
29
|
+
a packaging change, also run:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
python -m build
|
|
33
|
+
python tools/verify_distribution.py dist
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Keep automated checks in `tests/test_*.py`. Put a component development diagnostic beside its
|
|
37
|
+
implementation in the nearest `src/option_chain_analytics/**/run_local/<subject>_run.py`, using
|
|
38
|
+
`Locals` and `run_local(local=...)`. These implicit namespace folders intentionally omit
|
|
39
|
+
`__init__.py` and are excluded from built distributions. Broader public workflows stay in
|
|
40
|
+
`examples/`.
|
|
41
|
+
|
|
42
|
+
## Change requirements
|
|
43
|
+
|
|
44
|
+
- Preserve point-in-time behavior: code at observation time `t` must not use later observations.
|
|
45
|
+
- State volatility, rate, dividend, timezone, multiplier, and price conventions explicitly.
|
|
46
|
+
- Add focused tests for defects and public behavior. Numerical changes need an independent
|
|
47
|
+
reference or invariant, not merely a snapshot update.
|
|
48
|
+
- Update `CHANGELOG.md` for user-visible behavior and documentation.
|
|
49
|
+
- Keep local datasets, generated outputs, credentials, and agent reports in the ignored `data/`,
|
|
50
|
+
`outputs/`, and `agents/` directories.
|
|
51
|
+
- Keep pull requests focused; do not combine provider, schema, and strategy changes without a
|
|
52
|
+
clear reason.
|
|
53
|
+
|
|
54
|
+
By participating, you agree to follow the [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Artur Sepp
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
include CHANGELOG.md
|
|
2
|
+
include CITATION.cff
|
|
3
|
+
include CODE_OF_CONDUCT.md
|
|
4
|
+
include CONTRIBUTING.md
|
|
5
|
+
include LICENSE
|
|
6
|
+
include README.md
|
|
7
|
+
include RELEASING.md
|
|
8
|
+
include SECURITY.md
|
|
9
|
+
recursive-include docs *.md *.py
|
|
10
|
+
recursive-include docs *.txt *.xml
|
|
11
|
+
prune docs/_build
|
|
12
|
+
recursive-include examples *.md *.py
|
|
13
|
+
recursive-include tests *.py
|
|
14
|
+
recursive-include tools *.py
|
|
15
|
+
prune src/option_chain_analytics/run_local
|
|
16
|
+
prune src/option_chain_analytics/*/run_local
|
|
17
|
+
prune src/option_chain_analytics/*/*/run_local
|
|
18
|
+
prune src/option_chain_analytics/*/*/*/run_local
|