changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "description": "Protective put and zero-cost collar pricing. All dollar amounts are USD.",
+ "properties": {
+ "barePut": {
+ "description": "Bare protective put: pay premium for a hard floor.",
+ "properties": {
+ "annualCost": {
+ "description": "Premium annualized, in dollars per year.",
+ "type": "number"
+ },
+ "annualCostPct": {
+ "description": "Annualized premium as a fraction of position value.",
+ "type": "number"
+ },
+ "badYearDropPct": {
+ "description": "Bad-year drawdown as a fraction of position value (always >= 0).",
+ "type": "number"
+ },
+ "badYearPrice": {
+ "description": "Position value in dollars at the 10th-percentile (1-in-10 bad year) outcome under real-world drift.",
+ "type": "number"
+ },
+ "coveredLossAtBadYear": {
+ "description": "Dollars the put pays at the bad-year price; 0 when the bad-year drop never reaches the protection floor.",
+ "type": "number"
+ },
+ "expectedProfit": {
+ "description": "Expected position profit in dollars over the tenor under real-world drift.",
+ "type": "number"
+ },
+ "maxLoss": {
+ "description": "Worst-case loss in dollars with the put in place: position - strike + premium.",
+ "type": "number"
+ },
+ "premium": {
+ "description": "Put premium in dollars for the full tenor.",
+ "type": "number"
+ },
+ "premiumToCoveredRatio": {
+ "description": "Premium per dollar of bad-year coverage. null (serialized from Infinity) when the put covers nothing at the bad-year price; above ~0.40 the floor is set too deep.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "premiumToExpectedProfitRatio": {
+ "description": "Fraction of typical-period expected profit consumed by the premium. null (serialized from Infinity) when expected profit is zero or negative; above ~0.50 the hedge eats most of the upside.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "strike": {
+ "description": "Put strike in dollars: (1 - protectionLevel) x position value.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "strike",
+ "premium",
+ "annualCost",
+ "annualCostPct",
+ "maxLoss",
+ "badYearPrice",
+ "badYearDropPct",
+ "coveredLossAtBadYear",
+ "premiumToCoveredRatio",
+ "expectedProfit",
+ "premiumToExpectedProfitRatio"
+ ],
+ "type": "object"
+ },
+ "collar": {
+ "description": "Put financed by a short call: lower or zero net premium in exchange for capped upside.",
+ "properties": {
+ "annualCost": {
+ "description": "Net premium annualized, in dollars per year.",
+ "type": "number"
+ },
+ "annualCostPct": {
+ "description": "Annualized net premium as a fraction of position value.",
+ "type": "number"
+ },
+ "callStrike": {
+ "description": "Short call strike in dollars (the upside cap level).",
+ "type": "number"
+ },
+ "capProbability": {
+ "description": "Real-world probability (0..1) the stock finishes above the call strike at expiration, i.e. the upside cap binds.",
+ "type": "number"
+ },
+ "isZeroCost": {
+ "description": "True when the solved call strike makes the collar effectively zero net premium.",
+ "type": "boolean"
+ },
+ "maxLoss": {
+ "description": "Worst-case loss in dollars with the collar in place.",
+ "type": "number"
+ },
+ "netPremium": {
+ "description": "Net premium in dollars: put premium - call premium, floored at 0.",
+ "type": "number"
+ },
+ "putStrike": {
+ "description": "Long put strike in dollars (same floor as the bare put).",
+ "type": "number"
+ },
+ "upsideCap": {
+ "description": "Maximum upside in dollars before the short call caps gains: callStrike - position value.",
+ "type": "number"
+ },
+ "upsideCapPct": {
+ "description": "Maximum upside as a fraction of position value.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "putStrike",
+ "callStrike",
+ "netPremium",
+ "annualCost",
+ "annualCostPct",
+ "maxLoss",
+ "upsideCap",
+ "upsideCapPct",
+ "isZeroCost",
+ "capProbability"
+ ],
+ "type": "object"
+ },
+ "inputs": {
+ "description": "Echo of the resolved inputs actually priced: positionValue, sector, volatility (the sigma used after ticker/sector resolution), protectionLevel, tenorYears, plus expectedReturn and tickerLabel when supplied.",
+ "properties": {
+ "expectedReturn": {
+ "description": "Caller-supplied annual expected return used for probability metrics. Omitted when not supplied.",
+ "type": "number"
+ },
+ "positionValue": {
+ "description": "Position value priced, in dollars.",
+ "type": "number"
+ },
+ "protectionLevel": {
+ "description": "Protection level as a fraction below spot (0.10 = 10% OTM put).",
+ "type": "number"
+ },
+ "sector": {
+ "description": "Sector tag used for defaults.",
+ "type": "string"
+ },
+ "tenorYears": {
+ "description": "Option tenor in years.",
+ "type": "number"
+ },
+ "tickerLabel": {
+ "description": "Display label echoed from the request (ticker or tickerLabel). Omitted when not supplied.",
+ "type": "string"
+ },
+ "volatility": {
+ "description": "Annualized sigma actually used in pricing, as a decimal.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "positionValue",
+ "sector",
+ "volatility",
+ "protectionLevel",
+ "tenorYears"
+ ],
+ "type": "object"
+ },
+ "payoffRange": {
+ "description": "Price-move range covered by payoffTable, extended at least 15% beyond each collar arm and at least +/-50%.",
+ "properties": {
+ "lowerPct": {
+ "description": "Lower bound of the modeled price move, as a fraction of spot (negative).",
+ "type": "number"
+ },
+ "upperPct": {
+ "description": "Upper bound of the modeled price move, as a fraction of spot.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "lowerPct",
+ "upperPct"
+ ],
+ "type": "object"
+ },
+ "payoffTable": {
+ "description": "Terminal P&L in dollars at each 10%-step drawdown across payoffRange, for the bare put, the collar, and the unhedged position.",
+ "items": {
+ "properties": {
+ "barePutPnl": {
+ "description": "Position + put P&L in dollars at this move.",
+ "type": "number"
+ },
+ "collarPnl": {
+ "description": "Position + collar P&L in dollars at this move.",
+ "type": "number"
+ },
+ "drawdownPct": {
+ "description": "Price move as a fraction of spot (-0.30 = down 30%, 0.2 = up 20%).",
+ "type": "number"
+ },
+ "unhedgedPnl": {
+ "description": "Unhedged position P&L in dollars at this move.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "drawdownPct",
+ "barePutPnl",
+ "collarPnl",
+ "unhedgedPnl"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "realWorldDrift": {
+ "description": "Annual real-world drift used for the probability metrics: expectedReturn when supplied, else the sector long-run return. Does not affect premium math.",
+ "type": "number"
+ },
+ "recommended": {
+ "description": "Suggested structure: collar unless its cap binds too often (>20% probability); protective-put when the put is reasonably priced; none when neither is clean.",
+ "enum": [
+ "collar",
+ "protective-put",
+ "none"
+ ],
+ "type": "string"
+ },
+ "riskFreeRate": {
+ "description": "Annualized risk-free rate used in Black-Scholes, looked up for the tenor, as a decimal.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "inputs",
+ "riskFreeRate",
+ "realWorldDrift",
+ "barePut",
+ "collar",
+ "payoffTable",
+ "payoffRange",
+ "recommended"
+ ],
+ "type": "object"
+}