The reconciliation page compares what your strategies were supposed to do (the Option Omega trade log)
with what actually happened at your broker (the Interactive Brokers Activity Statement), day by day
and structure by structure.
What you load
Option Omega trade log (CSV): one row per structure, with its entry time, legs and P/L.
IBKR Activity Statement (CSV): the "Trades" executions and the cash settlements of options
(exercise and assignment).
You can drop the two files one at a time or together, anywhere on the import panel: the page reads
each one and puts it in its slot by its content (the Date Opened header of the Option Omega log, the
executions section of the statement — Trades when it is exported in English, Dettaglio eseguiti in
Italian; both languages are read, with columns matched by name). Each slot then shows
what it recognised, the number of structures or option executions and the period covered, and the panel
checks that the two periods overlap before you start.
The two files are processed for the comparison only: nothing is saved to your library. Your work on the
page (the files, the result and every change you make) stays in place while you move to other
modules and back, for as long as the browser tab is open; reloading or closing the tab clears it.
How structures are matched
Each Option Omega leg is matched to IBKR opening executions with the same expiry, the same right
(put or call), the same side (buy or sell) and a strike within 10 points, on the same day.
A structure is matched as a whole. On IBKR a butterfly, an iron condor or a vertical is one
combo order, so its legs share the same timestamp. The page first looks for that timestamp: the
moment within 20 minutes where the most legs find a compatible execution with their full quantity.
Executions at that timestamp come first for every leg, even when another execution is closer to the
Option Omega entry time. This keeps two nearby structures from swapping legs.
First pass: executions within 10 minutes of the Option Omega entry time, plus those at the
structure's timestamp, nearest first.
Second pass: legs still short of contracts look for the missing quantity only, within
20 minutes, and add it to what the first pass found.
Late entry: a structure that found nothing is still matched when all its legs sit at one
IBKR timestamp within 60 minutes, with their full quantity. A single late leg is not enough.
These legs are marked with low confidence.
An execution belongs to one leg only, across every structure of the day. A structure is matched
when every leg has all its contracts, partial when some are missing, none when nothing was
found. Executions no structure claimed stay unassigned: you can drag them onto a structure or
onto a manual trade.
Contract size
Option Omega exports its log at 1 contract, even when you trade a strategy at 2 or 3 contracts
from a certain date. The page adjusts for this with a scale per structure: one multiplier for all
its legs.
OO P/L = exported P/L × scale, exactly. The legs ask IBKR for quantity × scale contracts.
Automatic detection. A fully matched structure is scaled when IBKR shows the same whole
multiple (2× to 10×) on every leg, counting extra lots of the exact same contract (same
strike, no tolerance) within the window the leg was matched in. Each extra lot goes to the nearest
structure in time. A single IBKR row that fills two strategies at once is not read as a size change.
Inconsistent size. When IBKR has extra lots but the multiples differ between legs (say 2× on the
short leg and 1× on the long one), no scale is applied: the OO P/L stays as exported, the extra lots
stay unassigned and the structure is flagged with the ratios it saw. There is no reliable way to
price a structure whose legs traded at different sizes from the exported log alone.
Manual scale. The − / + stepper on each structure forces its scale; 1× pins the structure at one
contract even if IBKR shows more. The ↺ button returns to automatic detection. Changes are sent
together after a short pause, and manual assignments of executions the new calculation moved are
realigned (the page tells you how many).
Why one scale per structure
A size change is a decision about a strategy, not about a single leg. A per-leg scale would need the
P/L of each leg, which the Option Omega log does not contain: short and long legs do not pay off in
proportion to their opening premium, so any per-leg rescaling would be a guess.
The two P/Ls
OO P/L of a day: the sum of the (scaled) P/L of that day's structures you haven't excluded.
IBKR P/L of a day: proceeds plus commissions of every execution, openings and closings,
plus cash settlements, booked to the day the position was opened, the same way Option Omega books
a structure to its Date Opened. An option held for several days keeps its whole result on its
opening day instead of showing the premium as a loss on one day and the sale as a gain on another.
It does not depend on the matching, so two Option Omega variants on the same contract never count
the same IBKR contract twice.
Only the underlyings in the Option Omega log count toward the IBKR P/L and the matching (SPXW
counts as SPX). The Activity Statement covers the whole account, so a GLD option bought the same day
as an SPX strategy would otherwise show up as a gap that isn't there.
Those trades outside Option Omega are still shown, apart: in the day view under "IBKR trades
outside Option Omega", in the Other IBKR total and as a hollow grey diamond in the weekly grid. Their
result is realized on the closing day: a GLD call opened on 20/08 and sold on 31/08 shows its
full win or loss on 31/08, which becomes a day of the panel even without Option Omega trades. A
position still open at the end of the statement has no result yet. They never change the OO vs
IBKR difference.
Per structure, the IBKR P/L adds up the opening executions the structure matched, plus its
share of those contracts' closing executions and cash settlements. The share is the contracts it
opened divided by all the contracts opened in that position: 1 when the structure is the only one
on the contract, 1/2 when two structures each bought one lot of the same call. Positions opened,
closed and reopened on the same contract are kept apart. A manual trade works the same way:
dragging an opening execution onto it brings in that contract's closings and settlements too, so a
put bought and sold a minute later shows the round-trip result, not the premium paid.
In the weekly grid a hollow amber diamond flags days with IBKR opening executions that no structure
took: trades that are not in the Option Omega log and explain part of that day's difference.
The equity lines, the weekly differential grid and the totals all start from these daily figures. You
can exclude legs, executions, whole days or a date range; the IBKR side follows the same exclusions.
Working on the page
Once both files are loaded, the page reads from top to bottom, from the whole period down to a
single structure.
Sources. The two files stay listed at the top: click one to replace it (the comparison starts
over), or Recompute to run it again from scratch, which drops scales, exclusions and manual
assignments.
Summary. The IBKR − OO difference, the two P/Ls and the match rate (share of structures fully
matched, with the partial and unmatched ones next to it). They all describe the framed period:
set a custom range from the equity chart and a band above the figures says so.
Cumulative equity. IBKR is the solid accent line, Option Omega the amber comparison line; the
tooltip adds the difference between the two on that day.
Show common period. Next to the custom range, this frames the period both files cover: from the
later of the two first dates to the earlier of the two last dates, where the IBKR dates are those of
its executions and cash settlements and the Option Omega dates are the structures' opening days. An
Option Omega backtest usually spans far more than your live account, and its days outside the
statement would otherwise count as differences that are only missing data. One click aligns the
Option Omega log to the IBKR statement; every figure on the page follows the new period. The button
is off when the two files share no days.
Weekly differential. One row per week, Monday to Friday, listing only the weeks of the framed
period, tinted in the up colour where IBKR did better
than Option Omega and in the down colour where it did worse; the tint is relative to the widest day in view. The
last row adds up each weekday. Click a day to open it: the page scrolls down to the day view, with
that day's structures in the table below it. Untick a day to leave it out of every
figure on the page. Filled diamonds describe the day's Option Omega structures (no match, partial,
scaled contracts, excluded legs), hollow ones the IBKR executions outside them; the legend above
the grid lists only the marks that actually appear in it.
Day view. Step through days with the arrows, the ← → keys or the day strip. Scrolling or
dragging the strip only browses it; click a day to open it, and it glides to the centre. The small
bar under each date is that day's IBKR − OO difference, scaled to the widest day in view. The header
shows the day's two P/Ls and their difference; each structure shows its match status, the
contracts IBKR filled per leg (found / required) and a Δ column with IBKR P/L − OO P/L for
that row.
Moving executions. Drag an IBKR execution onto another row, or click it and then click the
row (useful on touch screens, where dragging is not available). Dropping it on Unassigned
releases it; Esc cancels a selection. New trade adds an IBKR-only row to collect executions
that have no Option Omega counterpart.
On a phone
Below 768 px the page keeps every figure and every control, laid out for a narrow screen.
Loading the files. Tap a slot to pick its CSV; the page still recognises each file by its
content and moves it to the right slot.
One card per structure. The day's comparison becomes a list of cards instead of the wide table.
The row's Δ (IBKR P/L − OO P/L) opens the card, next to the name and the match status, with the
contract stepper under it. Below come the Option Omega side (entry time, legs with their fill,
premium and P/L) and then the IBKR side (entry time, executions, premium and P/L).
Moving executions. Tap an execution to select it, then tap the card that should receive it, or
Unassigned to release it. While an execution is selected, a bar at the bottom of the screen shows
which one it is and has a Cancel button.
Weekly differential. The grid scrolls sideways, and the week column stays in place so you always
know which week you are reading. Tapping a day opens it and scrolls down to the day view.