Skip to content

TradeTally

v2.6.4 Feature

This release adds 2 notable features for engineering teams evaluating rollout.

Published 2mo Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

api journal stocks trading

Summary

AI summary

Firstrade CSV import now correctly calculates cost basis and P&L for notes, options, and commissions; Interactive Brokers error handling improved; image upload UX allows clipboard paste.

Full changelog

Bug Fixes

Firstrade CSV import (now flagged as Alpha)

  • Treasury notes/bonds (CUSIP 9128*) now use the CSV Amount column for cost basis instead of qty * price, which was inflating P&L by orders of magnitude
  • Same-day mixed buys/sells are reordered by net daily flow so a partial close on an existing long position is no longer misclassified as opening a short
  • Options assigned/exercised/expired close at $0 so the premium becomes realised P&L instead of leaving the contract permanently open
  • Bloomberg-style symbols derived from descriptions for US Treasuries (e.g. T 4.25 12/31/26) instead of surfacing raw 9-character CUSIPs
  • Options realised P&L matched to the CSV Amount column, capturing exchange/regulatory fees Firstrade rolls into the amount without itemising
  • Commission and Fee columns tracked separately on trades
  • Generic broker selection routes to the Firstrade parser when headers unambiguously match
  • EXEC TIME hints extracted from row descriptions; execution datetimes rewritten monotonically post-sort to preserve position-aware order
  • Heads up: the Firstrade parser is now labelled Alpha in the import UI. Please review imported trades and report incorrect P&L or symbol mappings via GitHub Issues.

Interactive Brokers (IBKR)

  • Rewrote error code dictionary against the official Flex Web Service v3 docs (e.g. 1007 was incorrectly labelled token-expired; that's actually 1012)
  • Added all transient codes (1001, 1004-1009, 1018, 1019, 1021) to the retry set
  • requestFlexReport now retries up to 5x on transient IBKR/DNS errors
  • fetchFlexReport poll loop uses the retryable set instead of a hardcoded 1019 check
  • Scheduler cleans up zombie fetching/started log entries on startup

Trade filters & detail

  • URL filter params are now authoritative — click-throughs like /trades?symbol=X no longer pick up a stale status:open filter from localStorage
  • Open option positions in Trade Detail now show entered premium plus unrealized P&L (using the dashboard's manual option price) instead of Open
  • Max Drawdown click in Analytics now force-enables the drawdown chart if hidden and adds a brief ring highlight on scroll
  • Display Currency description in Settings clarified — it changes the symbol only, no FX conversion

Broker sync date range

  • New sync_start_date column on broker_connections (NULL = All Time)
  • Sync Trades From preset selector (All Time, This Year, Last 30/90 Days, Last 1 Year, Custom) in both the IBKR setup modal and the connection settings modal
  • syncConnection() falls back to the connection's sync_start_date when no explicit start is supplied, applying the floor to scheduled auto-syncs as well

Image upload UX

  • Paste images from the clipboard directly into the trade and diary upload zones (shortcut label adapts to platform)
  • Warn before saving an edited trade when images are selected but not yet uploaded, then flush pending uploads on confirm

Features

Stock Analyzer / DCF valuations

  • Auto-save every Calculate — no more clicking Save Valuation
  • Saved Valuations panel always visible (was hidden until a symbol was searched)
  • Colored symbol chips per row; current-symbol rows group at top with an Only {symbol} filter
  • Click a saved valuation for a different symbol to switch the analyzer and auto-load its assumptions/fair values
  • Loading a saved row rehydrates the Bear/Base/Bull cards from stored fair values; margin-of-safety recomputed client-side

Fixes

  • saveValuation now rounds shares_outstanding before INSERT (Finnhub returns shares in millions; the *1e6 multiply yielded floating-point residue like 1036160000.0000001 for NOW, which Postgres rejected on the BIGINT column with a 500)
  • Added migration 180_create_email_log.sqlemailService.logEmail() and the retention email schedulers reference an email_log table that no migration ever created, causing relation "email_log" does not exist errors on every scheduled run

Other

  • Simplified the quick deployment script
  • GitHub Pages landing page

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track TradeTally

Get notified when new releases ship.

Sign up free

About TradeTally

Advanced financial trade tracking and analytics

All releases →

Related context

Beta — feedback welcome: [email protected]