User Guide

What every number means, what to type into every field, and why the model is built this way. This page explains concepts, not formulas — the underlying scoring math is intentionally not spelled out here.
On this page
Why this model exists The Dashboard — screening scores The Buy / Sell / Hold signal The Portfolio — your actual holdings Filtering by asset type Employer subsidy & tax fields (ESPP / RSU) Recording a sale & matching methods Stock splits Reading the register — statuses & locks

Why this model exists

The problem this tool is built to solve, and why it's structured the way it is.

Most "what should I buy" tools answer one of two questions: what's up the most right now, or what's cheap right now. Both are traps. Chasing what's up the most means buying after the move already happened. Buying whatever's cheapest means you can't tell a genuine bargain from something that's cheap because it's a bad investment that's declining for good reason.

This tool asks a third, more specific question instead: which securities have a long track record of being strong performers, and are currently trading below where they normally sit relative to their own history and their peers? That's a "buy the proven dip" screen — not a prediction, and not a signal to act on blindly. It's a shortlist of candidates worth a closer look.

Why this matters for you
It's much easier to be wrong chasing hype than to be wrong on a fund with a long history of strong, consistent performance that's temporarily out of favor. This model is built to surface the second kind of situation and filter out the first.

The Dashboard — screening scores

Every security you track gets four scores, each answering a different question. They're designed to be read together, not in isolation.
What you'll see on the Dashboard — held positions get BUY/SELL/HOLD, everything else gets BUY/WATCH/blank
TickerGroupPriceQualityOpportunityCombinedReboundHeldSignal
SMERY STOCK $35.67 82 61 70 28 ★ HOLD
ALIT STOCK $13.43 55 74 63 79 BUY
VTSTX MUTF $118.02 58 22 31 15 WATCH
QFRXX MUTF $4.12 32 18 22 9 —
None of these four are equal, and none but SMERY is currently held (no ★). ALIT screens as BUY — a genuine candidate. VTSTX is marginal — nothing wrong, nothing compelling — so it reads WATCH. QFRXX's quality score has fallen below a healthy bar, the same red flag that would trigger SELL if you held it — so instead of a misleading label, that row is simply left blank. SMERY is the one real, currently-held position, so it gets the full HOLD label instead.

Quality Score 0–100

A long-run measure of how strong and consistent a security's returns have been, deliberately built to ignore short-term noise. A fund that grinds out steady gains scores higher here than one that occasionally spikes but is mostly choppy — even if their raw returns end up similar.

Why it matters
Quality answers "is this fundamentally a strong performer," separate from whether it's cheap or expensive right now. A high-quality security having a bad month is a very different situation than a low-quality security having a bad month.

Opportunity Score 0–100

Combines quality with a genuine, current dip. This score requires two independent signals to agree before it treats a drop as a real opportunity — not just one. A security that's simply volatile, or one sitting exactly at its recent high, does not score well here even if it happens to have strong quality.

Why it matters
A single "it's down" signal is easy to fake — lots of things are randomly down on any given day. Requiring two independent confirmations meaningfully cuts down on false alarms.

Combined Score 0–100

A blend of quality and opportunity that specifically punishes imbalance — a security only scores well here if it's reasonably strong on both measures, not exceptional on one while weak on the other.

Why it matters
This is the score to glance at when you want one number that won't let a security "hide" a serious weakness behind one standout strength.

Rebound Score 0–100

Answers a different question than the others: does this security normally rank near the top of its peer group, and has it recently fallen hard in that ranking? This is peer-relative — it compares a security to others in its own group (e.g. other stocks, or other funds in the same category), not to the market as a whole.

Why it matters
This is the score built specifically to catch "a proven leader is having an unusually bad stretch" — the exact situation a pure price-drop screen tends to miss, because the security might still be up over the last year even while it's collapsed relative to its peers over the last month.
None of these scores predicts the future. They describe the past and the present precisely — how strong the track record is, and how far off its normal range it currently sits. What happens next is still up to the market, and to you.

The Buy / Sell / Hold / Watch signal

A single label summarizing the scores above into a screening verdict — computed for every security you track, not just what you currently hold.

The underlying screen is identical for every security — it's the same question either way: does this currently look like a genuine opportunity, a genuine problem, or neither? What changes is only the label, depending on whether you actually hold it:

