Technical manual
1. Access and account
The application lives at app.optionstreams.com and works in any recent browser, on Mac, PC and tablet; there is nothing to install. You create an account with email and password, start the 3-day free trial (no card) from your profile whenever you like, and at the end of the trial you choose the monthly or annual plan (payment through Stripe by card, PayPal or Link).
- Account
- Profile and billing details (company name and VAT number appear on invoices), subscription status with renewal date, payment history with PDF invoices, a portal to change card, switch from monthly to annual or cancel, password change, logout from all devices, download of all your data and account deletion.
- Upgrade to Pro
- Appears in the header for users without an active subscription and leads to the plans.
- The method / Manual
- This documentation, also reachable from inside the application, with the header of the logged-in user.
2. Application header
- DAX / S&P 500 selector
- Changes everything at once: chain, quote, candles, levels, multiplier (€5 per point on the DAX, $100 on the S&P), currency, strike step (50 and 5) and saved strategies. Legs being worked on are kept separate for each index.
- Live quote
- Index price updated every 10 seconds, with change from the previous close and source (Xetra or an OTC indication outside trading hours for the DAX; S&P Indices for the S&P 500). The whole chain is repriced at every update.
- Chain of
- The day of data you are working on. Normally the latest available; the menu lets you go back to an earlier day in the archive (up to 25) to see what positioning and levels looked like. For the DAX it is the Eurex settlement of the previous evening; for the S&P the most recent CBOE snapshot (delayed by 15 minutes).
- Strategies / Market / ORACALL
- The three main views; the active one has a red outline. ORACALL (in yellow) is available only on the DAX.
- update spot
- Turns the automatic quote update on or off. With the spot stopped, theoretical prices stay at those of the last update.
- manual spot
- Type an index level and the whole chain, the theoretical prices and the chart are recalculated on that value: it answers "what happens if the index goes to X". Clear the field to go back to the live price.
- reload data
- Reloads the chain and the saved strategies from the server and, for the S&P, forces the download of a new snapshot.
3. Strategies view
This is the simulator: on the left the chain of the chosen expiry, on the right the strategy with the legs table, the summary, the profit and loss chart and the day-by-day matrix.
3.1 Chain
- Expiry
- Menu with all open expiries, with date, type (weekly or monthly) and days remaining. On the S&P the expiries are daily.
- Greeks
- Adds gamma, vega and theta per strike to the basic columns.
- + buy / − sell
- Sets the sign of the leg you add by clicking a price. Holding alt while you click reverses the sign.
Columns, symmetric for calls (on the left) and puts (on the right) around the central strike:
| Column | Meaning |
|---|---|
| OI | Open interest, i.e. open contracts at that strike. The bar next to the number shows its relative weight; cells larger than 25% of the maximum are highlighted: these are the "walls". |
| ΔOI | Change in open interest versus the previous day in the archive, green if up, red if down, a dot if unchanged. |
| IV | Implied volatility of the strike, derived from the settlement price (DAX) or from the bid-ask mid (S&P) and re-anchored to the current index price through the smile. |
| δ, γ, vega, θ | Greeks per contract relative to the spot: delta (price change for +1 index point), gamma (change in delta for +1 point), vega (per +1 volatility point), theta (decay per calendar day). |
| theo | Theoretical option price at the current index price, in points. It is the value you click to add the leg. |
The highlighted row is the ATM strike, the one closest to the forward. The table scrolls to it automatically whenever the expiry changes.
3.2 Expiry levels
Above the chain, a row of chips summarises the expiry based on the day's open interest:
| Chip | What it shows |
|---|---|
| forward | Forward price of the index at expiry, derived from call-put parity of the settlements (average of the five strikes with the closest call and put prices). |
| ATM IV | Implied volatility at the forward strike, read from the smile. |
| 1σ | Expected one-standard-deviation move up to expiry: forward × ATM IV × √time. The market "expects" to stay within ±1σ about 2 times out of 3. |
| max pain | Strike at which the total value of the options at expiry is lowest for those who bought them (and highest for those who sold them). |
| fair value | Price at which the cumulative calls below and the cumulative puts above balance out (cumulative method). |
| gamma flip | Price at which the expiry's GEX changes sign. |
| P/C | Ratio of put to call open interest for the expiry. |
| put40 / call40 | Levels below which 40% of the put open interest sits and above which 40% of the calls sit: the "soft" edges of the most heavily defended area. |
| call walls / put walls | The three strikes with the most open interest above the forward (calls) and below it (puts). |
3.3 Building the strategy
- Click on the theoretical price
- Adds a leg with that strike, that expiry, that type and the sign of the selector. The entry price is fixed at the theoretical price of that moment and stays locked, so the P&L really measures the position.
- Double Diagonal7 and Double Diagonal60 presets
- The two reference structures of ORACALL, built in one click on any day (DAX only). Double Diagonal7: sells the put and the call 400 points apart (forward ±200) on the weekly expiry of next week and buys the put and the call 50 points further out (forward ±250) on the following week; on a Wednesday 30 September it sells 9 October and buys 16 October, and the same on a Friday or a Monday. Double Diagonal60: skips next month, sells the monthly expiry two months out and buys the one three months out (in September: sells November, buys December); the sold options sit at 0.5σ of the sold expiry from the forward, with a minimum of 400 and a maximum of 600 points per side, and the bought ones 100 points further out. The strikes can then be adjusted in the table. The Backtest button next to the presets takes you straight to ORACALL › backtest › "my strategy" and replays it from 2020.
- Classic presets
- Ready-made constructions on the selected expiry (and on the next one for the calendars), with strikes chosen at ±1σ from the forward: double calendar (sells the put and the call at ±1σ on the short expiry, buys the same strikes on the next one), calendar (sells the short ATM call, buys the long one), vertical (buys the ATM call, sells the call at +1σ), iron condor (sells the put at −1σ and the call at +1σ, buys the wings at ±2σ), butterfly (buys the call at −1σ, sells two ATM calls, buys the call at +1σ), strangle (sells the put at −1σ and the call at +1σ), straddle (sells the ATM put and call). After the preset the strikes can be adjusted in the table.
- Legs table
- Every field is editable: quantity (negative for sales), expiry, type (C, P or F for an index future), strike, entry price. The theo, IV, Greeks and P&L columns recalculate on their own; the Greeks are already multiplied by quantity and multiplier.
- entries at market
- Realigns all entry prices to the current theoretical prices, as if you were opening the position now. By typing in the "entry" column you enter the price actually executed.
- Backtest
- Takes you straight to ORACALL › Oracall backtest › "my strategy" and launches the replay from 2020 of the legs on your screen, without having to switch tab and press anything else (DAX only).
- saved / save / delete / clear
- Strategies are saved by name on your account, separately for each index, and can be reloaded from any device.
3.4 Summary
| Item | Meaning |
|---|---|
| debit / credit | What you pay or collect to open the position, in currency, and below it in points. |
| P&L now | Profit or loss at the current price, relative to the entry prices. |
| P&L at day N | The same, projected to the day chosen with the chart slider, at unchanged price. |
| delta, gamma, vega, theta | Overall Greeks of the position at the selected day, in currency: delta per +1 index point, vega per +1 volatility point, theta per one day. |
| max profit / max loss | Extremes of the short-expiry curve within the price range shown. With legs that are long beyond the short expiry the value is estimated by repricing the remaining legs. |
| breakeven at expiry | Index levels at which the short-expiry curve crosses zero. |
3.5 P&L chart
Profit and loss as a function of the index price, at several dates.
| Element | Meaning |
|---|---|
| blue curve | Value of the position right now. |
| white curve | Value at the expiry of the nearest leg ("short expiry"): it is the curve on which you read breakeven, maximum profit and maximum loss. |
| yellow curve | The day chosen with the day slider. |
| thin light-blue curves | The intermediate days, equally spaced between today and the short expiry (tick daily curves to show or hide them). |
| dashed verticals | Max pain (purple), fair value (light blue), gamma flip (orange) of the short expiry; the solid blue vertical is the current price; the thin ones are the strikes of the legs. |
- day
- Moves the yellow curve and the "at day N" values of the summary between today and the short expiry. Dates are calendar dates and take into account the exact time of the fixing.
- IV
- Shifts the whole volatility surface by ±N points: it lets you see what the position does if volatility rises or falls.
- range
- Width of the price axis, from ±2% to ±14% around the spot.
- sticky strike
- Normally the smile "moves" with the price (sticky moneyness: a strike that becomes more OTM takes the IV of a more OTM strike). With this tick every strike keeps its own IV even if the index moves (sticky strike). It changes the theoretical prices at a spot different from the current one.
Hovering over the chart shows the P&L of each curve at the index level pointed at.
3.6 Day-by-day P&L
A table with the P&L in currency for each combination of index level (rows, in steps of 100 points on the DAX and 25 on the S&P, around the spot) and date (columns, eight dates from today to the short expiry). The row with the blue border is the current level. It is the numerical version of the chart, handy for reading exact values.
4. Market view
The overall picture: hourly candles of the index with future expiries projected forward and the open-interest levels drawn on the price, the aggregate GEX panel, and below them the tables of expiries, open-interest flows and the backtest.
4.1 Controls
- history
- How many days of candles to show on the left (2, 5, 10 or 20).
- horizon
- How far into the future to go (2 weeks, 1 month, 45 days, 3 months). It decides which expiries appear, and on which ones the aggregate GEX, aggregate flip, per-strike bars and flows are computed.
- max pain / gamma flip / fair value
- Turn the three levels on and off on every expiry vertical.
- values
- Shows or hides the boxes with the number, leaving only the dashes.
- link levels
- Draws the dashed polylines joining the same level across successive expiries, each in the colour of the level: you can see whether the centre of gravity rises or falls as time goes on.
- aggregate flip
- Pink horizontal line at the price where the GEX of all expiries within the horizon changes sign, with the area below it lightly shaded in red ("accelerator" regime).
- GEX on chart
- Horizontal GEX bars per strike, call wall and put wall, flow diamonds (see 4.2).
- daily expiries
- S&P 500 only: normally the chart shows Fridays and the monthlies; with the tick, Mondays, Tuesdays, Wednesdays and Thursdays appear too.
- refresh
- Forces the download of the candles and the recalculation of GEX and flows.
The Expiries, OI flows and Backtest sections close and reopen by clicking on the title; the freed space goes to the sections left open (by closing Expiries and Flows, the backtest scrolls freely downwards even with hundreds of rows). Your choice is remembered.
4.2 Price and expiries chart
The chart has two zones. On the left the past, one candle for each trading hour (green if it closes above the open, red if below), with day separators. To the right of the grey "now" line is the future, on a linear scale in calendar days.
| Element | Meaning |
|---|---|
| yellow vertical | Weekly expiry, with the date at the top and the days remaining at the bottom. |
| red vertical, thicker | Monthly expiry (third Friday). |
| boxes on the vertical | Max pain (purple), gamma flip (orange), fair value (light blue) of that expiry, at the height of the price. If two are too close they are staggered and a thin line reconnects them to the right point. |
| dashed blue line | Current price, with the value on the right axis. |
| dashed pink line | Aggregate flip; below it, the shaded area marks the regime in which dealers amplify moves. |
| horizontal bars | GEX per strike aggregated over the expiries within the horizon, anchored to the right axis: green if positive (calls dominate, brake), red if negative (puts dominate, accelerator); the length is proportional to the value. For readability they are drawn only within 12% of the spot. |
| call wall / put wall | Strike with the largest positive GEX and strike with the largest negative GEX, with a dotted line and a tag (strike and value in millions). If the wall is off the scale, a tag with an arrow appears at the edge. |
| orange diamond / cyan diamond | At the end of a bar: at that strike there was buying to open yesterday (orange, dealers short gamma) or selling to open (cyan, dealers long gamma). See 4.5. |
Mouse. On a candle you read open, high, low and close. On a vertical you read type, days, open interest and the three levels. On a bar you read strike, net GEX, the call part and the put part with their open interest, the change in OI and the flow readings. The legend under the chart lists the sources, the net GEX at the spot with the horizon used, and the two walls.
4.3 Aggregate GEX panel
To the right of the chart. The bars show the total GEX of all expiries within the horizon recalculated at different hypothetical price levels (from 8% below to 8% above): red where negative, green where positive. The blue line is the current price, the dashed pink one the aggregate flip.
| Indicator | Meaning |
|---|---|
| GEX at spot | Net value at the current price, in millions of currency for a 1% move. It matches the total shown in the chart legend. |
| aggregate flip | Price at which the profile changes sign (if it crosses more than once, the crossing closest to the spot). |
| distance | Points between flip and price: positive if the flip is above (we are in the negative zone), negative if it is below. |
| contributions | The four expiries that weigh most on the GEX at spot, with the sign (M = monthly, W = weekly). |
| regime phrase | "short gamma" or "long gamma", with the operational reading. |
4.4 Expiry table
| Column | Meaning |
|---|---|
| expiry, type, days | Date, weekly or monthly, calendar days to the fixing (with decimals). |
| OI | Total open interest of the expiry, calls plus puts. |
| forward | Forward price at expiry based on the current price. |
| ATM IV | Forward implied volatility. |
| GEX | Net GEX of that expiry alone at the current price, in millions. |
| max pain, gamma flip, fair value | The three levels. |
| MP-spot gap | Distance in points between max pain and the current price: how "stretched the elastic" is. |
4.5 OI flows
Changes in open interest from the previous day in the archive, strike by strike and side by side, with a reading of who is opening or closing. The reading compares the change in OI with that of the strike's implied volatility, net of the change in the expiry's ATM IV: buyers push IV up, sellers push it down.
| OI | Relative IV | Reading | Dealers |
|---|---|---|---|
| up | up | buying to open | short gamma (accelerator) |
| up | down | selling to open | long gamma (brake) |
| down | down | closing of long positions | — |
| down | up | covering of short positions | — |
If the IV moves by less than 0.25 points the reading is "side uncertain". Only changes of at least 100 contracts on the DAX (500 on the S&P) and of at least 3% of the strike's open interest are considered. Columns: expiry, strike, side, OI, ΔOI, relative ΔIV in volatility points, reading, estimated dealer position, and flow GEX, i.e. how much the contracts opened yesterday alone add to or take away from the GEX with the estimated sign. The header summarises the day: total change in calls and puts and contracts read as purchases or sales. The calculation of the main GEX stays with the standard convention; the flows are extra information.
4.6 Expiry backtest
DAX only. For every expiry already past, since January 2020, it compares the levels the app showed on the last day before settlement with the actual settlement: the official Eurex settlement price (EDSP) when it is in the archive (from March 2025), otherwise an estimate from the index value at 13:01 on expiry day derived from one-minute data (average error 15 points versus the official EDSPs).
| Column | Meaning |
|---|---|
| forward, max pain, fair value | The values of the last day available before expiry. |
| settlement | Settlement level, with the source (Eurex EDSP or estimate), or the reason why it was not possible to estimate it. |
| MP err, FV err, fwd err | Gap in points between each level and the settlement: positive if the settlement is above the level. |
The header shows the mean absolute error of the three references. Over more than 340 expiries the result is clear-cut: the forward is the most accurate reference (average error 118 points on the last day), max pain and fair value are wrong by more and guess the side of the settlement about one time in two. The backtest extends itself every week.
5. ORACALL view
DAX only. ORACALL combines the historical archive (open interest, prices and settlements of every expiry since January 2020) with today's chain to answer three questions: where the settlement has historically ended up relative to today's forward (the cone), which double calendar to open today (the structure) and whether the week or the two-month period belongs to a historically favourable group (the suitability). Everything it shows has been measured on a backtest, not deduced from a theory: every number has next to it how many trades support it. The same engine also replays from 2020 any strategy built in Strategies, and tells you whether today's conditions are historically favourable to it (5.7).
The reference strategy is the double calendar: you sell a put and a call on the near expiry and buy the same strikes on the next expiry. It gains if the index at the settlement of the sold expiry is close to one of the two strikes, and loses if it moves far away. In the weekly version you sell the expiry at 5-7 days and buy the one at 12-14, with strikes 400 points apart; in the two-month version you enter the day after the third Friday of month M, sell the monthly of M+2 and buy the one of M+3, with strikes at 800-1200 points.
The backtest values each trade at the settlement of the sold expiry: the sold legs at the settlement price, the bought ones at that day's average price, one contract per side, without commissions. In reality execution prices and commissions reduce the result.
5.1 Controls
- ORACALL today / Oracall backtest
- The two tabs: the current situation and the history since 2020.
- weekly / two-month / my strategy
- The version of the strategy. It changes suitability, structure, historical class and backtest. Switching to two-month, the chart horizon automatically goes to 3 months. "My strategy" opens the Oracall backtest tab and replays from 2020 the structure you have in Strategies (see 5.7).
- horizon
- How far to draw the cone: 4 weeks, 8 weeks or 3 months.
- 90% band
- Adds to the cone the outer band, which has historically contained nine settlements out of ten.
- max pain / fair value
- Overlay on the cone the polylines of the two levels, expiry by expiry, as in the Market view. They are there for comparison: the backtest says that neither anticipates the settlement better than the forward.
- refresh
- Reloads the assessment with the current spot.
5.2 Weekly suitability
The first panel is a gauge from red to green: the needle shows how many conditions, out of five, are present today, and below it each condition is written in green if met and in red if not. They are the only ones that, over the 332 weekly entries since 2020, truly separate good weeks from bad ones; all the others tried (max pain, fair value, put wall, put/call ratio, OI changes, future open interest, future-spot basis) do not.
| Condition | What is measured | Why it matters |
|---|---|---|
| ATM IV above the median | Forward implied volatility of the sold expiry compared with the historical median (about 15%). | The double calendar sells premium on the near expiry: with high IV it collects more, and the weekly premium tends to be overpaid. |
| Negative GEX | Net GEX of the sold expiry at the current price. | With negative GEX dealers are short gamma and moves tend to be wider but also more "bouncy": historically the best weeks. |
| gamma flip above the forward | The flip of the sold expiry is above the forward price. | Confirms the regime of the previous point. |
| high future volume | Contracts traded on the FDAX future last Friday, compared with the average of the Fridays of the previous 8 weeks. | It does not tell the direction, but it modulates the dispersion: with high volume and negative GEX the settlement stays closer to the forward. |
| monthly call wall nearby | The strike with the most call open interest of the nearest monthly is less than 200 points above the forward (or below it). | A large cluster of calls above the price holds back rallies: the weekly settlement exceeds it only 13% of the time and intraday it holds 7 times out of 10. With the wall nearby the strategy returned an average of +31 points and 71% of weeks in profit (48 cases) against +17 and 57%; the effect holds in both halves of the period, with high and low IV, and it adds most precisely in the weeks when the other conditions are few. |
The historical classes are calculated on the first four conditions (high with 3 or 4, medium with 2, low with 0 or 1); the fifth, the call wall, is counted separately in the history panel, with its two groups, because with 48 cases it is not enough to redraw five classes without thinning them out too much. Historical classes (weeks since 2020, P&L in points for one contract per side):
| Conditions present | Weeks | Average P&L | Median | Win rate | Losses over 100 pts |
|---|---|---|---|---|---|
| 4 of 4 | 67 | +56 | +29 | 67% | 3% |
| 3 of 4 | 62 | +28 | +41 | 65% | 10% |
| 2 of 4 | 63 | +12 | +11 | 62% | 8% |
| 1 of 4 | 68 | −4 | +2 | 53% | 12% |
| 0 of 4 | 55 | +13 | +5 | 55% | 7% |
| all | 332 | +20 | +12 | 59% | 8% |
5.3 Two-month suitability
Over the 69 two-month periods since 2020 the three weekly conditions (IV, GEX, flip) separate nothing: over two months the weekly premium and the short-term gamma pressure get diluted. Only one condition holds up, verified on the whole sample, on each half of the period and at equal IV: the FDAX future volume on the day of the third Friday (the day of the monthly expiry that opens the two-month period), compared with the average of the Fridays of the previous 8 weeks.
| Third Friday | Two-month periods | Average P&L | Median | Win rate | Losses over 100 pts |
|---|---|---|---|---|---|
| quiet (volume below average) | 28 | +85 | +73 | 86% | 4% |
| busy (volume above average) | 40 | +33 | +10 | 60% | 10% |
| all | 69 | +54 | 71% |
The panel is a gauge: the big number and the white cursor are the historical percentage of two-month periods in profit for the group into which the current period falls; the grey tick is the average of all two-month periods, the amber tick the other group. Below it, the group's average P&L, the third-Friday volume as a percentage of the average, and the warning that this is a single condition on a small sample: indicative, not decisive. The gauge changes only on the day after each third Friday, when a new two-month period begins.
5.4 Structure if you open today
The second panel calculates the double calendar that the model would open with the current chain and spot. It is neither an order nor advice: it is the structure on which the backtest was run, carried over to today's prices.
| Item | Weekly | Two-month |
|---|---|---|
| sell | The first expiry at least 3 days away. | The monthly of the second month after that of the last third Friday (M+2). |
| buy | The first expiry at least 5 days after the sold one. | The next monthly (M+3). |
| centre (forward) | The forward price of the sold expiry. It is the best estimator of the settlement that the data know of. | |
| short put / short call | The listed strikes closest to forward −200 and forward +200 (400 points apart). | The strikes closest to forward ± half a standard deviation, with the side limited between 400 and 600 points (distance 800-1200). |
| theoretical cost | Debit in points at today's theoretical prices: (bought put + bought call) − (sold put + sold call). One point is worth €5. | |
| settle 68% | The cone band for the sold expiry: two settlements out of three ended up inside it. | |
5.5 History and cone reliability
- History of weeks (or two-month periods) like this one
- The statistics of the class into which today falls: number of trades, average and median P&L in points, percentage in profit, percentage with a loss over 100 points. Below it, the overall figure for all trades, for comparison.
- Cone reliability
- Out-of-sample check: for the expiries of the last year, each band was estimated using only the data prior to that expiry, and we count how many times the settlement fell inside. The 68% band contained 73% of the settlements, the 90% band 88%: the cone is correctly calibrated, if anything slightly conservative.
5.6 Cone chart
| Element | Meaning |
|---|---|
| candles | The latest days of the index, as in Market. |
| yellow area | 68% band: for each expiry, the band in which the settlement has historically ended up relative to today's forward, measured in standard deviations (16% and 84% quantiles). With the tick, the lighter 90% band (5% and 95% quantiles). |
| yellow line | Expected median: the forward plus the small historical drift (between 0.1 and 0.3 standard deviations). It rises slowly because since 2020 the DAX has on average gone up; it is not a forecast of direction. |
| yellow and red verticals | The expiries: weeklies in yellow, monthlies in red, with the date at the top. |
| put / call | The two sold strikes of the structure, drawn up to the sold expiry, with the value next to them. |
| dotted green "soft ceiling" | Weekly only: the call wall of the nearest monthly. On the future's one-minute data (2025-2026) the price touched it and did not close above it 7 times out of 10, and only 13% of weekly settlements since 2020 ended above it. The put wall is not drawn: when the price gets there it crosses it 7-8 times out of 10. |
| purple and light-blue polylines | Max pain and fair value per expiry, if switched on. Where they cross the median or leave the cone there is no signal: the two levels have shown no predictive value. |
| dashed blue line | Current price. |
Mouse. On an expiry you read days, forward, standard deviation and the five thresholds of the cone. The table under the chart shows the same numbers for each expiry within the horizon.
5.7 Oracall backtest
The second tab shows how the strategy would have fared applied mechanically since 2020, one week (or two-month period) after another, with the same rule as today. You choose the year with the menu, or the whole period.
- Indicators
- Number of trades, percentage in profit, average P&L in points, total in euros (€5 per point, one contract per side), maximum drawdown, percentage of losses over 100 points, percentage of settlements that ended between the two strikes.
- only weeks with suitability ≥ 2
- Weekly only: limits the count to the weeks in which at least two conditions were present at the time of entry. The comparison row under the indicators shows the two results side by side.
- Chart
- The daily close of the index with, for each trade, a rectangle between the two sold strikes along the duration of the trade: green if it closed in profit, red at a loss. The dot on the right edge is the settlement of the sold expiry. The ticks at the bottom show the suitability score of each entry.
- Cumulative P&L
- Under the chart, the curve of the cumulative result in euros: blue for all trades, green for only the weeks with suitability ≥ 2. In the two-month version there is only the blue curve.
- My strategy
- Third mode next to weekly and two-month: with the "run backtest" button it replays from 2020 the strategy you built in the Strategies view. Each leg is translated into a relative recipe (days to expiry and distance of the strike from the forward of its expiry, calculated on the current values) and the recipe is applied to each historical entry: same weekday as today, or every trading day. For each entry it looks for expiries at the same distance in days (tolerance of 2 days or 15%), strikes at the same distance from that day's forward rounded to 50 points, and the real prices from the archive. The exit is at the first expiry among the legs (expiring legs at the official settlement, the others at that day's average price) or after N days at average prices. The result shows the same indicators as the ORACALL backtest, plus three tables: for each of the five conditions at entry (present or absent) and by number of conditions, at the top next to the gauge, and by year (average, percentage of trades in profit and number of trades), under the two charts. The quickest way to get there is the Backtest button of the Strategies view, which opens this mode and runs the replay immediately. Hovering over a trade shows the legs with strike, expiry, entry and exit price. Entries for which an expiry, a price or a settlement is missing are skipped and counted. A backtest with weekly entry takes about ten seconds; results stay in memory until the recipe changes.
The today, for this strategy panel reads the same five conditions on the first expiry of your strategy with the current chain (the IV threshold is the median of the replayed trades, hence consistent with the strategy's horizon) and compares them with the history: the gauge shows the percentage of trades in profit in the reference group, which is the most specific one with at least 20 trades among "exact same profile" (five identical conditions), "at least four identical", "same number of conditions" and "all". Below, for each condition, the historical result of the group into which today falls and that of the other group. With few trades the specific groups are not used: the panel says so, and in that case the reading is worth little.
The backtesting of your own strategies is available only on the DAX, because only for the ODAX does the historical archive with prices and settlements exist: switching to the S&P 500 the "my strategy" mode shows a red warning in place of the results. When you change index the result of the last backtest is cleared and has to be run again.
5.8 What ORACALL does not tell you
- It does not predict direction. No data in the archive (open interest, max pain, fair value, gamma flip, GEX, flows, future open interest and volume, future-spot basis) guesses the side of the settlement better than a coin. The forward is the best reference point and the yellow median is forward plus historical drift, nothing more.
- The suitability classes are calibrated on the double calendar. For any other structure use "my strategy" in the backtest: it replays it from 2020 with real prices and tells you under which conditions it returned. The single ATM calendar returns as much as the double with more dispersion; versions shifted towards the flip or max pain return less.
- Classes with a few dozen cases (the two-month version, the 4/4 and 3/4 classes) are robust to the checks done but remain small samples: use them as an indication, not as a certainty.
- Trades with early exit on the strikes or with a price stop are not the strategy tested: in the backtest they always worsen the result.
5.9 Predictor: 7, 28 and 60-day outlook
Under the cone chart (weekly mode only) there are three small cards, one per horizon: the days, the gauge and the percentage. Everything else (centre, window, regime) is described here and no longer appears in the app; hovering over the card shows the window levels.
- Centre
- The forward interpolated at the horizon (total variance interpolated between the two nearest expiries) plus the historical median drift of settlements relative to the forward, calibrated on all days since 2020 and recalculated every week: about +0.13σ at 7 days, +0.18σ at 28, +0.26σ at 60. The study of 29 September 2026 compared this centre with spot, max pain, regime-based shifts and regressions on GEX, gamma flip, walls, volume and recent returns, with year-by-year walk-forward: no correction improves it out of sample, and max pain worsens it by 8-16 percentage points. For this reason the centre does not use positioning.
- Window
- Fixed width: 400 points at 7 days, 800 at 28, 1,200 at 60, centred on the centre. It corresponds to about ±0.5σ in average conditions. Next to it the 68% cone band for the same horizon is also shown.
- Gauge
- The historical percentage of days on which the close stayed inside the window, read in today's regime: tercile of the day's expected σ crossed with the tercile of the IV at the horizon (at 60 days also the tercile of the return of the last 20 days). The grey tick is the percentage over all days. It is the only part in which the data help: with low expected volatility the 7-day window held about 6 times out of 10, with high volatility 1 in 3. GEX, flip and walls do not shift this probability in a consistent way and are not used.
- On the chart
- Three cyan brackets at 7, 28 and 60 days with the dot on the centre: above the bracket the high level of the window (call side), below it the low level (put side). The 60-day bracket appears when the chart horizon (menu at top right) reaches at least 9 weeks.
- How to use it
- It is a measure of how "containable" the market is at the chosen horizon, not a forecast of direction: it serves to decide whether a structure that lives on still prices has good historical odds in this regime, and with which strikes. With a probability below 40% the fixed window is narrow relative to the market of the moment.
5.10 What was tested and discarded
Before adding an indicator to the app we put it to the test on the archive, with out-of-sample verification (year-by-year walk-forward) and confidence intervals. The studies of 27-30 September 2026, all kept in OptionStreams' historical database, gave these answers: only what passed the test has remained in the app.
- Volatility premium
- It exists: at 7 days realised volatility is on median 81% of implied and stays below it on 71% of days; at 28 days 89% and 67%. But it is not predictable: no group of variables (IV, recent volatility, slope, GEX, gamma flip, walls, max pain) reduces the error relative to a constant. It is the reason why selling time pays on average, not a signal of when.
- GEX at equal IV
- With negative GEX the path oscillates more around the forward (crossings +0.10, intraday excursion +0.10σ), but the tails do not change: the probability of ending beyond ±1σ is the same. GEX changes the texture of the move, not where it ends up.
- Pinning on strikes
- Over 339 expiries the settlement falls within 5 points of a 50-point strike in 19% of cases (expected 20%), within 10 points of a 100-point strike in 21% (20%), and the position between two strikes is uniform. On the last day the price moves towards max pain in 49% of cases: neither a magnet on the strikes nor on max pain.
- When to exit the double calendar
- Over 332 weeks, holding the position until the 13:00 fixing returned +17.5 points on average (59% in profit, worst −322) against +7.6 by closing on Thursday evening (worst −205): the fixing is worth +9.9 points a week more, 90% confidence interval from +2.8 to +16.5. The time value of the sold leg goes to zero only at 13:00 on Friday.
- "Panic" exit with future volume
- Over the 77 weeks since March 2025 with one-minute bars: exiting when the index crosses the sold strike and the future volume is 1.5 to 4 times the normal for the same time of day worsens the result in all 36 variants tried (holding: +30.5 points on average; the best exit: +16.8; with volume at least 2.5 times: +9.1). The rule catches about half of the 14 weeks with a loss over 100 points, but it also triggers on 23 weeks that then closed in profit, and each costs 120 points on average. This is why the app has no exit alarm: volume measures dispersion, not direction.
6. Use on phone and tablet
Below 900 pixels of width the application switches to a single-column layout with a bar at the bottom to change view (Strategies, Market, ORACALL). In Strategies the chain shows only open interest, IV, theo and delta; the full Greeks stay on wide screens. In Market the history starts at 2 days and the horizon at one month, and the charts have a fixed height that scrolls with the page. Tables scroll horizontally with your finger. Tooltips open by tapping the element. On a tablet in landscape you get the desktop version.
7. Data, sources and times
| Data | DAX | S&P 500 |
|---|---|---|
| Chain: open interest, settlement or prices per strike | Eurex end-of-day statistics (ODAX): always the previous close, downloaded in the morning | CBOE chain delayed by 15 minutes (SPX and SPXW, bid-ask mid, OI and volumes), refreshed every 15 minutes while the app is open |
| Live price | onvista: Xetra during trading hours; OTC indication (Lang & Schwarz) Monday to Friday between 8:00 and 22:05; at weekends and overnight the official Xetra close | onvista: S&P Indices and indications |
| Hourly candles | Aggregated Xetra ticks, 9:00-17:30 | S&P Indices ticks, 15:30-22:00 Italian time |
| Settlement | Official Eurex settlement price (EDSP, from March 2025); before that, estimated from the index value at 13:01 using one-minute data | Monthly SPX at the open (9:30 New York), weekly SPXW at the close (16:00 New York) |
| FDAX future volume | Eurex statistics via Databento, updated weekly (for ORACALL suitability) | — |
| Expiries | Weekly on Friday, monthly on the third Friday | Every day; SPX and SPXW of the third Friday are summed into a single monthly expiry |
| Long-term database | Every day, in addition to the open-interest archive, the following are stored for each expiry: the indicators (forward, ATM IV, max pain, fair value, gamma flip, GEX, OI and changes, walls), the index close, the settlements, the daily and one-minute FDAX future, the ORACALL snapshot and the results of the studies: they are the basis of the research and the backtests | — |
| Archive history | From 2 January 2020, over 1,700 days: 2020-March 2025 from ivolatility (average bid-ask closing prices, same-day OI), from March 2025 official Eurex statistics via Databento (settlement, volumes, OI), the latest weeks from eurex.com; the archive grows every morning | From the first download, one snapshot per day |
DAX update schedule: the chain and the archive refresh on weekdays at 7:30, 8:30 and 9:30; every week the official settlements and the futures volumes are imported, then the backtest and the ORACALL calibration are recomputed (the date appears in the "cone reliability" box).
8. Formulas and conventions
The application has two calculation engines that share the same definitions: the live one (Strategies and Market views), which reprices the previous evening's chain at the current spot, and the archive one (ORACALL, calibration, backtest), which works day by day on historical settlements. Where the two differ in a detail, it is noted.
8.1 Time, rate and forward
- Time to expiry T
- Live engine: seconds between the current instant and the expiry's fixing (DAX: 13:00 Berlin time on the expiry day; S&P 500: 9:30 New York time for the monthly SPX, 16:00 for the SPXW), divided by 365 days; minimum one hour. Archive engine: from 17:30 on the settlement day to 13:00 on the expiry day. The two conventions coincide except for the time of day.
- Rate r
- Fixed at 2% per year for inverting volatilities and computing the Greeks. In the live engine, for each expiry an implied rate reff = ln(F0/close)/T0 is also derived from the observed forward and the index close; if it falls outside the range (−5%, +12%) the engine reverts to 2%. It is reff that moves the forward when the spot changes.
- Forward F0 (from settlements)
- For each strike with both call and put quoted, K + (C − P)·erT is computed; the five strikes with the smallest |C − P|, i.e. the closest to ATM, are taken and the median of the five values is used. Identical in the two engines. It is the "forward" shown in the chips, in the tables and as the centre of the ORACALL structures.
- Forward at the current spot
- F(S, T) = S · ereff T. It is used to reprice the chain and to compute GEX and the flip at the hypothetical spot level S.
8.2 Implied volatility, smile and 1σ
- IV by strike and side
- Numerical inversion of Black-76 on the forward: Eurex settlement price (DAX) or bid-ask mid (S&P) for call and put separately, with r = 2% and the T of the day. Strikes between 0.75·F0 and 1.25·F0 are kept. The "reference" IV of a strike is that of the OTM side: call above the forward, put below; the GEX Greeks instead use the IV of the specific side (call with call IV, put with put IV), with the reference IV as a fallback if one side is missing.
- Smile
- The reference IV is interpolated linearly as a function of log-moneyness ln(K/F) (sticky moneyness mode, the default) or of the strike (sticky strike). Beyond the extremes the value of the last available strike is used. The chart's IV slider adds a parallel shift to the whole surface.
- ATM IV
- Value of the smile at K = F. In the archive engine it is the IV of the OTM side of the strike closest to the forward.
- 1σ
- F · IVATM · √T. In the ORACALL cone, for the historical data, T is counted in whole calendar days divided by 365.
- Greeks
- Analytical Black-76 formulas expressed with respect to the spot, per contract; in the tables they are multiplied by quantity and multiplier (€5 per point on the DAX, $100 on the S&P). Theta by finite difference of one calendar day.
8.3 Open interest levels
All computed on a single expiry, with the open interest of the settlement day (for the DAX, that of the previous evening), across all strikes of the chain.
- Max pain
- The strike S that minimises ΣK OIcall(K)·max(S − K, 0) + OIput(K)·max(K − S, 0), i.e. the total intrinsic value that buyers would collect if the settlement fell at S. No interpolation: it is always a quoted strike.
- Cumulatives and fair value
- Call cumulative: percentage of total call open interest sitting on strikes ≤ K, increasing from the left. Put cumulative: percentage of put open interest sitting on strikes ≥ K, increasing from the right. The fair value is the price at which the two cumulatives cross, linearly interpolated between the two adjacent strikes where the difference changes sign.
- put40 / call40 (and put80 / call80)
- call40: the first strike ≥ F at which the call cumulative reaches 40%; put40: the first strike ≤ F, going down, at which the put cumulative reaches 40%. They are the edges of the area containing the innermost 60% of the open interest of each side.
- Walls
- Call wall: the strikes with the most call open interest between F and F·(1+w); put wall: the strikes with the most put open interest between F·(1−w) and F. In the live engine w = 12%. In the archive engine the window is adaptive: w = min(12%, max(5%, 3.5·σ/F)), so that on a weekly a few days from expiry unreachable strikes are not counted. The "wall" used in the fifth ORACALL condition and in the intraday tests is the first call wall of the nearest monthly, with the adaptive window.
- P/C
- Put open interest divided by call open interest of the expiry.
8.4 GEX
- Definition per contract
- GEX of a leg = Γ · OI · multiplier · S2 · 1%, in currency: it is the index notional that dealers have to buy or sell for a 1% move of the index. Γ is the Black-76 gamma with respect to the spot, computed with the IV of the side (call or put), at the forward F(S, T) and at time T. Sign convention: calls positive, puts negative ("dealers long calls, short puts"). It is a convention, not an observation: Eurex does not publish who is long and who is short.
- GEX by strike
- Sum of the two legs of the strike: gexcall(K) + gexput(K). In the bars of the Market view the sum is extended to all expiries within the horizon (see below) and shown only for strikes within ±12% of the spot.
- GEX of an expiry ("expiry GEX", chip and table)
- Sum over all strikes of that single expiry, evaluated at the current spot (live engine: the flip grid point closest to F; archive engine: direct sum at S = F0). In the Expiries table and in the ORACALL "expiry GEX" box this is the number, in millions. The "negative GEX" condition uses the GEX of the sold expiry only.
- Aggregate GEX (Market panel and bars)
- Sum over all expiries with 0 < days ≤ horizon, where the horizon is the Market view menu (2 weeks, 1 month, 45 days, 3 months; default 45). Each expiry is evaluated at the current time T and at its forward F(S, T), not at the settlement day: it is the gamma dealers are carrying now, not at expiry. The panel profile recomputes this sum for spot levels from −8% to +8% in steps of max(25, 0.4% of the spot rounded to 25); the "GEX at spot" is the exact value at the current spot; the "contributions" are the four expiries with the largest contribution in absolute value. The net GEX in the chart legend is the same number.
- Aggregate call wall and put wall
- The strike with the largest positive aggregate bar and the one with the largest negative bar, within ±12% of the spot. They differ from the walls in 8.3, which count open interest rather than gamma and refer to a single expiry.
- Flow GEX
- See 8.6.
8.5 Gamma flip
- Per expiry
- The expiry's GEX is recomputed on a grid of hypothetical spots from 0.90·F to 1.10·F, step max(25, 0.25% of F rounded to 25), with the sticky moneyness smile (each strike takes the IV of its own log-moneyness relative to the new forward). The flip is the level at which the sum changes sign, linearly interpolated between the two adjacent points in proportion to the values. If the grid crosses zero more than once, the archive engine takes the crossing closest to the forward; the live engine, in the Market view by expiry, the last crossing found going upward. Outside the grid (±10%) the flip is not reported.
- Aggregate flip
- The zeros of the aggregate profile of 8.4 (all expiries within the horizon, spot from −8% to +8%); if there is more than one, the one closest to the spot is shown. The "distance" in the panel is flip minus spot, positive if the flip is above.
- "Flip above the forward" condition
- Uses the per-expiry flip of the sold expiry, from the archive engine, with the open interest known at entry.
8.6 Open interest flows
- Change
- ΔOI per strike and side between the settlement day and the previous one in the archive, for all expiries within the Market view horizon. Only changes of at least 100 contracts (500 on the S&P) and of at least 3% of the strike's open interest are considered.
- Relative IV
- ΔIVrel = (IVtoday − IVyesterday) − (IVATM,today − IVATM,yesterday) of the same strike and side, i.e. the change in the strike's IV net of that of the whole expiry. Below 0.25 volatility points the side is "uncertain".
- Reading
- OI up and relative IV up: buying to open (dealers short gamma). OI up and relative IV down: selling to open (dealers long gamma). OI down and relative IV down: closing of long positions. OI down and relative IV up: covering of short positions.
- Flow GEX
- Γ · |ΔOI| · multiplier · S2 · 1% with the sign estimated from the reading: negative if dealers appear short gamma, positive if long gamma, not computed if the side is uncertain. The main GEX does not use it: it stays with the convention of 8.4.
8.7 ORACALL cone
- Data
- For every expiry since January 2020 with a known settlement and for every day up to 100 days before, from the evolution file: the forward F and ATM IV of the day (archive engine, settlement of that day) and the settlement R.
- z
- z = (R − F) / σ, with σ = F · IVATM · √(days/365), days = calendar days between the day and the expiry.
- Buckets and quantiles
- The z values are grouped by days to expiry into eight buckets (1-2, 3-5, 6-9, 10-16, 17-25, 26-40, 41-60, 61-100); for each bucket with at least 30 observations the empirical quantiles 5%, 16%, 50%, 84%, 95% are taken. No normality assumption.
- Today's bands
- For an expiry N days away: Ftoday + q · σtoday, with F and σ from the live engine (current spot, current ATM IV, T to the fixing) and q the quantile of the bucket for N. The median is q50: the forward plus the historical drift, typically between +0.1 and +0.3 σ.
- Out-of-sample coverage
- For the last 52 expiries: take the day 6-9 days from expiry, estimate the quantiles of its bucket using only the previous expiries (at least 30 observations) and check whether z falls inside the 68% band (q16-q84) and the 90% band (q05-q95). The percentage of hits is the "coverage".
8.8 The five conditions
Evaluated at entry on the sold expiry (weekly ORACALL) or on the first expiry of the structure (backtest of your own strategy), with the open interest of the last settlement day before entry: what was actually known at the time.
| Condition | Calculation | True if |
|---|---|---|
| High IV | ATM IV of the expiry (8.2) compared with the median of the same quantity over all historical entries of the strategy (weekly ORACALL: 15.15%; for your own strategy, the median of its replayed trades). | IV > median |
| Negative GEX | GEX of the expiry alone (8.4), archive engine. | GEX < 0 |
| Flip above the forward | Per-expiry gamma flip (8.5) and forward F0 of the expiry. | flip > F0 |
| High futures volume | FDAX volume of the last Friday with data available before entry (8.10) divided by the average of the Fridays of the previous 8 weeks (at least 4 available), computed only within the same source. | ratio > 1 (weekly); in the bi-monthly, the ratio of the third Friday counts and the favourable condition is ≤ 1 |
| Monthly call wall nearby | First call wall (8.3, adaptive window) of the nearest monthly with at least 2 days to expiry, minus the forward of the sold expiry. | distance < 200 points (also negative) |
The score is the number of true conditions. The historical classes of the weekly (5.2) are computed on the first four; the fifth is reported separately. For your own strategy (5.7) all five are used to build the profiles.
8.9 Backtest: prices, settlements, P&L
- Prices
- From 10 March 2025, the official Eurex settlements of each series; from 2020 to March 2025, the average closing bid-ask price (half of the ask if the bid is missing). One contract per leg, no commissions, no slippage.
- Open interest
- Eurex publishes end-of-day OI the following day: in the archive the OI is assigned to the day it refers to, and in the backtests the levels at entry are computed on the day before entry. Prices, instead, are those of the entry day.
- Settlement
- Official Eurex EDSP when in the archive (from March 2025, from the final settlement of the expiring series); before that, the value of the DAX CFD at 13:01 Berlin time from one-minute data, with a plausibility check (±8% from the day's close) and a second tick source as a fallback. Average error of the estimate against the official EDSPs: 15 points.
- P&L at expiry
- Expiring legs: intrinsic value on the settlement, max(R − K, 0) for calls and max(K − R, 0) for puts. Legs with a later expiry: settlement (or average) price of the last archive day ≤ expiry day. P&L = Σ quantity · (exit value − entry price), in points; in euros × 5.
- ORACALL double calendar
- Weekly: entry on Friday (or the last trading day of the week), expiry sold at +7 days and bought at +14, put and call strikes quoted in both expiries closest to F − 200 and F + 200. Bi-monthly: entry on the first trading day after the third Friday of month M, sell the monthly of M+2, buy that of M+3, side = 0.5 σ limited between 400 and 600 points. "Settles between the strikes" = settlement between the sold put and call. "Losses > 100 pt" = trades with P&L below −100 points.
- Your own strategy
- Recipe: for each leg, days to expiry (calendar, from today) and distance of the strike from the forward of its expiry (live engine, current spot). Backtesting: the historical expiry with the closest distance in days, within max(2 days, 15%); forward of the expiry on that day from parity on the settlements; strike = rounding to 50 of forward + distance; entry price from the day's settlement or average. Exit as above or, with "after N days", all legs at the settlement or average price of the first trading day ≥ entry + N days (if it falls beyond the first expiry, the expiry is used).
- Drawdown
- Maximum decline of the cumulative curve in euros from its previous peak, trades in order of exit.
8.10 Futures volume and external data
- Daily FDAX volume
- Eurex statistics (Databento, statistics schema, type 6 "volume") summed over all FDAX contracts quoted on the day, from March 2025. Before that, the weekly ivolatility file of the DAX future (volume of the week). Ratios to the 8-week average are computed only within the same source, so as not to compare daily sums with weekly sums.
- One-minute futures bars
- Databento, ohlcv-1m schema, outright contracts only (calendar spreads excluded), prices of the most traded contract in the minute and volume summed; used in the tests on the walls (section 5.6), not in the daily indicators.
- Closes and candles
- Official Xetra close per day (from the closes file; if missing, estimated from parity); hourly candles from onvista ticks in the 9:00-17:30 session.
- What is not used
- Bid-ask spreads, Greeks supplied by the exchange, trade direction, futures open interest (tested: it does not discriminate), max pain and fair value as predictors (tested: they do not discriminate).
9. Common problems
- The quote says "feed unreachable"
- The live price source is not responding; the app uses the chain's close. Try again with "reload data" or wait: the attempt repeats by itself.
- The price does not move
- Check that "update spot" is on and that "manual spot" is empty. Outside trading hours the DAX follows an OTC indication that moves less.
- Recent candles are missing
- Press "update" in the Market view: the download happens in windows and may take a few seconds; the text next to the button shows the status.
- A leg has disappeared
- Legs on expiries that have already passed are removed when the app opens.
- The levels have changed compared with last night
- The chain is updated every morning with end-of-day data: max pain, fair value, flip and walls move with the new open interest. The "chain of" menu lets you review the previous day.
- ORACALL shows "n/a" or "no useful expiry pair"
- One of the two required expiries is missing from the day's chain (this happens in the hours when Eurex has not yet published a new expiry) or the calibration has not yet been redone after an archive update. Try again after the morning update.
- ORACALL and Strategies give different prices for the same structure
- ORACALL uses the theoretical prices from the moment the view was loaded; press "update". The real structure must in any case be entered in Strategies with the executed prices in the "entry" column.
- The bi-monthly gauge does not change
- This is normal: the condition is measured once per two-month cycle, on the day of the third Friday, and stays fixed until the next third Friday.
- S&P 500: the chart is crowded
- Turn off "daily expiries" to see only Fridays and monthlies, or shorten the horizon.