The readout, without an account
biaX turns a closed-trade history into behavioral statistics. This page runs that computation in your browser — on a constructed sample tape, or on rows you paste in yourself.
Nothing you paste is sent anywhere. There is no API call on this page and no upload;
every figure below is computed from the table on this page by
/js/demo.js. The site's cookieless page-view counter loads here as it does
on every page, and it never sees your rows.
The rows
Sample Trader A: a deliberately constructed demo portfolio — not real fills
Two numbers per trade is enough
Keep the first line as the column names. Then one line per closed trade: how many days you held it, and the percent you closed at. Losses take a minus sign. That is the whole minimum — the box already has a runnable example in it, so you can edit the numbers and press Compute.
Optional columns — each one switches on another panel below
entry_date,entry_hour,ticker,hold_days,pnl_pct,entry_tags,added_to_loser
2026-05-04,9,TSLA,5,1.48,,0
2026-06-01,13,NVDA,38,-12.88,FOMO|Greedy,0
- entry_hour — hour of day, 0–23. Switches on the hour-of-day panel.
- entry_tags — how you felt going in, separated by
|. The names the app itself uses read directly, in either language —FOMO,Greedy,Calm,Confident,Impatient,Anxious,Regret,Panic,Revenge,Bored,Averaging down,Rule followed,Planned stop,Target hit, and the rest of the catalog. A name it doesn't recognise falls into “Other” rather than being dropped. - added_to_loser — how many times you added to the position while it
was down.
yes/noalso read. - entry_date, ticker — labels only; they change no figure.
-12.88and-12.88%both read. Column order doesn't matter as long as the first line names them. First 2,000 rows.
| # | Entry date | Hour | Ticker | Hold | P&L | Entry tags | Added while down |
|---|
0 rows in view.
What comes out
Hold time, split by how the position closed
Same rows, cut once.
Entry tags, grouped
Tags recorded when the position was opened — not after it closed.
Adding while the position was down
Counted from the rows, not self-reported.
Entry hour
Exchange local time, bucketed by the hour the position opened.
The statements the app would show
Up to three, ranked by the size of the average P&L gap in the bucket behind them. Every bucket under 10 trades is dropped before ranking.
What this data can't show
The part a screenshot usually leaves out. Three detectors exist in the app and stay silent here, because their input isn't in these columns.
How exact is this?
The formulas, thresholds, rounding, tag catalog and statement wording are transcribed from the app's own modules — a bucket under 5 trades is not reported, a statement needs 10, win rate rounds to four places, an average to two. The file names every server module it mirrors in its header comment, so the two can be diffed by hand.
Sample Trader A is a deliberately constructed demo portfolio — not real fills: 40 round-trips written to exercise every panel, including the empty ones. It is not a real person's account, and no figure here is presented as anyone's track record.
Everything above describes rows that already closed. It is not a recommendation, a rating of the trades, or a forecast. biaX connects to a brokerage read-only and never places an order. Research named on this page: Odean (1998) on the disposition effect, Arkes & Blumer (1985) on the sunk-cost effect.
The app does the same on your own history, with the price path filled in — see the plans or read the support FAQ.