SignalApplies toGeneral idea
BUYHeld & not heldLooks like a strong, genuine opportunity right now. Means "worth adding to" if you hold it, "worth starting" if you don't.
SELLHeld onlyThe position's underlying quality has meaningfully weakened, or it's fallen well outside its normal range with nothing to suggest it's a temporary dip.
HOLDHeld onlyNeither of the above — nothing urgent in either direction for a position you already own.
WATCHNot held onlyMarginal — nothing strong enough in either direction to be worth acting on, but not a red flag either. Worth a glance now and then.
(blank)Not held onlyWhatever would have triggered a SELL for a held position — a real red flag, not just lukewarm — is left blank rather than labeled at all for something you don't own.
Why it's built this way
A SELL label doesn't make sense for something you don't own — you can't sell what you don't have. But WATCH shouldn't cover that case either, since a real red flag isn't "marginal," it's a candidate to avoid — so it's left blank rather than dressed up with any label at all. This is also the direct answer to "what do I replace a SELL with": filter the Dashboard for BUY (or, at a stretch, WATCH) among securities you don't currently hold, and treat blank rows as ones to skip entirely.
Brand-new positions won't show a meaningful SELL/WATCH trend component right away — part of the logic depends on day-over-day changes, which need about a week of daily data to accumulate after a security is first added. This is expected, not a bug.

The Portfolio — your actual holdings

The Dashboard screens candidates. The Portfolio page tracks what you actually bought, sold, and still hold — down to the individual purchase.
What a ticker looks like once expanded
TickerBuy DateBuy QtyBuy PriceCost BasisCurrent PriceRemainingStatus
ALIT2025-06-11185.00$4.63$856.55$13.430.00CLOSED
SMERY2024-12-1245.00$10.65$486.20$35.6745.00ACTIVE

Why purchases are tracked as separate "lots"

Every time you buy shares of something, that purchase becomes its own row — even if you already own that ticker. Buying more SMERY next month doesn't merge into your existing SMERY position; it creates a second, independent lot with its own date, price, and cost basis.

Why it matters
Tax rules (and honestly, good bookkeeping) care about which specific shares you sell, not just how many. Lot-level tracking is what makes accurate realized gain/loss — and legitimate tax strategy around which shares to sell — possible at all.

Fields you enter when recording a purchase

FieldWhat to enterWhy it's needed
Purchase DateThe actual trade date.Determines holding period (short vs. long-term for tax purposes) and lot ordering for FIFO/LIFO matching later.
QuantityNumber of shares bought.The basis for every downstream calculation — cost basis, remaining shares, unrealized gain/loss.
Purchase PricePrice actually paid per share.Combined with quantity, this sets your true cost basis — the number every gain/loss calculation is measured against.
Transaction FeesTotal fees/commissions on the trade, if any.Fees add to your cost basis. Leaving this blank when a real fee was charged understates your true cost and overstates your gain.
NotesFree text — anything you want to remember about this specific purchase.Purely for your own reference; not used in any calculation.

Filtering by asset type

The Portfolio page shows a dropdown at the top that lets you filter the register to one type of position at a time.

Stocks price continuously throughout the trading day; mutual funds price once per day after market close. Mixing both in the same view can make the register feel inconsistent — a fund's price might be from yesterday's close while a stock's is from minutes ago. The type filter lets you focus on one category at a time.

ValueWhat it shows
STOCKIndividual equities — companies traded on an exchange intraday.
MUTFMutual funds — priced once per day after market close (NAV).
ETFExchange-traded funds — trade like stocks intraday but track an index or basket.
AllNo filter — every position regardless of type.
Default
The page defaults to STOCK on every load since that's the app's primary use case. Switch to MUTF or All whenever you need the full picture. The summary bar totals (Market Value, Cost Basis, Unrealized G/L, Realized G/L) always reflect only the positions currently shown — so the numbers you see are always consistent with what's in the table, not a total across everything.
The type filter is view-only — it never hides data permanently. Exports (CSV / XLSX) always export the full register regardless of which filter is active.

Employer subsidy & tax fields ESPP / RSU

