Skip to content

feat(american-option): closed-form terminal step + documented boundary-split negative result#227

Merged
0xC000005 merged 2 commits into
mainfrom
feature/american-boundary-split
Jun 7, 2026
Merged

feat(american-option): closed-form terminal step + documented boundary-split negative result#227
0xC000005 merged 2 commits into
mainfrom
feature/american-boundary-split

Conversation

@0xC000005

Copy link
Copy Markdown
Owner

Summary

Two Dynamic Chebyshev American-put options behind default-off flags, plus a case-study note explaining the boundary Gamma. Companion to the W1 docs in #226 (kink theory + Chebfun ↔ AutoKnots).

W2 — ClosedFormTerminalStep (a real, modest win)

Seed the terminal backward step with the exact one-period European Black–Scholes value instead of quadrature against the kinked payoff. Removes the strike-corner quadrature distortion at the worst-fitted step.

Measured vs the QLNet FD oracle (flag is default-off; these are the variant numbers):

spot oracle P quadrature P-err closed-form P-err
100 (ATM) 6.08824 0.004631 0.003490
105 4.30275 0.002788 0.001561
110 2.98523 0.001428 0.000207

Greeks essentially unchanged (the terminal kink is a strike-corner effect, not the boundary Gamma).

W3 — BoundarySplit (a documented negative result)

Root-find the exercise boundary B0 ≈ 81.86 (Math.NET Brent) and build the first continuation as a 2-piece ChebyshevSpline knotted there. A multi-agent investigation showed this does not help; it is kept default-off purely as a reproducible artifact:

  • The kink lives in the price max(payoff, C) (applied exactly outside the interpolant), not in the continuation C, which is a Gauss–Hermite (Gaussian) convolution and therefore smooth at B0.
  • Splitting a smooth C resolves no singularity; it only relocates the spot-82 Gamma query onto the clustered Chebyshev piece edge, where the second-derivative differentiation matrix has a measured ~4000× amplification → a non-physical negative Gamma one tick above the knot.
  • Refinement destabilizes both paths (the wide-S Gauss–Hermite quadrature loses finite values at high n).

The correct cure is a front-fixing (Landau) transform, pursued as a follow-up (a log-spot variant first).

Docs

New case-study subsection "Why the boundary Gamma is weak, and why splitting there does not help" — smooth-pasting V_SS jump, the measured negative result, W2's win, and front-fixing as the cure.

Tests / gates

EuropeanPutPrice vs BS analytic; closed-form terminal accuracy profile; boundary finder; boundary-split Gamma profile (the negative-result artifact). Full suite 1801 passed, dotnet format clean, docfx 0 warnings / 0 errors.

Notes

🤖 Generated with Claude Code

…y-split negative result

W2 (ClosedFormTerminalStep): seed the terminal backward step with the exact one-period European Black-Scholes value instead of quadrature against the kinked payoff. Removes the strike-corner quadrature distortion at the worst-fitted step; measured near-money price error drops (ATM 0.004631 -> 0.003490) with Greeks unchanged.

W3 (BoundarySplit): root-find the exercise boundary (Math.NET Brent) and build the first continuation as a 2-piece ChebyshevSpline knotted there. A multi-agent investigation showed this is a NEGATIVE result: the kink lives in the price max(payoff, C), applied exactly outside the interpolant, not in the smooth continuation C, so the knot resolves no singularity and only relocates the spot-82 Gamma query onto the ~4000x-amplified Chebyshev piece edge (non-physical negative Gamma next to the knot). Kept default-off and clearly documented for reproducibility; superseded by the planned front-fixing variant.

Docs: add 'Why the boundary Gamma is weak, and why splitting there does not help' to the case study (smooth-pasting V_SS jump; the measured negative result; W2's win; front-fixing as the correct cure). Tests: EuropeanPutPrice vs BS analytic; closed-form terminal accuracy profile; boundary finder; boundary-split Gamma profile.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 6, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.01124% with 8 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...AmericanOptionDynamicChebyshev/DynamicChebyshev.cs 91.01% 5 Missing and 3 partials ⚠️

📢 Thoughts on this report? Let us know!

@0xC000005 0xC000005 enabled auto-merge June 7, 2026 18:26
@0xC000005 0xC000005 merged commit 8a2069d into main Jun 7, 2026
6 checks passed
@0xC000005 0xC000005 deleted the feature/american-boundary-split branch June 7, 2026 18:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant