VEEMANDocs
DocumentationSupportOpen Dashboard

Getting started

  • Introduction
  • Quick start
  • Core concepts

Importing data

  • Supported formats
  • How import works
  • Splitting a file
  • Troubleshooting

Building your portfolio

  • Workspace & equity
  • Weights & capital
  • Weekday filter
  • Keyframes
  • Currencies & FX
  • Library
  • Strike guard
  • Variants & comparison
  • History (undo/redo)
  • Shared spaces

Analytics

  • Metrics reference
  • Charts (deep-dive)
  • Monthly P&L
  • Correlations
  • Comparison
  • Monte Carlo
  • Equity Control
  • Optimization
  • IBKR reconciliation
  • Veeman AI

Research

  • Research overview
  • Define
  • Composing a backtest
  • How the engine trades
  • Results & archive
  • Parameter study
  • Rewind
  • Tactics
  • Indicators

Reference

  • Keyboard & command palette
  • Exporting data
  • Settings

Technical

  • Architecture
  • API reference
  • Security
  • Your data & privacy
  • Risk disclosure
← PreviousOptimizationNext →Veeman AI

IBKR reconciliation

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.

  1. First pass: executions within 10 minutes of the Option Omega entry time, plus those at the structure's timestamp, nearest first.
  2. 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.
  3. 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.