Optional fields for shares you got through a workplace program at a discount, or for free. Only fill these in if they apply to a specific lot.
What the badges look like once filled in
TickerBuy PriceMkt Price at BuyCo. SubsidyTax Withheld
ALIT$6.77$7.97 $70.53 $21.16
FieldWhat to enterWhy it's needed
Subsidy TypeWhich mechanism applied: a straight purchase discount, a "lookback" pricing period, an outright stock grant (RSU), a guaranteed minimum price, or "Other."Different mechanisms are taxed differently and computed differently — this tells the app which shape of benefit you received.
Market Price at PurchaseWhat the stock was actually trading for on the open market on your purchase date — not the discounted price you paid.The gap between this and what you paid is the value your employer effectively gave you. Without this, that value is invisible and your cost basis looks artificially low without explanation.
Tax Withheld on SubsidyAny payroll/supplemental tax your employer already withheld specifically on the subsidy portion.This income is typically already reported as ordinary wages on your paycheck. Recording what was already withheld here helps you avoid mentally double-counting it as an additional, separate gain later.
Why this section exists at all
A discounted or free employer stock purchase isn't really "buying it cheap" the way a market dip is — part of what you received was compensation, not a bargain. Separating the two makes your true cost basis, and your true taxable event, visible instead of blended into an ordinary purchase.
This tool surfaces the numbers involved — it does not file or calculate your taxes. Confirm the exact tax treatment of your specific plan with your plan documents or a tax professional; subsidy taxation rules vary by plan type and by year.

Recording a sale & matching methods

When you sell, you're not just recording "I sold N shares" — you're choosing which specific purchase lots those shares came from.
FieldWhat to enterWhy it's needed
Sale DateThe actual trade date of the sale.Used for holding-period and gain/loss timing, and to correctly apply any stock splits by date.
Quantity SoldNumber of shares sold in this transaction.Determines how much is drawn down from the lot(s) you select, and can't exceed what's actually available.
Sale PricePrice actually received per share.Combined with the matched lot's cost basis, this produces your realized gain or loss on this sale.
FeesTotal fees/commissions on the sale.Fees reduce your net proceeds and therefore your realized gain — same principle as purchase fees, in reverse.
Matching MethodFIFO, LIFO, or Specific Lot ID.See below — this choice can meaningfully change your reported gain/loss.

Why the matching method matters

FIFO (first in, first out) sells your oldest shares first. LIFO (last in, first out) sells your newest shares first. Specific Lot ID lets you hand-pick exactly which lot(s) — and how many shares from each — the sale draws from.

Why it matters
The same sale can produce a very different realized gain or loss depending on which lots it's matched against, especially if you bought the same security at very different prices over time. Specific Lot ID exists specifically so you (or your tax preparer) can choose intentionally rather than accept a default.
Deleting a sale restores the shares it consumed back to the original lot(s) and unlocks those lots for editing again — useful for correcting a mis-entered sale without losing history.

Stock splits

Recorded once per event, applied automatically to the lots it should affect — and only those lots.
FieldWhat to enterWhy it's needed
Split DateThe effective date of the split.Determines which existing lots are eligible to be adjusted.
RatioE.g. 2 for a 2-for-1 split, or 0.5 for a 1-for-2 reverse split.Sets how share count and per-share cost basis are recalculated on affected lots.
Why it's careful about which lots it touches
A split only adjusts lots that were active and already purchased before the split date. A lot you buy after the split, or a lot you'd already fully sold before the split happened, is left alone — so applying a split can never quietly rewrite a transaction that shouldn't have been affected by it.

Reading the register — statuses & locks

The Portfolio page groups everything by ticker, then by buy lot, then by the sale(s) against that lot — click to expand each level.

Lot status

StatusMeaning
ACTIVENo shares from this lot have been sold.
PARTIALSome shares sold, some remain.
CLOSEDFully sold. The lot stays visible in the register rather than disappearing — its history is preserved permanently.

Why lots "lock" once sold

Once a sale references a lot, that lot's purchase date, quantity, price, and fees become read-only (shown with a 🔒). The realized gain/loss already recorded for that sale was calculated from those exact numbers — changing them after the fact would silently corrupt a number you may have already reported on a tax return.

Why it matters
If you genuinely need to fix a mis-entered purchase after it's been sold, delete the associated sale first (this restores the shares and unlocks the lot), fix the purchase, then re-enter the sale. Employer subsidy/tax fields are the one exception — those can always be edited, locked or not, since they don't affect cost basis or any already-recorded realized gain/loss.