How TailJournal works.
Every feature, exactly how it works, what each number means, and what your plan unlocks. If you ever wonder how something behaves, the answer is here. Questions left over? Contact us.
Getting started
Get a brand-new account ready to track trades — by connecting a broker, importing a CSV, or adding trades by hand.
Your first data
A 3-step wizard runs on sign-up: (1) connect a broker or pick "Manual / CSV" (skippable), (2) how you trade — style (scalp/day/swing/position) and markets (stocks, options, futures, forex, crypto), used to tailor the dashboard, and (3) starting balance (default $25,000), used for % returns and drawdown.
The first time you have no accounts, the app auto-provisions one named Main so you can log or import trades immediately.
All plans. You never need a broker to start — the default account lets you import a CSV or add trades by hand right away.
Trading accounts
Separate "books" you log trades into — a live account, a paper account, a prop-firm challenge, or one per broker. Analytics are computed per account or across all.
Each account has a name (1–80 chars), a type (LIVE / PAPER / BACKTEST), a 3-letter currency (default USD), a starting balance, and an optional broker tag. Connecting a broker auto-creates a dedicated account for its synced fills.
- 1Open Settings → Accounts & Brokers (or the in-app account switcher).
- 2Create an account with a name, type, currency and starting balance.
- 3To move existing trades, select them on the Trades page → Move → pick the target account.
| Plan | Trading accounts |
|---|---|
| Free | 1 |
| Plus | 3 |
| Pro | Unlimited |
Manual trade entry & editing
Add a trade by hand and refine it later (rating, notes, exit, P&L, account, tags, screenshots).
The Add trade form captures account, symbol, side, quantity, entry price, optional exit price, entry time and fees. With an exit price, net P&L is auto-calculated: (exit − entry) × quantity × (+1 long / −1 short) − fees. Editing lets you set a 1–5 star rating, a reviewed flag, notes (≤10,000 chars), exit, P&L, and which account it belongs to.
- 1On the Trades page, click Add trade.
- 2Fill in account, symbol, side, quantity, entry price and entry time (exit/fees optional).
- 3Save — P&L is computed if an exit is set.
- 4Click a trade to rate it, add notes, tag it, or move it.
All plans. Trade creation is rate-limited to 120/minute. The Trades table renders the first 300 matching rows — use the search and filters to narrow large accounts.
CSV import
Bulk-import your history from any broker or journal export by uploading a CSV into a chosen account.
Limits: 5 MB max file, 20,000 rows max, 10 imports/minute. Headers are matched case-insensitively. Recognized columns (first match wins):
- Symbol (required):
symbol,ticker,instrument - Entry price (required):
entryprice,entry price,buyprice,open price,price - Entry time (required):
entryat,entry time,open time,date,opened - Side:
side,direction,type— "short"/"sell" → SHORT, else LONG - Quantity:
quantity,qty,size,shares,contracts(default 1) - Exit time / price:
exit time/close time,exit price/close price - Fees:
fees,commission· P&L:pnl,profit,realized pnl· R:r,r multiple
Currency symbols and commas are stripped from numbers. Dedupe uses a stable key (a hash of symbol/side/qty/entry/entryISO/exit) so re-importing the same export is a no-op. The result toast reports imported / duplicates / invalid / capped counts.
- 1Open the Trades page; optionally download the Sample CSV template.
- 2Click Import CSV and choose your file — trades land in the selected account.
- 3Read the summary toast.
Broker auto-sync
Connect a supported broker or exchange so TailJournal pulls your fills automatically — no manual export.
From Settings → Accounts & Brokers → Connect, a directory of ~80 brokers shows each one's method: OAuth, API key, or CSV import. API-key credentials are validated against the broker, then encrypted at rest and never shown again. Each connection gets its own account; syncs fetch round-trip trades since the last sync, deduped by the broker's id. Live connectors exist for Alpaca, OANDA, Kraken, Tradier, Bybit, KuCoin, Binance, Coinbase, Tradovate, Interactive Brokers and Charles Schwab; every other broker connects via CSV until a connector ships.
- 1Settings → Accounts & Brokers → Connect, then pick your broker.
- 2API key: paste the scoped, read-only keys. OAuth: authorize on the broker site.
- 3Click Sync to pull fills (auto-syncs on connect); Disconnect to remove.
Broker auto-sync requires Plus or Pro. Free uses CSV import.
Analytics & reports
Every figure is computed by computeStats over your closed trades (P&L not null), sorted by exit time. Open trades are excluded from all stats.
Dashboard at a glance
The home analytics screen summarizes every closed trade in your visible history: headline stat cards, a performance-score radar, an equity curve, a P&L calendar, a win/loss donut, a P&L-by-time-of-day chart, and recent trades.
One call to GET /api/analytics runs computeStats over your trades. The $ / % / R control switches the display unit; the Mask toggle hides dollar amounts (shows ••••) for screen-sharing.
All plans see the dashboard; the history window differs — Free shows the last 90 days, Plus & Pro are unlimited.
Performance Score (0–100)
A single composite grade of trading quality, shown out of 100 with a label (Elite / Strong / Developing / Needs Work) and a radar.
A weighted blend of four normalized inputs, each capped at its "max" via score(v, max) = clamp(v/max × 100, 0, 100):
- Profit factor — 30% (full marks at ≥ 2.6)
- Avg win/loss ratio — 25% (full marks at ≥ 2.6:1)
- Win rate — 25% (full marks at ≥ 60%)
- Drawdown control — 20% (
100 − score(|maxDrawdown|, peak))
| Score | Label |
|---|---|
| ≥ 80 | Elite |
| 65–79 | Strong |
| 50–64 | Developing |
| < 50 | Needs Work |
Equity curve & P&L calendar
The equity curve is a running cumulative-P&L line with per-trade daily bars; the same pass tracks your running peak and max drawdown. The P&L calendar shades each day by net P&L with weekly and monthly totals.
Days are bucketed by your account timezone (zonedDayKey), so a late-night fill lands on the correct local day. Calendar cell intensity saturates at ±$800 (a fixed visual scale). The Mask toggle replaces values with ••.
Reports (filters & breakdowns)
A drill-down screen that groups your performance and ranks it, with a bar chart, summary cards, and a sortable table.
Four breakdown tabs: Day/Time (weekday), Symbol (ticker), Setup/Playbook, and Tag. Each group shows trade count, net P&L, total R, and win % (a win = P&L > 0). Summary cards surface the most profitable, least profitable, and highest-win-rate groups (the win-rate card ignores groups with < 2 trades).
Metrics glossary
Every figure is computed in lib/analytics.ts. A win = P&L > 0, a loss = P&L < 0, breakeven = exactly 0 (counted in totals but neither a win nor a loss).
- Net P&L — sum of every closed trade's P&L.
- Win rate — wins ÷ trades × 100.
- Profit factor — gross profit ÷ gross loss. > 1 is profitable; the card flags ≥ 1.5 as "healthy".
- Average win / loss — mean profit of winners / mean size of losers.
- Expectancy —
(winRate × avgWin) − (lossRate × avgLoss): expected profit per trade. Positive = an edge. - Max drawdown — the largest peak-to-trough drop in cumulative equity (shown negative).
- Total R — the sum of each trade's R-multiple (risk-normalized result).
| Plan | Analytics window |
|---|---|
| Free | Last 90 days |
| Plus | Unlimited |
| Pro | Unlimited |
Journaling & strategy
The reflective layer — log how you felt, write notes, codify your strategies, tag trades, and build a daily habit. All free on every plan.
Daily journal
A day-by-day reflection log: for each session you record a mood (great / good / neutral / bad / tilted) and free-text notes, alongside the session's auto-computed stats and an AI day summary.
One entry per calendar day (keyed by userId + date). Mood saves instantly on click; notes auto-save ~600ms after you stop typing — there is no Save button. The mood you log here is the input to the Psychology screen's "Mood vs outcome" analysis, and logging keeps your journaling streak alive.
- 1Open Daily Journal and pick a day in the left rail.
- 2Click a mood face (saves instantly).
- 3Type your reflection in Day notes — it auto-saves.
Notebook
A freeform, folder-organized rich-text wiki — pre-market prep, strategy write-ups, psychology notes, lessons — separate from the dated journal.
Each note has a folder, title and HTML body (auto-saved on blur, sanitized server-side; links/images limited to http(s)/mailto). A "folder" exists as long as a note uses that name. Up to the 500 most recent notes are shown.
- 1Open Notebook; click New note to add one to the current folder.
- 2Type a title (saves on blur).
- 3Write the body; use the toolbar for bold/italic/lists/links/code/quotes/images.
Playbooks
Named, reusable strategy definitions — entry rules, exit rules, conditions — that you grade yourself against. Each shows trade count, net P&L, win rate, and an adherence score.
A playbook holds a name, description, and up to 100 rules grouped as entry / exit / conditions. Trades link via a "Linked strategy" field; the playbook's stats aggregate its tagged trades, and adherence reflects how often you followed its rules. Playbooks can also be sold on the Marketplace.
- 1Open Playbooks → New playbook.
- 2Select it, then Add rule and choose its group.
- 3Save, then link trades from a trade's drawer.
| Plan | Playbooks |
|---|---|
| Free | 2 |
| Plus | 3 |
| Pro | Unlimited |
Streaks & weekly recap
A journaling streak counts consecutive days you logged a mood or notes (with a current and best streak). A once-a-week recap email summarizes your week's net P&L, trade count and win rate, plus a streak nudge.
The streak only breaks once *yesterday* is missed (today not yet logged is fine). The recap is sent to recently-active users who traded that week; turn it off in Settings → Notifications.
All plans (journaling is unlimited everywhere, including Free).
Advanced analysis
Replay the market and your own trades, get an AI read on your record, and see a behavioral mirror of how you trade.
Backtesting
A bar-by-bar market replay sandbox: scrub through candles, place simulated orders from a floating ticket, and watch open P&L update as price prints — practice without risking capital.
A replay head walks the bars (Play advances it on a timer; 0.5×–4× speed). Pan by dragging, zoom by scrolling, click a bar to jump. The order ticket fills at the current close; open P&L = Σ (currentClose − fillPrice) × qty × (buy ? 1 : −1). The dataset is a generated practice series, not your real broker data.
Pro. (Backtesting is positioned as the Pro tier in the app.)
Trade replay
A tick-by-tick "instant replay" of one of your own closed trades: it animates price from your entry to your exit so you can re-live how the position developed.
An 80-point price path is synthesized between your real entry and exit prices (seeded from the trade id). Replay P&L updates as the head moves; the X-axis is labeled with times derived from your entry time and hold duration. Your entry, exit, side, qty and P&L are real; the intra-trade wiggles are an illustrative reconstruction, not recorded ticks.
Pro only.
AI Coach & chat
AI Coach is two things: an AI coach that writes a candid critique of your record with 3 action items, and Ask AI Coach, a chat box that answers both questions about your own trades *and* general trading questions — strategies, risk, psychology, and how stocks, options, futures, forex and crypto work (with optional chart attachments).
For questions about your record, the stats are computed deterministically in code first (win rate, profit factor, expectancy, behavioral signals over your last 600 trades) and the model narrates those numbers without fabricating figures. For general questions it draws on its own knowledge. It has no real-time prices or news, so it gives frameworks rather than live quotes. Ask supports up to 3 image attachments (≤5 MB each) for vision analysis.
Plus and Pro. Rate limits: Ask 20/min, Coach 12/min; questions 3–500 chars.
Psychology / tilt analytics
Your behavioral mirror: a discipline score, a mistake-cost ledger that puts a real $ and R figure on each bad habit, mood-vs-outcome and time-of-day breakdowns, and a discipline calendar — coaching, not judgement.
- Revenge trading — re-entry within 15 min of a loss.
- Letting losers run — a trade held past −1.5R.
- Oversizing after a loss — size ≥ 1.5× your median after a red trade.
- Overtrading — trades beyond ~1.5× your normal trades/day.
- Post-win euphoria — a quick re-entry right after a big winner (> 1.5× avg win).
- Off-playbook — a trade entered with no playbook tagged (only if you use playbooks).
The mistake-cost sums the actual $ and R of every flagged trade. The discipline score starts at 100 and subtracts weighted, capped penalties per detector. The report also compares against your prior 90 days (a ▲/▼ delta). Day/hour bucketing uses your account timezone. Needs 8+ closed trades to unlock.
Plus and Pro.
Funded accounts (prop firms)
Turn your imported fills into a live prop-firm scorecard. For each evaluation/funded account, TailJournal tracks drawdown, daily loss, profit target, consistency and trading days against your firm's rules, and labels it In progress, Passed, or Breached. Plus/Pro.
How funded accounts work
A "prop account" is a rule overlay on top of a normal trading account. You import your prop firm's CSV statement into a trading account, then attach a prop account that points at it. Every page load recomputes status from your latest imported trades — nothing is cached. There is no live broker API yet; CSV import is the data feed (live sync is a planned phase 2).
- 1Open Funded → Add a prop account.
- 2Pick your firm (Apex, Topstep, MyFundedFutures, TakeProfit, Bulenox, FTMO, or Custom) — it prefills the rule template.
- 3Choose the trading account holding your fills, or + New to create one.
- 4Click Import fills (CSV) and upload your firm's statement.
- 5Set the label, account size, phase and starting balance; tune the rules.
- 6Click Add account — the live card appears. Re-import any time to update it.
Drawdown: trailing vs end-of-day vs static
The drawdown rule is the loss floor your balance must never touch. The three models prop firms use are all supported:
- Trailing — the floor trails the highest balance reached after any trade (per-trade intraday peak), minus your max-drawdown amount. The floor ratchets up with new highs but never falls. The strictest model.
- End-of-day — same trailing math, but the peak only updates on each day's closing balance, not intraday spikes.
- Static — a fixed floor at
starting balance − max drawdownthat never moves.
The card shows drawdown headroom (distance to the floor, as a %) and the live "$X to breach". A breach is flagged if the balance ever touched the floor — a single past breach permanently marks the account breached.
Daily loss, profit target & consistency
Trades are bucketed into trading days (in your timezone); any day whose net P&L ≤ −daily-loss-limit is a violation, and any violation breaches the account. The card surfaces today's P&L and your worst day. Set 0 to disable.
Net profit = current balance − starting balance; the target is reached at ≥ profit target. The account reads Breached if drawdown or a daily-loss violation occurred (breach wins over everything), Passed if target reached AND trading days ≥ minimum AND consistency is OK, else In progress.
Only checked when configured and net profit is positive: your largest single-day gain must not exceed consistency% × total net profit. Failing it blocks Passed (but doesn't itself breach). The card shows "share% / cap%".
Firm default templates
Picking a firm prefills every rule from a built-in template, scaled to your account size. These are generic starting points — reconcile every value against your firm's current contract.
| Firm | Drawdown | Max DD | Target | Daily loss | Consistency | Min days |
|---|---|---|---|---|---|---|
| Apex | Trailing | 6% | 6% | none | 30% | 1 |
| Topstep | Trailing | 4% | 6% | none | 50% | 2 |
| MyFundedFutures | Trailing | 5% | 6% | none | 40% | 0 |
| TakeProfitTrader | End-of-day | 5% | 6% | none | 50% | 5 |
| Bulenox | Trailing | 5% | 6% | none | none | 0 |
| FTMO | Static | 10% | 10% | 5% | none | 4 |
(Percentages are of account size; the form shows them as dollar amounts.)
Verified record & sharing
Prove your stats come from real broker fills, climb a public leaderboard, get a public profile, and share dollar-free performance cards. The core privacy rule: dollar amounts are never shown publicly unless you explicitly opt in.
Verified track record
A trust marker that your stats come from real, broker-synced fills — not hand-typed numbers. You're verified when you meet all three: at least one connected broker, at least 10 broker-synced trades (each carrying a broker externalId and a P&L), AND 30+ days of history — your earliest synced trade must be at least 30 days old. Manual trades never count toward the bar.
- 1Connect a broker in Settings → Connections.
- 2Let your fills sync — each synced trade counts.
- 3The Verified track record card in Settings shows progress on both the trade count and the 30-day history until you clear the bar.
No plan tier required — verification is purely broker + 10 synced fills + 30 days of synced history. It's the prerequisite for the leaderboard and public profile.
Public leaderboard
A public ranking at /leaderboard of opt-in, broker-verified traders, sorted by performance score over their synced fills. No dollar amounts — ever.
You appear only if you opted in, aren't suspended, and are verified — a connected broker, ≥10 synced trades, and 30+ days of synced history. Columns: rank, trader (linked to their profile), score, win rate, profit factor, trade count. Period filters (30d / 90d / all-time) re-rank the board; rank movement arrows (▲/▼/NEW) only apply to the all-time board.
Public trader profiles (/u/handle)
A shareable public profile for an opted-in verified trader, showing headline metrics and an anonymized equity-curve shape.
Shows avatar, name, verified badge, @handle, leaderboard rank, "verified since", and four tiles (score, win rate, profit factor, verified trades). The equity curve is rebased to a 0–100 index — the shape survives but no dollar magnitude leaks. A unique handle is allocated automatically the first time you opt in.
- 1Get verified (broker + 10 synced trades + 30 days of history).
- 2In Settings → Verified track record, flip "Show me on the public leaderboard" on.
- 3A link appears: "Your public profile — /u/<handle>". Copy it to share.
Performance snapshots & trade cards
Two share artifacts: a performance snapshot (/r/<token>) summarizing your stats over a period, and a trade share card (/s/<token>) for a single trade. Both are dollar-free by default.
Snapshots cover 30d / 90d / YTD / all-time. With Show $ amounts off (the default), net P&L is stripped and the equity curve is rebased to 0–100 — metrics (win rate, profit factor, score, trade count) still show. You pick a light or dark card theme. Share links are unguessable random tokens; trade cards are revocable ("Stop sharing"). The verified badge appears if you're verified. Rich link unfurls (OG images) are generated for both.
- 1On the Dashboard, click Share; pick a period, toggle $ amounts, choose a theme.
- 2Click Generate share link and copy the
/r/<token>URL. - 3For a single trade, open it → Share → copy the
/s/<token>link.
The public privacy model
- Dollar amounts are never shown publicly by default. Snapshots and trade cards require an explicit "Show $ amounts" opt-in; the leaderboard and profiles never expose dollars at all.
- Equity curves are rebased to a 0–100 index wherever dollars are withheld — shape visible, magnitude hidden.
- Public ranking/profile data is restricted to broker-synced fills; personal snapshots may include manual trades.
- All share links are unguessable random tokens, and trade cards are revocable.
Marketplace & referrals
Buy and sell playbooks, and earn recurring commission for referring traders. Both paid out directly to your bank via Stripe Connect. Marketplace is Plus/Pro.
Strategy marketplace
Buy proven playbooks from other traders, or sell your own. Sellers keep 85% of every sale; the platform takes a flat 15%, settled to the seller's bank via Stripe Connect.
Listings are priced $3–$500. A sale uses a Stripe destination charge (15% application fee, 85% to the seller). Buying copies the playbook into your own account as an independent copy — later edits by the seller don't sync to it. A strategy is only buyable once its seller has completed Connect onboarding. Reviews (1–5 stars + comment) are gated to paid buyers, so each carries a "Verified buyer" badge.
- 1Marketplace → Sell & earn; click Set up payouts to onboard with Stripe (≈2 min).
- 2Choose a playbook, set a title, summary and price ($3–$500) — your 85% net shows live.
- 3Click List strategy. Unlist/relist or delete any time.
- 1On Browse, click a card → Buy → complete Stripe Checkout.
- 2The purchased playbook appears in your Playbooks.
- 3In the detail modal, rate 1–5 stars and write a review (editable later).
Referral program & payouts
Earn 30% recurring commission on every trader you refer who upgrades — accruing on each invoice they pay, and withdrawable to your bank once you reach the $20 minimum.
You get a unique /?ref=CODE link. A visitor's referral is stored in a 30-day cookie and attributed on signup (first attribution wins; self-referral blocked). On each invoice.paid, 30% of the actual amount charged is added to your lifetime balance — so monthly and annual both pay out correctly. Withdrawals go via a Stripe Connect transfer to your bank.
- 1Settings → Billing → Refer & earn; click Copy and share your link.
- 2Commission accrues automatically as referred traders pay.
- 3Click Set up payouts to onboard with Stripe Connect.
- 4Once your balance reaches $20, click Withdraw.
Tools, plans & security
Free calculators, your account settings, the plan matrix, and exactly how we protect your data.
Free trader calculators
Four pure-math calculators that run entirely in your browser — no account, no network call, nothing stored. Free forever, on every plan (signed in or out), at /tools.
- Position size —
Shares = (Account × Risk%) ÷ |Entry − Stop|. - R-multiple —
R = (Exit − Entry) ÷ (Entry − Stop), plus reward:risk. - Expectancy —
(Win% × AvgWin) − (Loss% × AvgLoss)per trade. - Risk of ruin — a 1,500-run Monte-Carlo of your odds of surviving variance.
Plans & pricing
| Free | Plus | Pro | |
|---|---|---|---|
| Price (monthly) | $0 | $29 | $49 |
| Price (annual) | $0 | $288 | $399 |
| Trading accounts | 1 | 3 | Unlimited |
| Playbooks | 2 | 3 | Unlimited |
| Analytics history | 90 days | Unlimited | Unlimited |
| Broker auto-sync | — | ✓ | ✓ |
| AI insights | — | ✓ | ✓ + agents |
| Backtesting | — | — | ✓ |
| Trade replay | — | — | ✓ |
| Calculators (/tools) | ✓ | ✓ | ✓ |
Upgrading, billing & settings
Upgrade via Stripe Checkout (Settings → Billing → Upgrade; promo codes allowed). Manage or cancel anytime via the Stripe Billing Portal (Manage) — cancelling keeps access until the period ends, then drops to Free. Invoices with PDF links appear in Billing.
Four tabs: Account (name, timezone, base currency, avatar, theme, language), Accounts & Brokers (sub-accounts + broker connections), Notifications (daily recap, risk alerts, broker sync, leaderboard, product updates), and Billing. Theme and language are saved per-device. Danger zone → Delete permanently removes your account and all data.
66 locales (with right-to-left support); untranslated keys fall back to English. Saved to the device.
Security & privacy
We treat your fills, P&L, notes and broker connections as sensitive data. The full policy is at /security.
- Read-only broker access — OAuth or scoped, read-only API keys; no order-placement or fund-movement scope is ever requested. We never ask for your broker password.
- Encryption — TLS in transit; AES-256 at rest; broker tokens are additionally encrypted application-side with AES-256-GCM and a rotating keyring, with the key held in a separate secrets manager.
- Passwords — bcrypt-hashed and never recoverable; or use Google sign-in.
- Isolation — every record is owned by one user and authorization is enforced server-side on every request (fail-closed).
- Your data is yours — never sold; export your journal anytime; account deletion cascades and revokes broker connections.
- Public artifacts — dollar amounts are stripped server-side unless you explicitly opt in.