feat(american-option): closed-form terminal step + documented boundary-split negative result#227
Merged
Merged
Conversation
…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 Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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):
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.NETBrent) and build the first continuation as a 2-pieceChebyshevSplineknotted there. A multi-agent investigation showed this does not help; it is kept default-off purely as a reproducible artifact:max(payoff, C)(applied exactly outside the interpolant), not in the continuationC, which is a Gauss–Hermite (Gaussian) convolution and therefore smooth atB0.Cresolves 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.SGauss–Hermite quadrature loses finite values at highn).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_SSjump, the measured negative result, W2's win, and front-fixing as the cure.Tests / gates
EuropeanPutPricevs BS analytic; closed-form terminal accuracy profile; boundary finder; boundary-split Gamma profile (the negative-result artifact). Full suite 1801 passed,dotnet formatclean,docfx0 warnings / 0 errors.Notes
🤖 Generated with Claude Code