Learn / analyze a strategy
Analyze a bull call spread
Two explicitly priced legs, one expiry. The chart is net profit or loss, not option value. Premiums are per share; the contract multiplier is 100.
Try it
Sample dataTwo explicitly priced legs, one expiry. The chart is net profit or loss, not option value. Premiums are per share; the contract multiplier is 100.
Bull call spreadNet P&L · USD / spread
Exact chart data
| Series | Underlying price · USD | Net P&L · USD / spread |
|---|---|---|
| Bull call spread | 80 | -400 |
| Bull call spread | 80.52 | -400 |
| Bull call spread | 81.04 | -400 |
| Bull call spread | 81.56 | -400 |
| Bull call spread | 82.08 | -400 |
| Bull call spread | 82.6 | -400 |
| Bull call spread | 83.12 | -400 |
| Bull call spread | 83.64 | -400 |
| Bull call spread | 84.16 | -400 |
| Bull call spread | 84.68 | -400 |
| Bull call spread | 85.2 | -400 |
| Bull call spread | 85.72 | -400 |
| Bull call spread | 86.24 | -400 |
| Bull call spread | 86.76 | -400 |
| Bull call spread | 87.28 | -400 |
| Bull call spread | 87.8 | -400 |
| Bull call spread | 88.32 | -400 |
| Bull call spread | 88.84 | -400 |
| Bull call spread | 89.36 | -400 |
| Bull call spread | 89.88 | -400 |
| Bull call spread | 90.4 | -400 |
| Bull call spread | 90.92 | -400 |
| Bull call spread | 91.44 | -400 |
| Bull call spread | 91.96000000000001 | -400 |
| Bull call spread | 92.48 | -400 |
| Bull call spread | 93 | -400 |
| Bull call spread | 93.52 | -400 |
| Bull call spread | 94.04 | -400 |
| Bull call spread | 94.56 | -400 |
| Bull call spread | 95.08 | -400 |
| Bull call spread | 95.6 | -400 |
| Bull call spread | 96.12 | -400 |
| Bull call spread | 96.64 | -400 |
| Bull call spread | 97.16 | -400 |
| Bull call spread | 97.68 | -400 |
| Bull call spread | 98.2 | -400 |
| Bull call spread | 98.72 | -400 |
| Bull call spread | 99.24000000000001 | -400 |
| Bull call spread | 99.76 | -400 |
| Bull call spread | 100.28 | -371.9999999999999 |
| Bull call spread | 100.8 | -320.0000000000002 |
| Bull call spread | 101.32 | -268.0000000000007 |
| Bull call spread | 101.84 | -215.99999999999966 |
| Bull call spread | 102.36 | -164.00000000000006 |
| Bull call spread | 102.88 | -112.00000000000045 |
| Bull call spread | 103.4 | -59.99999999999943 |
| Bull call spread | 103.92 | -7.9999999999998295 |
| Bull call spread | 104.44 | 43.99999999999977 |
| Bull call spread | 104.96000000000001 | 96.0000000000008 |
| Bull call spread | 105.48 | 148.0000000000004 |
| Bull call spread | 106 | 200 |
| Bull call spread | 106.52 | 251.9999999999996 |
| Bull call spread | 107.03999999999999 | 303.9999999999992 |
| Bull call spread | 107.56 | 356.0000000000002 |
| Bull call spread | 108.08 | 407.99999999999983 |
| Bull call spread | 108.6 | 459.99999999999943 |
| Bull call spread | 109.12 | 512.0000000000005 |
| Bull call spread | 109.64 | 564 |
| Bull call spread | 110.16 | 600 |
| Bull call spread | 110.68 | 600 |
| Bull call spread | 111.2 | 600 |
| Bull call spread | 111.72 | 600 |
| Bull call spread | 112.24000000000001 | 600 |
| Bull call spread | 112.75999999999999 | 600 |
| Bull call spread | 113.28 | 600 |
| Bull call spread | 113.80000000000001 | 600 |
| Bull call spread | 114.32 | 600 |
| Bull call spread | 114.84 | 600 |
| Bull call spread | 115.36 | 600 |
| Bull call spread | 115.88 | 600 |
| Bull call spread | 116.4 | 599.9999999999999 |
| Bull call spread | 116.92 | 600 |
| Bull call spread | 117.44 | 600 |
| Bull call spread | 117.96000000000001 | 600.0000000000001 |
| Bull call spread | 118.48 | 600 |
| Bull call spread | 119 | 600 |
| Bull call spread | 119.52000000000001 | 599.9999999999999 |
| Bull call spread | 120.03999999999999 | 599.9999999999999 |
| Bull call spread | 120.56 | 600 |
| Bull call spread | 121.08 | 600 |
| Bull call spread | 121.6 | 600.0000000000001 |
| Bull call spread | 122.12 | 600 |
| Bull call spread | 122.64 | 600 |
| Bull call spread | 123.16 | 600 |
| Bull call spread | 123.68 | 600 |
| Bull call spread | 124.2 | 600 |
| Bull call spread | 124.72 | 600 |
| Bull call spread | 125.24000000000001 | 600 |
| Bull call spread | 125.76 | 600 |
| Bull call spread | 126.28 | 600 |
| Bull call spread | 126.80000000000001 | 599.9999999999998 |
| Bull call spread | 127.32 | 599.9999999999998 |
| Bull call spread | 127.84 | 600 |
| Bull call spread | 128.36 | 600 |
| Bull call spread | 128.88 | 600 |
| Bull call spread | 129.4 | 600 |
| Bull call spread | 129.92000000000002 | 600.0000000000002 |
| Bull call spread | 130.44 | 600.0000000000002 |
| Bull call spread | 130.96 | 600 |
| Bull call spread | 131.48000000000002 | 600 |
| Bull call spread | 132 | 600 |
Assumptions & conventions
{
"model": "piecewise-linear expiration payoff",
"contractMultiplier": 100,
"premiums": "user-supplied",
"costs": "no commissions or slippage included",
"currency": "USD"
}Diagnostics & warnings
{
"warnings": [
"Sample premiums are hypothetical, not market quotes. Expiration payoff is not the mark-to-market value before expiration."
]
}Full result · JSON
{
"netDebit": 400,
"netCredit": -400,
"maxProfit": 600,
"maxLoss": -400,
"bounded": {
"profit": true,
"loss": true
},
"breakevens": [
104
],
"points": [
{
"underlyingPrice": 80,
"pnl": -400
},
{
"underlyingPrice": 80.52,
"pnl": -400
},
{
"underlyingPrice": 81.04,
"pnl": -400
},
{
"underlyingPrice": 81.56,
"pnl": -400
},
{
"underlyingPrice": 82.08,
"pnl": -400
},
{
"underlyingPrice": 82.6,
"pnl": -400
},
{
"underlyingPrice": 83.12,
"pnl": -400
},
{
"underlyingPrice": 83.64,
"pnl": -400
},
{
"underlyingPrice": 84.16,
"pnl": -400
},
{
"underlyingPrice": 84.68,
"pnl": -400
},
{
"underlyingPrice": 85.2,
"pnl": -400
},
{
"underlyingPrice": 85.72,
"pnl": -400
},
{
"underlyingPrice": 86.24,
"pnl": -400
},
{
"underlyingPrice": 86.76,
"pnl": -400
},
{
"underlyingPrice": 87.28,
"pnl": -400
},
{
"underlyingPrice": 87.8,
"pnl": -400
},
{
"underlyingPrice": 88.32,
"pnl": -400
},
{
"underlyingPrice": 88.84,
"pnl": -400
},
{
"underlyingPrice": 89.36,
"pnl": -400
},
{
"underlyingPrice": 89.88,
"pnl": -400
},
{
"underlyingPrice": 90.4,
"pnl": -400
},
{
"underlyingPrice": 90.92,
"pnl": -400
},
{
"underlyingPrice": 91.44,
"pnl": -400
},
{
"underlyingPrice": 91.96000000000001,
"pnl": -400
},
{
"underlyingPrice": 92.48,
"pnl": -400
},
{
"underlyingPrice": 93,
"pnl": -400
},
{
"underlyingPrice": 93.52,
"pnl": -400
},
{
"underlyingPrice": 94.04,
"pnl": -400
},
{
"underlyingPrice": 94.56,
"pnl": -400
},
{
"underlyingPrice": 95.08,
"pnl": -400
},
{
"underlyingPrice": 95.6,
"pnl": -400
},
{
"underlyingPrice": 96.12,
"pnl": -400
},
{
"underlyingPrice": 96.64,
"pnl": -400
},
{
"underlyingPrice": 97.16,
"pnl": -400
},
{
"underlyingPrice": 97.68,
"pnl": -400
},
{
"underlyingPrice": 98.2,
"pnl": -400
},
{
"underlyingPrice": 98.72,
"pnl": -400
},
{
"underlyingPrice": 99.24000000000001,
"pnl": -400
},
{
"underlyingPrice": 99.76,
"pnl": -400
},
{
"underlyingPrice": 100.28,
"pnl": -371.9999999999999
},
{
"underlyingPrice": 100.8,
"pnl": -320.0000000000002
},
{
"underlyingPrice": 101.32,
"pnl": -268.0000000000007
},
{
"underlyingPrice": 101.84,
"pnl": -215.99999999999966
},
{
"underlyingPrice": 102.36,
"pnl": -164.00000000000006
},
{
"underlyingPrice": 102.88,
"pnl": -112.00000000000045
},
{
"underlyingPrice": 103.4,
"pnl": -59.99999999999943
},
{
"underlyingPrice": 103.92,
"pnl": -7.9999999999998295
},
{
"underlyingPrice": 104.44,
"pnl": 43.99999999999977
},
{
"underlyingPrice": 104.96000000000001,
"pnl": 96.0000000000008
},
{
"underlyingPrice": 105.48,
"pnl": 148.0000000000004
},
{
"underlyingPrice": 106,
"pnl": 200
},
{
"underlyingPrice": 106.52,
"pnl": 251.9999999999996
},
{
"underlyingPrice": 107.03999999999999,
"pnl": 303.9999999999992
},
{
"underlyingPrice": 107.56,
"pnl": 356.0000000000002
},
{
"underlyingPrice": 108.08,
"pnl": 407.99999999999983
},
{
"underlyingPrice": 108.6,
"pnl": 459.99999999999943
},
{
"underlyingPrice": 109.12,
"pnl": 512.0000000000005
},
{
"underlyingPrice": 109.64,
"pnl": 564
},
{
"underlyingPrice": 110.16,
"pnl": 600
},
{
"underlyingPrice": 110.68,
"pnl": 600
},
{
"underlyingPrice": 111.2,
"pnl": 600
},
{
"underlyingPrice": 111.72,
"pnl": 600
},
{
"underlyingPrice": 112.24000000000001,
"pnl": 600
},
{
"underlyingPrice": 112.75999999999999,
"pnl": 600
},
{
"underlyingPrice": 113.28,
"pnl": 600
},
{
"underlyingPrice": 113.80000000000001,
"pnl": 600
},
{
"underlyingPrice": 114.32,
"pnl": 600
},
{
"underlyingPrice": 114.84,
"pnl": 600
},
{
"underlyingPrice": 115.36,
"pnl": 600
},
{
"underlyingPrice": 115.88,
"pnl": 600
},
{
"underlyingPrice": 116.4,
"pnl": 599.9999999999999
},
{
"underlyingPrice": 116.92,
"pnl": 600
},
{
"underlyingPrice": 117.44,
"pnl": 600
},
{
"underlyingPrice": 117.96000000000001,
"pnl": 600.0000000000001
},
{
"underlyingPrice": 118.48,
"pnl": 600
},
{
"underlyingPrice": 119,
"pnl": 600
},
{
"underlyingPrice": 119.52000000000001,
"pnl": 599.9999999999999
},
{
"underlyingPrice": 120.03999999999999,
"pnl": 599.9999999999999
},
{
"underlyingPrice": 120.56,
"pnl": 600
},
{
"underlyingPrice": 121.08,
"pnl": 600
},
{
"underlyingPrice": 121.6,
"pnl": 600.0000000000001
},
{
"underlyingPrice": 122.12,
"pnl": 600
},
{
"underlyingPrice": 122.64,
"pnl": 600
},
{
"underlyingPrice": 123.16,
"pnl": 600
},
{
"underlyingPrice": 123.68,
"pnl": 600
},
{
"underlyingPrice": 124.2,
"pnl": 600
},
{
"underlyingPrice": 124.72,
"pnl": 600
},
{
"underlyingPrice": 125.24000000000001,
"pnl": 600
},
{
"underlyingPrice": 125.76,
"pnl": 600
},
{
"underlyingPrice": 126.28,
"pnl": 600
},
{
"underlyingPrice": 126.80000000000001,
"pnl": 599.9999999999998
},
{
"underlyingPrice": 127.32,
"pnl": 599.9999999999998
},
{
"underlyingPrice": 127.84,
"pnl": 600
},
{
"underlyingPrice": 128.36,
"pnl": 600
},
{
"underlyingPrice": 128.88,
"pnl": 600
},
{
"underlyingPrice": 129.4,
"pnl": 600
},
{
"underlyingPrice": 129.92000000000002,
"pnl": 600.0000000000002
},
{
"underlyingPrice": 130.44,
"pnl": 600.0000000000002
},
{
"underlyingPrice": 130.96,
"pnl": 600
},
{
"underlyingPrice": 131.48000000000002,
"pnl": 600
},
{
"underlyingPrice": 132,
"pnl": 600
}
]
}Use it in your project
Returns a payoff report with named summary fields and an ordinary points array. Each point has underlyingPrice and pnl; amounts include the 100-share multiplier and premiums. These five explicit prices sample the same position as the chart.
import { legs, strategy } from '@insiderfinance/totalfinance/strategy';
const position = strategy([
legs.call({ strike: 100, premium: 6, quantity: 1 }),
legs.call({ strike: 110, premium: 2, quantity: -1 }),
], { multiplier: 100 });
const underlyingPrices = [80,90,100,110,132];
const result = position.payoff({ prices: underlyingPrices });
console.log(result);
Output of this example
{
"netDebit": 400,
"netCredit": -400,
"maxProfit": 600,
"maxLoss": -400,
"bounded": {
"profit": true,
"loss": true
},
"breakevens": [
104
],
"points": [
{
"underlyingPrice": 80,
"pnl": -400
},
{
"underlyingPrice": 90,
"pnl": -400
},
{
"underlyingPrice": 100,
"pnl": -400
},
{
"underlyingPrice": 110,
"pnl": 600
},
{
"underlyingPrice": 132,
"pnl": 600
}
]
}
Reproduce this entire playground
This complete example reproduces every chart point and the full playground result. Sample generation and chart mapping are example setup, not required conversions of library outputs.
import { legs, strategy } from '@insiderfinance/totalfinance/strategy';
const position = strategy([
legs.call({ strike: 100, premium: 6, quantity: 1 }),
legs.call({ strike: 110, premium: 2, quantity: -1 }),
], { multiplier: 100 });
const result = position.payoff({ prices: { from: 80, to: 132, steps: 101 } });
console.log(result);Both examples use the last successfully calculated inputs. The first call may show fewer scenarios or selected report fields, as labeled above. Displayed metrics are rounded; copied calculations retain exact values.
Continue with the full API reference or the API levels guide.