|
quant-pricer-cpp
|
./scripts/reproduce_all.sh builds the Release target, runs both FAST and SLOW labels, and regenerates deterministic CSV/PNG artifacts under docs/artifacts/. Use REPRO_FAST=1 to trim runtime when iterating locally. Every generator updates docs/artifacts/manifest.json with the command, seeds, compiler info, and hardware snapshot.
| Shorthand | Definition |
|---|---|
vol pts | Absolute implied-vol percentage points (0.01 = 1%). Reported RMSE/MAE stats stay in vol-space, not bps. |
bps | One basis point (1e-4). Used for quotes-weighted OOS IV MAE so reviewers can compare against surfaces from other vendors. |
ticks | Price increments of 0.05 USD, matching SPX option tick size. Price RMSE/MAE are quoted in ticks. |
vega-wtd | Weighted by per-node Black–Scholes vega before averaging errors. |
quotes-wtd | Weighted by the aggregated quote counts per tenor/moneyness bucket. |
The dedicated WRDS appendix (`docs/WRDS_Results.md`) lists the current scalar metrics next to the CSV/JSON artifacts that store them.
Analytic Black–Scholes, deterministic Monte Carlo (counter RNG + control variate), and Crank–Nicolson disagree by <5 bps across strikes when configured with the same market inputs. MC error bars reflect the 95% CI from 200k paths, so the dashed PDE line and green analytic curve are visually on top of one another.

./scripts/reproduce_all.sh or python scripts/tri_engine_agreement.py --quant-cli build/quant_cli --output docs/artifacts/tri_engine_agreement.png --csv docs/artifacts/tri_engine_agreement.csvruns.tri_engine_agreementSobol + Brownian bridge delivers ≈1.4× tighter RMSE than pseudorandom paths when both spend the same time budget (European + Asian calls). The CSV tabulates the matched time grid, implied path counts, and RMSE ratio so reviewers can re-derive the advantage.

./scripts/reproduce_all.sh or python scripts/qmc_vs_prng_equal_time.py --output docs/artifacts/qmc_vs_prng_equal_time.png --csv docs/artifacts/qmc_vs_prng_equal_time.csv --fastruns.qmc_vs_prng_equal_timeCrank–Nicolson with two Rannacher steps retains ≈second-order accuracy as the spatial grid grows; price errors fall below 1e-4 on a 401×400 grid while Δ/Γ stay within 1e-5 of Black–Scholes.

./scripts/reproduce_all.sh or python scripts/pde_order_slope.py --skip-build --output docs/artifacts/pde_order_slope.png --csv docs/artifacts/pde_order_slope.csvruns.pde_order_slopeCounter-based RNG plus antithetic sampling keeps the LR Theta/Vega and mixed-pathwise Gamma within analytic 95% bands at 200k paths, and the CSV captures per-estimator standard errors for downstream dashboards.

./scripts/reproduce_all.sh or python scripts/mc_greeks_ci.py --quant-cli build/quant_cli --output docs/artifacts/mc_greeks_ci.png --csv docs/artifacts/mc_greeks_ci.csvruns.mc_greeks_ciQE now uses the integrated-variance drift term from Andersen (σ∫√v dW₁ identity) so asset/variance covariance respects the CIR expectation. The refreshed sweep still shows a stubborn bias versus the analytic CF in the at-the-money base regime (~4.4 price units at 64 steps, 80k paths), but the stress/near-Feller scenario drops below ~1 price unit with 8–16 steps. The new figure tracks both price and implied-vol RMSE across three parameter grids for QE and Euler.

./scripts/reproduce_all.sh or python scripts/heston_qe_vs_analytic.py --quant-cli build/quant_cli --output docs/artifacts/heston_qe_vs_analytic.png --csv docs/artifacts/heston_qe_vs_analytic.csv --fastruns.heston_qe_vs_analyticbench_mc + bench_pde snapshots live under docs/artifacts/bench/ (JSON from Google Benchmark + derived CSV/PNG via scripts/generate_bench_artifacts.py). Reproduce all three plots with:
OpenMP scaling: near-linear throughput from 1→8 threads with the dashed line showing ideal scaling.

QMC vs PRNG (equal time): bars show σ·√ms so lower is better at matched wall-clock. Barrier down-and-out calls retain a ~3% delta-hedge tighter RMSE after time-normalisation, while the Asian payoff stays parity because the Brownian bridge overhead dominates.

PDE −2 slope: Crank–Nicolson retains the expected second-order convergence; the dashed reference line encodes the −2 slope on the log–log plane and the fitted slope annotation comes from the benchmark JSON.

QuantLib serves as an industry reference point. The parity harness exercises quant_cli (analytic BS, barrier PDE, American PSOR) and QuantLib engines (analytic, analytic barrier, binomial CRR) on the same scenarios, then reports price gaps in cents plus runtime deltas.

python scripts/ql_parity.py --output docs/artifacts/ql_parity/ql_parity.png --csv docs/artifacts/ql_parity/ql_parity.csvThe refreshed WRDS pipeline ingests SPX from OptionMetrics IvyDB, resolves secid via optionm.secnmd, pulls the year-partitioned optionm.opprcdYYYY table, filters stale quotes, recomputes implied vols with the project’s solver, and bins by tenor/moneyness. A vega-weighted Heston calibration (least-squares in IV space) and bootstrap CIs are emitted alongside next-day OOS errors and delta-hedged one-day PnL histograms. Only aggregated CSV/PNGs under docs/artifacts/wrds/ are committed.
iv_rmse_volpts_vega_wt, iv_mae_volpts_vega_wt (vol pts, vega-weighted)iv_p90_bps (90th percentile IV error, basis points)price_rmse_ticks (RMSE vs market prices, ticks)iv_mae_bps (quotes-weighted IV MAE), price_mae_ticks (quotes-weighted price MAE)mean_ticks and pnl_sigma (tick σ).Regenerate the bundled sample snapshot with ./scripts/reproduce_all.sh (the pipeline runs even without credentials) or explicitly via python -m wrds_pipeline.pipeline --dateset wrds_pipeline_dates_panel.yaml --use-sample. To hit the live WRDS database export WRDS_ENABLED=1, WRDS_USERNAME, WRDS_PASSWORD, then run the same command without --use-sample. MARKET tests (ctest -L MARKET) remain opt-in and skip automatically when the env vars are absent.
artifacts/manifest.json records the git SHA, compiler/flag metadata, CPU info, RNG modes, and the exact CLI invocations behind every plot above. CI appends to the same manifest so reviewers can diff the bundle before shipping changes.
The GitHub Pages deployment also hosts the latest gcovr HTML report under coverage/, so you can drill down into uncovered lines without pulling artifacts locally.