23 September 2026
Version 0.3.15
ETF heatmap: options and volatility columns (IV, HV, IVR, IVP, put/call, ex-dividend)
-
ETF heatmap: new Options / Volatility column group (toggle above the table, remembered per browser): IV (IBKR's 30-day implied volatility of the option chain, in percent, date in the tooltip), HV (realised volatility from the last 30 daily returns, computed locally from the cached bars), IV/HV, IVR (IV Rank within the 52-week range, same filter pipeline as the Futures tab) and IVP (IV Percentile). All columns sort; the IVR at least box filters the table to ETFs at or above a threshold.
-
ETF heatmap: plus the option statistics P/C Vol (put/call ratio of today's option volume), P/C OI (put/call ratio of open interest), Opt Vol (average daily option volume) and Ex-Div (next projected ex-dividend date, amount in the tooltip), fetched via TWS market-data ticks in batches. ETFs without a listed option chain leave the cells empty.
-
New background job ETF Vol Sync (System > Jobs, hourly while TWS is running, or Start it there on demand): loads a year of IV history on the first run and only the missing days afterwards, fetches the option statistics and refreshes the heatmap afterwards (a reload hint appears on the page).
-
Flex Web Service setup guide: the English help now shows screenshots of the English Client Portal (Flex Web Service, Activity and Trade Confirmation query), the German help keeps the German ones.
20 September 2026
Version 0.3.14
Fixes for rolls, transfers and option premiums, new thematic ETFs for robotics and physical AI
-
A roll was not recognised as one trade when the target contract (same underlying, strike and expiry) was already open as its own trade in the same account, or when the contract being rolled away sat in two trades: each leg of the roll order landed in "its" old trade by contract id and the order never linked them. The legs of one IBKR combination order now always belong to one trade: when a leg hits a different existing trade than its sibling leg, the two trades are merged (the earliest trade remains, with a comment). On the first start of this version existing cases of this kind are merged once; spreads you split by hand (no closing legs) are left alone.
-
Rolls that version 0.3.13 reunited automatically did not receive the "Rolled" tag (nor, where applicable, "Assigned"/"Expired" and the link to the stock position). Cause: the merge path recomputed status and metrics but never ran the tag detection, which so far only ran after an import with new executions. Merging option trades by hand now runs the tag detection as well.
-
A spread rolled as a whole (e.g. a bull put spread: both legs closed, two new legs opened) now receives the "Rolled" tag too. Previously only single-leg rolls were detected because the legs of a spread overlap in time; the roll efficiency already recognised such rolls and now feeds the tag as well.
-
On the first start of this version the tags of all option trades are re-derived once; existing tags are kept.
-
A roll that IBKR executed in several partial fills (e.g. three fills within a few seconds) was labelled "Call Spread" or "Put Spread" instead of "Short Call" or "Short Put": the new leg was already open before the last partial fill fully closed the old leg, and that overlap counted as a concurrently held spread. An overlap now counts as a roll when the new leg was opened only after the old leg had started to unwind and the old leg was fully closed on the same day. Legs added while the other leg is merely held (hedge, calendar, spread opened as one order) stay spreads. Existing strategy labels are refreshed once on first start.
-
ETF heatmap: two new thematic ETFs on humanoid robotics and physical AI: KOID (KraneShares Global Humanoid and Embodied Intelligence, Nasdaq) and WDRN (WisdomTree Physical AI, Humanoids and Drones, Cboe BZX). WDRN is the US listing of the UCITS fund WPAI (Xetra/SIX/LSE), which, as with earlier additions, does not fit the SMART/USD price-data pipeline. The price history of both ETFs is backfilled on the next market-data refresh.
-
Dashboard "Expiring Soon": for spreads the Premium column did not show the collected premium but quantity x average opening price of all legs x multiplier - for a bull put spread roughly the gross premium of both legs (e.g. 3,871 instead of 1,037 USD). It now shows the net opening premium of the still-open legs (credit positive, debit negative), the same figure as in the Sold Option Premiums panel and the Max Loss column; rolled-out legs no longer count.
-
Dashboard "Open Options" pie: the slices were weighted with the same formula (quantity x average opening price of all legs x multiplier) and therefore too large for spreads and rolled trades. They now use the net opening premium of the still-open legs (absolute; debit structures with the paid premium), the same basis as the Premium column in the "Expiring Soon" panel.
-
A position transfer between two accounts (Flex "Transfers" section) was booked incorrectly when the sells of the transferred shares had been imported before the transfer itself: the sells built a phantom short, the transfer-in was booked as its closing fill, and the trade read "short, closed before it opened" with a wrong loss, while the later re-entry buys sat inside that closed trade and the open position carried the transfer basis instead of the real purchase price. Likewise, in the source account a late-imported transfer-out could combine the buys before and after it into one trade with a blended entry price. The import now rebuilds such trades chronologically: side from the earliest fill, one trade per position episode (a new one starts at every zero crossing), split-off transfer remainders folded back in, with a comment on the trade. Existing cases are repaired once on the first start of this version. A history whose sign flips inside a single fill (duplicate or missing fill) is left unchanged and noted in the log.
-
Price chart on the trade detail page: the expiry of an open option was drawn right after the last candle, however far away it was (e.g. a 20 Nov expiry immediately after 18 Sep). Cause: the chart's time axis counts candles, not calendar days, and the expiry was the only point after the last candle. The axis is now padded with every weekday up to the expiry, so the marker sits at its real distance and moves closer with every trading day. When the nearest expiry is within 90 days the default view includes it; near the right edge the expiry label sits left of its line instead of over the price scale.
16 September 2026
Version 0.3.13
Fix: combo trades and rolls are recognised as one trade again
-
Since version 0.3.9 the legs of an IBKR combination order (spreads, calendars, rolls) were imported as separate trades instead of one trade. Cause: the same-second combo separation by IBKR order id introduced in 0.3.9 assumed all legs of a combo share one order id - Flex however assigns each leg its own. Combo legs are now recognised by the shared root of the IBKR execution id; two independent combos filled in the same second still stay apart.
-
Combos and rolls already split by versions 0.3.9 to 0.3.12 are reunited automatically on the first start of this version; the affected trade receives a comment about it. Trades you already merged by hand are left unchanged.
14 September 2026
Version 0.3.12
Fix: error when updating from older versions resolved
-
Updating from an older version could crash the app on first start with an error like "no such column: journal_tradeexecution.underlying_price_state". The cause was a bug in the database upgrade; your data is not affected and remains fully intact.
-
The database upgrade is now fundamentally more robust: repair and recomputation steps only run after the database schema is fully updated - each step exactly once per installation, with an automatic retry on the next start if a step fails.
-
If this crash hit you: simply install this version and start normally - the upgrade resumes cleanly.
10 September 2026
Version 0.3.11
DAX, Euro Stoxx 50 and SMI: charts now show the correct index
-
The price chart of option trades on DAX, Euro Stoxx 50 and SMI now shows the index itself. Previously, the symbol "DAX" wrongly displayed the same-named US ETF (Global X DAX Germany ETF).
-
Existing trades on these indices are automatically classified as index options during the update - nothing to configure on your side.
-
Price charts added for many more futures: micro index futures (MES, MNQ, M2K, MYM), US treasuries (ZT, ZF, ZN, TN, UB), energy (incl. Brent, RBOB, heating oil, micro crude), micro metals (gold, silver, copper), Eurex fixed-income futures (Schatz, Bobl, Buxl), Eurex index futures (DAX, Euro Stoxx 50, SMI) and VIX futures. These trades previously showed an empty chart once the contract expired.
9 September 2026
Version 0.3.10
macOS: window dragging via the navigation bar fixed
-
Dragging the window by its navigation bar now goes through native macOS window management: the window follows the mouse smoothly, no longer jumps, and no longer resizes unintentionally while being moved.
-
Clicks on links and buttons in the navigation bar keep working as before.
9 September 2026
Version 0.3.9
Stripe integration with fully automatic license delivery and a fixed menu bar
-
After purchase your license key is generated fully automatically and usually arrives by email within a few minutes - no more waiting for manual delivery.
-
The setup wizard now asks for your tax domicile (Switzerland/Liechtenstein or another country) and then shows the matching buy button; the answer can be changed any time under Settings > General and is included in backups.
-
The navigation bar now stays pinned to the top while scrolling on Windows too (it already did on macOS).
-
Trade detection: two independent option combinations on the same underlying that filled in the same second are no longer wrongly merged into a single trade - they are now kept apart by their IBKR order identity (e.g. two DAX bear call spreads with different expiries). Trades that were already merged incorrectly can be separated with the Split function on the trade detail page.
7 September 2026
Version 0.3.7
Stripe integration with fully automatic license generation and delivery
-
After purchase your license key is generated fully automatically and usually arrives by email within a few minutes - no more waiting for manual delivery.
-
The setup wizard now asks for your tax domicile (Switzerland/Liechtenstein or another country). Existing installations answer the question once after the update.
-
The license page then shows exactly one 'Buy license' button with the checkout that applies to you - the other route stays reachable as a subdued correction line.
-
The answer can be changed any time under Settings > General and is included in backups.
4 September 2026
Version 0.3.6
Stripe integration for license purchase
-
The license page now has a 'Buy license - Switzerland (TWINT & card)' button for secure payment (processed via Stripe). Your license key then arrives by email - your instance ID and email address are passed along automatically, nothing to copy by hand.
-
Purchasing outside Switzerland is now possible too: a separate international checkout link (card payment, incl. local VAT) sits right below the Swiss button.
-
Tidier trial notice: a single 'Manage license' link takes you to the license page with all options (purchase and activation).
3 September 2026
Version 0.3.5
Foliograph now runs in its own app window - no more browser tab
-
Foliograph now opens as a standalone desktop app in its own window instead of a tab in your web browser - with the usual window controls and the header bar plus menu tucked right at the top edge. Downloads (such as backups) and external links like foliograph.ch or the AI buttons keep working and open in your system browser. The classic browser mode remains available if you prefer it.
2 September 2026
Version 0.3.4
Frameless macOS window and Windows update fix
-
macOS: the app window drops the separate native title bar - the app header with the menu now sits right at the top edge of the window (PyCharm/Parallels style), reclaiming the ~28px the old black bar took. The window buttons (red/yellow/green) stay top-left and the window is still draggable by the header (a click activates menu items as usual, only dragging moves the window). Windows keeps its native title bar unchanged.
-
Windows update: clicking 'Install' in the setup could close the app and the installer without updating - the old version kept running. Cause: the setup terminated the running Foliograph.exe with a process-tree kill (taskkill /T); when Foliograph was running with administrator rights the installer itself was a child process and was killed mid-install. The tree kill is gone now (it was redundant anyway - the scheduler process shares the same name and is terminated directly).
-
App window (webview): external links reliably open in the system browser or mail app - AI buttons (ChatGPT/Claude/Perplexity/Grok), foliograph.ch and the license email with the Instance ID. A link on the activation page used to navigate the whole window away with no way back; external anchors now consistently carry target="_blank", locked by a ratchet test.
1 September 2026
Version 0.3.3
Journal: leaner default columns and tidier list actions
-
Journal: default columns are trimmed to the essentials. The Options journal now shows Symbol, Option Strategy, Strike, Expiry, Tags, Strategy, Status, Last Execution, DTE, PnL and PnL (Base). Stocks & Futures shows Symbol, Type, Intent, Side, Strategy, Status, Quantity, Currency, Last Execution, PnL and PnL (Base). Every other column (e.g. Codes, Mistakes, Opened, Roll Eff., CRV) stays available via the Columns picker.
-
Your own column customizations are preserved: only columns you never toggled yourself follow the new defaults - deliberate choices are left unchanged.
-
Journal selection bar: the duplicate gear icon has been removed. The 'Strategies & Mistakes' catalog is still reachable via the toolbar link of the same name.
-
Strategies & Mistakes: a 'Back to list' link returns you to the last filtered and sorted journal list - just like the trade detail view.
-
Settings > Data & Backup: in the automatic-backups table the 'Download', 'Lock' and 'Delete' controls in each row were not the same height - 'Download' (a link) sat slightly lower than the two buttons beside it. All three now line up at one height.
30 August 2026
Version 0.3.2
Journal: calendar spreads now show correctly as open
-
Journal: calendar spreads (same strike, two expiries - e.g. Long Calendar or Double Calendar) were wrongly shown as 'Closed' while still open. Cause: the status calculation collapsed the two legs sharing a strike and right, so they cancelled each other out. The expiry is now part of the calculation, keeping the near (sold) and far (bought) leg separate. Existing, wrongly closed trades are recomputed automatically on update and shown correctly again.
-
Desktop: the app database now shrinks even without a large cleanup run - once enough free pages have accumulated, an automatic VACUUM hands the space back (from about 305 MB to roughly 107 MB on an affected install).
-
Desktop: after sleep or pause (laptop standby, virtual machine) the app resumes the update check and market-data refresh immediately instead of waiting for the next interval - so the update notice reliably appears after waking and market data is current again.
-
Windows: update downloads now write their status file with short retries if an antivirus scanner briefly locks it - the previous 'access denied' error is gone.
-
Dashboard: opening it no longer writes a preference to the database; the page therefore loads more reliably without delay on the desktop while data is being refreshed in the background.
29 August 2026
Version 0.3.1
Journal: back button and remembered filters
-
Journal: the trade detail view now has a 'Back to list' link that returns you exactly where you were - with all active column filters, sorting and scroll position intact. Each list (Stocks & Futures, Options) also remembers your last filters per view: reopening the list - via the top navigation or after a restart - restores them automatically. Clearing all filters keeps the list unfiltered (that choice is remembered too).
-
Trade detail: tidied header. 'Back to list' now sits on its own row above the title (instead of an easy-to-miss link next to the symbol), and the actions have a clear hierarchy: 'Edit' as the highlighted primary button, with rarely-used ones (Reprocess, Submit for support, Delete) grouped into an overflow menu behind the '...' button.
28 August 2026
Version 0.3.0
Native app window instead of a browser tab (beta)
-
Foliograph now runs in its own native window instead of a browser tab: with its own Dock/taskbar entry, no address bar, and no getting lost among your other browser tabs. The window uses the operating system's built-in web view (macOS WebKit, Windows WebView2); downloads (e.g. the backup ZIP) and external links (e.g. 'Open in ChatGPT', which opens in your system browser) work as before. If the window ever fails to start, the app automatically falls back to the previous browser mode - so you are never left without a UI. A switch in config.json ('shell': 'browser') forces the old browser mode at any time. This is a beta feature on the update channel of the same name.
26 August 2026
Version 0.2.48
Windows update: setup wizard starts in the foreground
-
Windows in-app update: the setup wizard now starts in the foreground. Previously, after clicking 'Install', the setup's language selection dialog opened behind the browser window and had to be brought forward via the taskbar. The app now passes your Foliograph language to the setup directly - the language dialog is skipped and the wizard appears in front right away.
-
Backup list (Settings > Data & Backup): the 'Strategies' column mistakenly counted the unused trade-combo model and showed 0 even when the strategy catalog had entries. It now counts the catalog strategies (the 'Strategies' page). The data itself was never affected - strategies were always written to the backup; only the number in the overview was wrong.
25 August 2026
Version 0.2.47
General code review and various user-interface improvements
-
Narrow windows: the top navigation overlapped itself at about half-screen width. It now wraps onto its own second row in narrow windows (all menu items stay visible), and keyboard focus is now indicated by a visible outline everywhere in the app.
-
Empty views now link to the next step: an empty journal links to Trade Sync (connect IBKR or import a CSV), the account-value card on the dashboard leads straight to Trade Sync when no data exists yet, and the market-data notice explains that data loads automatically within about 10 minutes while TWS is running - with a link to the Market view to refresh immediately.
-
Smoother long sessions: fixed a memory leak on page navigation - the chart popup's click and keyboard handlers accumulated on every navigation and gradually slowed the interface down.
-
One-time re-login required after this update: sessions now live in a browser cookie instead of the database - removing wait times when background jobs are writing data.
-
Consistent naming: Help now calls the Market tabs exactly what the UI shows ('Market Overview' instead of 'Indices & Volatility', 'Futures' instead of 'Commodities tab'), and English texts gloss the IBKR term 'Kontoauszug' as 'Kontoauszug (Account Statement)' throughout - so searching Help finds the labels you actually see on screen.
-
Faster page switches on the Market and Analytics pages: the page code of the four largest views (Market Overview, Futures, ETF World Map, Analytics) now loads once per tab and is cached by the browser instead of being re-sent and re-parsed on every navigation. The hover chart panel (Market Overview, Futures, ETF Heatmap) is now one shared component - identical behavior on all three tabs, including dark-mode switching and translated loading texts.
-
Chart polish: the trade-chart popup markers are now translated (Einstieg/Ausstieg/Verf. instead of Entry/Exit/Exp in the German UI), their label boxes follow dark mode, and the date axis labels on the Macro and Fundamentals charts are slightly larger and easier to read. The app also reliably remembers your scroll position when navigating back - including on pages whose content renders after the page loads.
-
Journal tables: the header filter dropdowns now show their column name when unset (e.g. 'Strike', 'Ccy', 'PnL') instead of a clipped 'All ...' text - in narrow columns only the caret was left, making the filter row hard to scan. A minimum width keeps the name readable; the full 'All ...' text appears as a tooltip.
-
UI polish: analytics tiles now show an explanatory note instead of an empty card or a degenerate chart when there is little data. The ETF heatmap's 16 category checkboxes are tucked behind a collapsible 'Categories' control with an active-filter counter. The Help page lazy-loads its screenshot guides. The trial banner links straight to the license purchase page (when configured). Settings and System now mention the active daily auto-backup.
-
Better discoverability: the Strategies & Mistakes catalog now has a visible, labeled entry in the journal toolbar (previously only reachable via the gear icon after checking rows). Backup is consolidated onto a single surface under Settings > Data & Backup - the Backup button in System > Overview jumps straight there. The version number in the top bar now always links to the version history.
-
Analytics responds faster after trade changes: the hedge-budget panel remembers each trade's premium flows and, after a sync or an edit, only re-reads the trades that actually changed instead of recomputing the entire options history (with about 1,200 option trades: down from roughly 340 ms to just over 90 ms).
-
ETF heatmap: the filter bar takes less space - the search field now sits right next to the categories dropdown on one line, and when expanded the category chips flow on the same line after the dropdown instead of on separate lines below.
-
Backup management in Settings: Data & Backup now lists the automatic backups with date, size and trade count - each one can be downloaded, deleted or locked individually. Locked backups are never removed by the automatic cleanup and don't count toward the limit; how many backups are kept is now configurable (default 14).
-
Settings reorganized into five tabs: General (preferences, license, updates), Connections (TWS, IBKR Flex, optional data feeds), AI (connections and prompts), Data & Backup, and User Accounts. Each page now only loads its own content; existing links and bookmarks to Settings keep working.
-
Backup list refined: compact table instead of full page width, uniformly sized action buttons, and new columns showing executions, comments, attachments, strategies and the app version that wrote the backup (older backups show '-').
-
Backup on demand: 'Create backup now' in Settings > Data & Backup instantly writes a backup into the data folder, visible in the list. A new Source column shows whether a backup came from the daily background job or was created manually; retention applies to both - a locked backup is always kept. The list also states that a backup is taken automatically once a day and shows the filesystem folder the files live in (click to copy).
20 August 2026
Version 0.2.46
Row charts in the market overview, reliable 'As of' timestamp
-
Windows installer: the setup window now stays in the foreground. Previously it could disappear behind the browser after clicking 'Install', because closing the running app handed the window focus back to Windows.
-
Market pages: the 'As of' timestamp now shows the last successful data sync with TWS instead of the last refresh attempt. When TWS is not running, the timestamp simply stays put - an older stamp by itself signals that the tables have not received new index data since then. Previously it advanced on every run, even when TWS was unreachable.
-
More compact Futures tab: the IBKR Data Subscriptions panel now collapses to a single row - title, six small per-exchange status labels (e.g. CBOT Live, CME Frozen) and an expand arrow. Explanation, legend and the detail cards with Open-Interest coverage only appear when expanded; the expand state survives automatic refreshes.
-
Hedge figures always visible: the 'Open hedges' line in the Sold Option Premiums panel and the Hedge Budget panel in Analytics now render even without hedge-flagged strategies - as a zero state (0, 0% of open short premium) with a hint pointing to the strategy catalog, instead of disappearing entirely.
-
Market overview: every row of the Volatility and US-Treasury tables now carries a chart icon that opens a line chart of its history - with a window toggle (3M-5Y, defaulting to the selected percentile window) and the window low/high as dashed context lines. The redundant hover overlays of the two tables are gone. The enlarged curve charts (VIX futures curve, yield curve) now open pinned via a magnifier icon in the header instead of transient hover; the yield curve overlay additionally shows the curves from 1 week and 1 month ago for comparison.
15 August 2026
Version 0.2.45
Hedge budget: option premium collected vs. premium invested in hedges
-
New: Hedge Budget panel in Analytics. It compares the option premium you collected (net opening credits of your non-hedge option trades) with the premium invested in your hedging strategies - as an overall share, per month (chart with your personal target line, e.g. 10%), and split by hedge strategy including realized PnL. Rolls count in the month of the new opening; all amounts are converted to your base currency at the fill date.
-
New: 'Open now' row in the Hedge Budget panel - the current-protection snapshot, independent of the date filter: open short premium still exposed to risk (identical to the Sold Option Premiums figure on the Portfolio page), open hedge premium, current cover ratio, and the number of open hedge positions with their nearest expiry (DTE). The By Hedge Strategy table additionally shows Open (N) and open premium per strategy. The Portfolio Sold Option Premiums panel carries the same information as an 'Open hedges' line right next to the exposure.
-
New: strategies in the catalog (Journal > Strategies & Mistakes) can be flagged as hedge-budget strategies. Only flagged strategies count toward the budget - an FX-hedging strategy, for example, deliberately stays out of the ratio. Your target is configurable under Settings (default 10%).
-
Help page: a new section explains the difference between Intent (Trade/Investment), the auto-detected option strategy, and your personal strategy - plus the hedge-budget definitions.
-
Fixed: renaming a strategy under Journal > Strategies & Mistakes now also relabels all trades it is assigned to. Previously they kept the old name, so the strategy picker showed both variants. The success message now reports how many trades were relabeled.
-
Fixed: switching to the Dashboard and Market pages could take up to 20 seconds. The market snapshot table had grown to 346 MB (77% of the database) and had to be read in full on every page load because it lacked an index. The date column is now indexed, and pages that only show the timestamp no longer load the large snapshot blob at all.
-
New: the EMA-21 table on the Market dashboard now shows 365 instead of 65 trading days - a good 17 months of market history to scroll back through. The rows are recomputed from the stored daily closes, so the history stays complete.
-
Cleanup: market snapshots are no longer duplicated on every refresh. The pre-rendered EMA grid only changes when new daily closes arrive, yet it was rewritten every 10 minutes - 1547 rows held just 49 distinct contents. An unchanged grid now updates the existing row, and a daily cleanup job keeps the table small. Your price data (daily bars) is untouched.
-
Fixed: the market snapshot recorded with every trade (VIX and EMA-21 breadth) read the EMA counts from the oldest instead of the newest row of the market table, so the breadth values came from the start of the display window rather than the trading day itself. Affects the 'Daily > EMA21' and 'Weekly > EMA21' fields of the market snapshot on new trades; already stored trades are unchanged.
-
Market Overview: in the EMA21 table, rows from an earlier year now carry a two-digit year (e.g. "Tue 4.3.25"), and the change of year is marked by a thicker separator. With 365 trading days the table spans a year boundary - scrolling back used to leave the year of a row unclear.
-
Fixed: the Portfolio Sold Option Premiums panel (and with it the open short premium in the Hedge Budget) now computes outstanding premium per leg quantity instead of leg price sum x trade quantity. For unbalanced credit structures (e.g. 1x2 ratio spreads) the amount was wrong or the trade was incorrectly dropped as a debit position; balanced structures (short puts, verticals, iron condors) are unchanged.
-
Trade detail view: mistake assignment is now a regular field in the header grid (after Source) - the assignment form opens from a compact plus popover instead of permanently occupying two rows. The note placeholder now reads 'What went wrong? (optional)' to distinguish the mistake note from the journal notes below.
-
macOS updates now install themselves with one click: after the verified download the banner button reads 'Install and restart' - Foliograph quits, replaces the app in the Applications folder, and relaunches automatically. Finder's replace/in-use dialogs and the drag to Applications are gone. If automatic installation is not possible (e.g. installed outside /Applications), the DMG window opens as before.
15 August 2026
Version 0.2.44
Assign strategies & mistakes with a mistake review, internal cash transfers in capital flows, and smoother macOS updates
-
New: Strategies & Mistakes. Under Journal > Strategies & Mistakes (gear icon in the journal toolbar) you maintain your own catalog of strategies (e.g. Short Put, Breakout, Hedging) and typical mistakes (e.g. FOMO entry, position too large). In the journal, select several trades via checkbox and assign a strategy or mistake to all of them from the new bar above the table; mistakes can also be added individually (with an optional note) on the trade detail page. Catalog entries carry a color and description and can be archived instead of deleted - already-tagged trades and the analytics are kept. Your existing strategy labels were adopted into the catalog automatically; backups include the catalog and assignments.
-
New: Mistake review in the analytics overview. It shows, per mistake, the number of affected trades, total and average PnL, plus tagged-vs-untagged comparison and a monthly breakdown - making visible which mistakes cost you how much. The journal tables gain a toggleable, filterable mistakes column to match.
-
Journal: The two confusingly similar merge actions have been cleaned up - merging several partial trades into one is now unambiguously called 'Merge into one trade', and the bar above the table groups selection, assigning, and merging clearly on a single line.
-
Internal cash transfers between your IBKR accounts now show up under Analytics > Capital flows: IBKR reports them in the Flex report only in the 'Transfers' section (not among the cash transactions), which was previously only read for position transfers. The next Flex sync backfills missing transfers from the last 365 days automatically; each account gets its own entry (incoming positive, outgoing negative), and transfers already imported via statement CSV are not double-counted.
-
macOS update: After clicking 'Run installer', the window with the Foliograph icon to drag onto 'Applications' now opens in the foreground automatically - previously the disk image was only mounted in the background and had to be opened manually from the Downloads folder.
-
Market-data refresh starts faster: IBKR contract details (~300 tickers), once resolved, are now kept across app restarts. The 'Resolving contract details' step is skipped almost entirely; only new tickers and futures past their expiry are resolved again.
-
Trade detail chart: exit markers landed on the wrong day when the cached price history was out of date (the marker silently snapped onto the last available bar, e.g. an Aug 4 exit drawn on Jul 31). Stale histories are now topped up automatically in the background when the chart opens; if no data source is reachable, markers outside the available history are hidden and a notice explains why.
-
The blue update notice now also appears in a long-lived browser tab: navigating within the app did not refresh the notice bar (since 0.2.43), so a tab loaded before the update was detected only showed it after a manual reload.
11 August 2026
Version 0.2.43
Import repair: duplicate and wrongly open trades are cleaned up automatically
-
The update runs a one-time automatic repair of the trade journal: duplicates from the interplay of CSV imports and Flex syncs are removed, and positions that a retroactive import had split across two trades (one trade wrongly stayed open, the other was closed with too many sells) are reunited. Every merge is documented as a trade comment; the repair can be previewed with 'python manage.py repair_import_history --dry-run'.
-
Execution times from CSV imports (account statement/activity statement) are now correct: IBKR delivers the timestamps in US Eastern time, but they were stored as UTC - all CSV executions appeared 4-5 hours early. Existing rows are adjusted automatically during the update (Flex times were already fixed in 0.2.42).
-
Repeated imports now recognize already-known executions even when their stored timestamps still come from the old clock (4-5 hour offset) - a full Flex re-import therefore no longer creates duplicate trades.
-
Retroactively delivered executions (e.g. on the first Flex sync after a long CSV-only history) now land in the correct, already-closed trade instead of spawning a new open ghost trade.
-
Backfilled opening executions find their trade: when a faster import source delivered the buy-back of a position first and the activity sync supplied the opening only days later, both halves remained as separate, permanently open trades (this also affected options, e.g. sold puts). Such pairs are now merged directly at import time, and the one-time repair during the update also cleans up existing option pairs (previously stocks/futures only).
-
Rolled futures positions: closing executions of an older contract month now find their trade even when they come from a different import source - previously e.g. a Flex sell could not close the CSV-imported, rolled trade and remained as its own open trade.
-
When a trade's sells exceed its buys (a sign of missing executions from another import source), the trade now receives a visible data-quality comment instead of silently counting as cleanly closed; the note disappears by itself once the missing executions arrive.
-
Internal position transfers between your IBKR accounts are now imported from the Flex report ('Transfers' section): the transfer closes the position in the source account at book value (no artificial profit/loss) and continues it in the target account with the same cost basis - options included. Previously the source trade stayed open forever and the sells in the target account appeared as a short sale. This requires the Flex query at IBKR to include the 'Transfers' section (the setup guide has recommended it for a while); if it is missing, the sync diagnostics now point it out.
-
Noticeably smoother to use: background jobs (market data, sync, reports) now run in their own process and no longer compete with page loads for CPU time and database access - previously pages could hang 10-40 seconds while a job was running, especially around the 10-minute refresh intervals.
-
Switching tabs now feels instant: clicking a navigation link loads the next page in the background and swaps the content in place instead of rebuilding the whole page - no more white flash, the live-data connection stays up, and browser back/forward keep working as usual.
-
PnL correction for late-arriving commissions: when IBKR delivers a fill's commission only after the initial import (e.g. Flex trade confirm first, activity report overnight), the trade PnL is now recomputed instead of keeping the old value without closing commissions. Option spread legs from Flex imports also keep their commission from the start. On update, a one-time repair fixes affected option trades automatically (unambiguous cases only; manually edited PnL values are left untouched).
7 August 2026
Version 0.2.42
Underlying prices for index options self-heal, correct codes and times from Flex imports
-
Underlying price, Dist. %, Delta and IV now also appear for closing executions of index options (SPX, RUT, XSP): the indices' daily bars had stalled because TWS answers the one-time 4-year backfill request for these indices with nothing - the fetch now automatically retries with a shorter span, and an empty result shows up as a warning in the log instead of vanishing silently.
-
A closed option trade no longer drops out of the market data refresh while some of its executions still wait for their underlying price - previously exactly the closing execution could never receive its price because the trade disappeared from the fetch list the moment it closed.
-
Trade codes (O/C, assignment, expiry) now also arrive from the 10-minute Flex sync: trade confirmation reports deliver the codes in a different XML field than activity reports, which was not read before - the Codes column stayed empty for these executions.
-
Execution times from Flex imports are now correct: IBKR delivers the timestamps in US Eastern time, but they were stored as UTC - all Flex executions appeared 4-6 hours early. In addition, fills from the overnight session (from 20:00 ET, e.g. SPX GTH on Sunday evening) are now assigned to the next trading day, so they too receive a daily closing price.
-
Tidier update banners: all actions (What's new?, Download and verify, Run installer, Open Downloads folder) stay on one line instead of each on its own; the X button in the installer banner is gone, and the 'Foliograph was updated' notice is dismissed via a Close link. The browser also always loads the fresh stylesheet after an update - previously banner elements could appear as oversized teal buttons with a stale cached CSS.
-
Analytics filter chips redesigned: a subtle outlined pill with a short label (Symbol: USO) and a small remove button instead of the solid teal pill with the wrapping 'By Symbol' caption.
-
Analytics: rolled trades carry a small 'Rolled' badge in the expanded trade list - so an interim realized loss is recognizable as part of a still-running roll chain.
-
Clearer message when a data refresh fails: fully translated (the technical error text now lives on the details page only), with a hint at the next automatic attempt and the manual refresh. The notice clears itself as soon as a refresh succeeds again - without reloading the page. The market overview also no longer shows a futures failure when the overview data itself is current.
-
Manual market refresh now runs in the background: the Refresh button starts a background job and shows a short hint line instead of the blocking progress bar - you can keep working and navigating, the views update themselves once the data is in.
-
Manual refresh is much faster: the button loads only the active tab's data (futures data on the Futures tab, prices and indicators elsewhere) instead of always both; already-current price series are skipped (now also on weekends), and the live indicators (VIX/VXX/VXV) appear within seconds on larger backfills instead of at the end.
-
Dashboard panels (KPIs, indices, earnings, expiring soon, recent trades) update themselves in place when new data arrives - the previous 'New data - reload' button in the bottom-right corner is gone on the dashboard.
-
Analytics: new symbol search box in the filter bar - with autocomplete across all traded symbols; a selection filters key metrics, charts, breakdowns and the trade list just like clicking a row in the symbol table, and can be removed via the filter chip.
-
The manual market refresh hints ('Refresh running in the background...', 'Data updated.', failure hint) now fade out after the notification display time configured in Settings - previously the running hint stayed until the job finished and the completion message disappeared after a fixed 5 seconds.
5 August 2026
Version 0.2.41
Reliable base-currency conversion and tidier notification banners
-
Missing base-currency conversion (e.g. CHF PnL) now self-heals: if fetching the ECB exchange rate fails when a trade closes (e.g. a network timeout), the 10-minute sync automatically retries the historical rate; the Reprocess button on the trade detail page also fills in a missing rate immediately. Previously the base PnL of such trades stayed empty for good - the journal total left them out and analytics fell back to an approximate rate.
-
The notification banners at the top of the window (update installed, installer ready, download failed) have a new close button: a round icon at the right edge of the banner instead of a loose X below the text.
-
ETF heatmap extended by two funds: IWC (iShares Russell Microcap) extends the size ladder in Size & Style below small cap, IGF (iShares Global Infrastructure) adds the global infrastructure view next to the US-focused PAVE.
-
Cashflow import is reliable again: the daily Flex fetch (dividends, interest, deposits/withdrawals) fired at the exact same instant as the 10-minute trade sync on the same IBKR token and was therefore rejected daily with 'Too many requests' - new cashflows (e.g. deposits into a new account) did not appear in analytics for weeks. The fetch is now staggered and automatically retries with a backoff when rejected.
5 August 2026
Version 0.2.40
Faster desktop app and license purchase right from the app
-
Faster page switches in the desktop app: background jobs are throttled (at most two at a time) and the one-shot startup jobs are staggered over time instead of all firing at once - page loads right after launch no longer stall for seconds.
-
New loading bar at the top of the window: when switching tabs, a slim progress bar immediately shows that the next page is loading.
-
Dashboard and Market pages stay fast permanently: the market computations (overview, ETF heatmap, world map, commodity table) are rebuilt in the background after each data refresh and pre-warmed at app launch, instead of on the next page visit - the occasional 2-second stall when switching tabs is gone.
-
Buy a license right from the app: the expired, activation and license pages now show buy buttons (Switzerland and international) that open Stripe checkout with the Instance ID prefilled - the license key arrives by email afterwards. The buttons only appear once the purchase links are configured.
-
License pages readable in dark mode: info boxes and titles now use the theme colors instead of hardcoded light colors.
-
Index options show all option elements on the trade detail page again: the executions table gets the Right/Strike/Expiry columns plus underlying price, Dist. %, Delta and IV, along with the Legs panel and the Reprocess button - after the introduction of the index option asset type these were only visible for stock and future options.
-
Market overview on laptop displays: the three panels Volatility, Indices and US-Treasury now always stay side by side in one row from 1400px window width and shrink to fit (narrower range and percentile bars), instead of wrapping the Treasury panel to a second row and clipping charts.
-
Market overview: the labels at the right edge of the VIX futures and yield curve charts (last value, month/maturity label, difference line) are no longer cut off.
-
The market data refresh now shows the progress message 'Rebuilding market caches...' (also in the system activity panel) for the previously silent phase after 'Building dashboard...' - the refresh used to look stuck at that point.
-
The market caches are now also pre-warmed in the background at startup in development mode (runserver) - previously the first dashboard or heatmap visit after every (auto-reload) restart paid the ~2s build inside the request.
27 July 2026
Version 0.2.39
Nicer release notes and an in-app version history
-
Compact update banner: just the version and a short title on one line; the full release notes open via "What's new?" as a popover.
-
New in-app version history: all versions with their changes under Help > What's new - linked from the update banner, from Settings > About / Updates and from the App panel under System > Overview.
-
A one-time notice after each installed update that points directly to what changed.
-
More reliable update check after an update: the first check on the new version fetches the update manifest in full once, so the installed version is recorded correctly on the server side.
-
Option executions table: the underlying price shown for each fill is now exactly the official close of that day, or a live intraday price while the day is still open. Delta and implied volatility are recalculated from it.
-
Missing underlying prices fill themselves in: a fill whose daily bar isn't cached yet shows "no data yet" and is fetched in the background (the same source the price chart uses), then resolves automatically - so option trades no longer stay without a price.
-
Existing option trades are re-checked once after this update, so previously wrong or missing underlying prices are corrected automatically.
-
Option strategy detection now recognises calendar and diagonal spreads: Long/Short Calendar Call and Put Spread, Long/Short Diagonal Call and Put Spread, plus Double Calendar and Double Diagonal Spread. Previously such trades (same/different strikes across two expiries) were mislabelled as Bull/Bear spreads or Iron Condors. Existing trades are re-classified once after the update.
-
Unified account selector for Portfolio and Analytics: up to four accounts as one-click tabs (with "All"), five or more as a dropdown. The list always shows every known account - including accounts without open positions - and the selection is remembered while switching between the pages.
-
Account selection is now app-wide: the Dashboard and both Journal tabs follow the selected account too (position and P&L panels follow the selection, market panels stay market-wide). In the Journal the toolbar selector replaces the previous account filter in the table header row. The account column is now hidden by default in the tables and can be re-enabled via the Columns picker.
-
DTE fix for rolled option trades: remaining runtime and the dashboard "Expiring soon" panel now only consider open legs - rolled-away (bought-back) legs no longer count as the next expiry. Affects journal options, portfolio, and dashboard.
-
Screenshots and attachments now display in the installed desktop app: media files (/media/) are served by the app itself (login-protected); previously they were only visible in development mode.
-
New Option Max Loss panel on the Portfolio page: computes the worst-case value at expiry of every open option position payoff-based (spreads, iron condors, butterflies, short puts, naked calls) and sums it per account in the base currency and as a percent of NLV - split into a down tail (put side) and an up tail (call side), since a market shock can hit both at once. Net short calls are marked as unlimited, covered positions are listed separately. Plus a sortable Max Loss column on the Portfolio Options tab and a KPI in the header strip.
-
New Index Option asset type: cash-settled index options (SPX, SPXW, NDX, RUT, VIX, XSP, etc.) are no longer filed as stock or future options but recognised as their own type - across all import paths (TWS sync, Flex, statement CSV; the Flex import used to classify every index option as a stock option, and SPX weeklys with trading class SPXW were missed by the TWS sync too). Existing trades are reclassified once after the update. The Sold Premium panel gains its own Index Options category (without an assignment value, since no shares can be assigned), and the underlying price of index options now resolves from the cash index series (^SPX instead of the futures series).
23 July 2026
Version 0.2.38
Live dashboards, chart upgrades, roll efficiency
-
Live dashboard updates: open pages receive data updates automatically - the Market, Futures, Macro and Commodity tabs refresh their panels silently in place, while the Heatmap, World Map, Stock Fundamentals and Home Dashboard show a subtle "new data available" hint.
-
TradingView-style chart crosshair: all line, band and bar charts on the Macro and Commodity Fundamentals tabs show date and value at the nearest data point on hover; seasonal band charts additionally show the prior years' min-max range.
-
Configurable table columns in the journals, the Portfolio (now with Stocks/Futures and Options tabs) and the "Expiring soon" panel - including new columns for the open date and days to expiry (DTE).
-
Roll efficiency for rolled options: a new metric in the options journal and on the trade detail page, plus a Rolls tab in Analytics charting efficiency and moneyness of every roll.
-
Option greeks per execution: underlying price, distance to strike, delta and IV directly on the trade detail page - live from TWS and additionally derived from the fill price, retroactively for existing trades too.
-
Upgraded charts everywhere: symbol watermarks and 52-week distances (52WH/52WL) in all price charts, interactive daily/weekly charts now also on the Futures tab, sortable EMA21 trend columns in the ETF Heatmap, new ratio and volatility charts (XLY/XLP, TLT/SPY, VIX, VVIX, VIX/VIX3M) - and all market charts are now scrollable and zoomable like the journal charts.
-
Convenience: sticky table headers while scrolling and instant switching between the Portfolio tabs without a page reload.
18 July 2026
Version 0.2.37
Automatic backups and account recovery
-
Automatic daily journal backup as a ZIP in the data directory (the newest 14 are kept) with a freshness card under System.
-
Account recovery from a backup file directly on the login page.
-
Automatic trade sync can be enabled/disabled per user.
14 July 2026
Version 0.2.36
P/L fix for rolled spreads, setup assistant
-
P/L fix for rolled option spreads: exact calculation from all executions instead of the incomplete IBKR value.
-
Fixed commission calculation for trade-confirmation Flex queries.
-
Reworked setup assistant, fixes for the trade export/support function and the installer launch on macOS.
8 July 2026
Version 0.2.35
Three new dashboards, TWS backup data source
-
Three new dashboards: Macro, Stock Fundamentals with earnings, and Commodity Fundamentals.
-
Massive.com as a backup data source when TWS is not running.
-
Improved option strategy detection with a "Reprocess" button and an updated setup guide.
30 June 2026
Version 0.2.34
German statements, download progress
-
Visible download progress during updates.
-
Support for German CSV account statements including currency conversion fees.
-
Trade duration in days for analytics, a total row in the P/L overview and various display fixes.
24 June 2026
Version 0.2.32
System tab and configurable AI prompts
-
Improved System tab and configurable AI prompts.