SOLVE_STRIKE — Select a Strike for a Target Premium
Find the short-option strike that funds a specified long leg or meets a chosen premium budget. Uses the original EUROPEAN_FFT result, including its characteristic-function model and any modeled skew. Both legs must have the same option type and expiry.
Required pricing model: EUROPEAN_FFT
Dependency for MCP discovery: construct a pricing model with EUROPEAN_FFT before calling SOLVE_STRIKE. Retrieve its current full syntax and supported extracts with:
DESCRIBE_COMMAND("EUROPEAN_FFT")
See also EUROPEAN_FFT in the command reference. Pass the original result F to SOLVE_STRIKE; the symbolic characteristic function CF alone contains no priced strike grid.
CF=SYM(EXP(i*U*(R-Q-0.5*SIG^2)*T-0.5*SIG^2*U^2*T))
F=EUROPEAN_FFT(CF,S0,100,R,0.03,Q,0.01,T,1,ALPHA,1.5,N,16384,ETA,0.25,SIG,0.20,CF_RETURN,1)
S=SOLVE_STRIKE(F,100*EXP(0.02),1,2,0,"PUT")
S
The first line defines a Black-Scholes log-return characteristic function. S0 is spot; R is the continuous quote-currency rate; Q is the continuous income yield or FX base-currency rate; T is remaining years; SIG is annualized volatility. Rates and volatility are decimals. ALPHA is Carr-Madan damping, N the power-of-two FFT grid size, and ETA the frequency spacing. CF_RETURN=1 identifies a log-return characteristic function. The example's forward-ATM long strike is 100*EXP((0.03-0.01)*1).
Inspect EXTRACT(F,"diagnostics"), EXTRACT(F,"prices") and EXTRACT(F,"parameters") to review the grid, prices and inputs. For a richer distribution or smile, use its supported symbolic CF and parameter pairs in EUROPEAN_FFT; SOLVE_STRIKE then uses that model's prices.
Syntax
SOLVE_STRIKE(fftModel,longStrike,longQuantity,shortQuantity,targetPremium,type)
SOLVE_STRIKE(fftModel,longStrike,longQuantity,shortQuantity,targetPremium,type,minStrike,maxStrike)
- fftModel: Original EUROPEAN_FFT result, not SYM(cf) or an extracted matrix. The solver reads its Strike, Call and Put columns.
- longStrike: Positive known strike, inside the FFT grid. For an ATM-forward trade, supply the forward-consistent strike.
- longQuantity, shortQuantity: Positive finite quantities in the same underlying units. Fractional quantities are allowed.
- targetPremium: Signed initial net premium: positive means a debit paid, negative means a credit received, and zero means even premium.
- type: Quoted CALL or PUT, case-insensitive.
- minStrike, maxStrike: Optional search bounds for the short strike, both inside the model grid. Bounds need not include the long strike.
All prices are in the FFT model's premium units, per unit of underlying. Quantities multiply those premiums; the target is the total signed premium for those quantities. Contract multipliers must be applied consistently.
Premium equation
longQuantity * price(longStrike) - shortQuantity * price(shortStrike) = targetPremium
requiredShortPrice = (longQuantity * price(longStrike) - targetPremium) / shortQuantity
For an even-premium 1-by-2 put spread, supply quantities 1 and 2 and target 0. The solver chooses a put whose premium is half the known long put premium. For monotone put prices this normally places the short strike below the long strike. Call ratio spreads work analogously with a higher short strike.
Example
CF=SYM(EXP(i*U*(R-Q-0.5*SIG^2)*T-0.5*SIG^2*U^2*T))
F=EUROPEAN_FFT(CF,S0,156.72,R,0.011199964516129033,Q,0.03630967741935484,T,152/365.25,ALPHA,1.5,N,16384,ETA,0.25,SIG,0.10,CF_RETURN,1)
S=SOLVE_STRIKE(F,155.09088241574716,1,2,0,"PUT")
SThe example models the earlier USD/JPY scenario with 10% assumed annual volatility and decimal continuous rates. The expected short strike is near 150.32, with the exact answer depending on FFT resolution. The forward-ATM long strike is held fixed at 155.0908824.
K=EXTRACT(S,"strike")
EXTRACT(S,"diagnostics")
EXTRACT(S,"net_premium")
EXTRACT(S,"residual")Using the result
The result is an extractable trade object. Its default display is a small slideshow: trade and premium table, expiry profit/loss chart, and premium verification. The chart shows the terminal payoff less initial net premium, not a historical mark-to-market path.
Use EXTRACT(S,"strike") to obtain a NumberOperator that can be passed to OPTION_SERIES or OPTION_DELTA_SERIES. EXTRACT(S,"slideshow") returns the presentation explicitly; trade, payoff and premium_check return its individual panels. Other extracts expose premiums and the strike bracket.
OPTION_SERIES currently uses Black-Scholes, whereas EUROPEAN_FFT may use a different characteristic-function model. Passing a strike between the tools does not transfer the FFT distribution or smile: the strategy is even premium under the supplied FFT grid. Reprice with consistent assumptions before treating a historical series as an even-premium trade. Even a Black-Scholes FFT grid has interpolation error, so check the resulting initial net premium.
Method and validation
Both long and short premiums use linear interpolation in strike on the existing FFT grid. The solver scans adjacent price brackets and inverts the local line; no new FFT is computed. It verifies the achieved net premium and returns no result if the requested price is not bracketed. It never extrapolates or silently rounds strikes.
Requires at least two finite positive increasing strikes, finite option prices, positive quantities and an ordered search interval. Negative prices and monotonicity violations larger than 1e-10 times the greater of 1 and the maximum absolute selected-column price are rejected. Smaller negative roundoff is clipped to zero and smaller monotonicity violations flattened on a private copy. Flat target-price intervals are rejected as nonunique.
A tiny residual verifies the interpolated grid equation, not the economic accuracy of the FFT model. Inspect bracket_low/bracket_high and repeat with a finer grid when precision matters. The command does not validate convexity or all no-arbitrage bounds. It does not optimize N, ETA or ALPHA, impose a market strike increment, or guarantee an executable dealer quote. Reprice after rounding to an available strike. Input model data is not modified.
Interpretation
Zero initial net premium does not remove market exposure or margin requirements. A 1-by-2 put spread retains the downside exposure of an additional short put below its lower strike. Transaction costs, bid/ask spreads and financing are not included.
This command solves one unknown short strike for same-type legs. Mixed call/put collars, multiple butterfly wings and complete strategy optimization require additional strategy logic.
Available extracts
Save the command result in a variable, then use EXTRACT(result, "key"). Availability can depend on the input form and fitted model.
slideshowtradesummarypayoffpremium_checkstrikeshort_strikelong_strikelong_priceshort_pricenet_premiumtarget_premiumresidualbracket_lowbracket_highdiagnostics
In indexed patterns such as beta:n, replace n with the required index.