Find out whether your traders sell winners more readily than losers — measured privately on your own records.
We measure the plan gap: the difference between how your traders plan to handle wins and losses and how they actually trade. One measure is available today: the disposition effect, which is whether your traders close winning positions more readily than losing ones.
Tell us the population and the period. Your staff run a published script inside your systems. You get back PGR, PLR, their pooled ratio and a t statistic, the counts and period behind them, and a one-page memo. The price is fixed before anyone sees data.
Start a Pilot — $745 USD See a sample memo
Email only, no calls. See what it costs
Here as a trader? See Individual traders or the free tools. We can’t help with disputes about a firm.
- Your records stay on your systems
- Published script run by your staff
- Aggregate counts are all that comes back to us
- Number, t statistic, period and memo returned to you
partner_disposition.py is public: free for non-commercial use from v2; engagements include a commercial licence. Read the code
- 6 published studies
- Scripts public for 4 of 6
- 6 corrections, dated and logged
- No firm can pay to change a number
Who it is for
A prop firm or broker
Do our traders close winning positions more readily than losing ones?
A trading journal or platform
Can we show users this measure inside our product? Journals & platforms
A copy-trading platform
Does our leader ranking predict what followers earn? Copy-leader test
A firm making behaviour claims
Does our claim hold on our own users’ records? Claims test
What it costs
Prices in USD, before any applicable sales tax. The standard engagement measures one thing today: the disposition effect, reported as PGR, PLR, their pooled ratio and a t statistic, with the counts behind them. If the figure you publish is a different one, write anyway; we’ll tell you plainly whether the published script can compute it.
| Engagement | What you get | Delivery | Payment | Price (USD) |
|---|---|---|---|---|
| Pilot | Your first Snapshot at an introductory price, one per firm: the records behind one disposition figure, measured with the public script on your own records. The figure, its denominator and period, the t statistic, the script version and a one-page memo. Credited in full toward a Memo signed within 60 days of delivery. | 5 business days | 100% on acceptance | $745 |
| Snapshot | One disposition figure for one population and period you name: pooled PGR, PLR, their ratio and a t statistic, the counts and period behind them, the script version and the one-page memo. | 10 business days | 50% on acceptance; 50% within 7 days of delivery | $2,500 |
| Memo | Everything in a Snapshot, plus your pooled ratio set beside the public study’s pooled ratio, with the differences explained in writing. Only the ratios are roughly comparable, and neither sets a target for yours. A private report; an optional co-published study. | 15 business days | 50% on acceptance; 50% within 7 days of delivery | $6,000 |
| Outcomes pack | Everything in a Memo, for your whole book and for each split you agree in the scope (for example by account size or instrument), run by the same script. | 20 business days | 50% on acceptance; 50% within 7 days of delivery | $12,000 |
Pilot refunds, from the terms: Extract refund: if your extract can’t be made to run with the script, even with our help by email, the fee is refunded in full. Reproduction refund: if your own re-run of the same published script version on the same export (same file hash) does not reproduce the figure, the fee is refunded in full, by the original payment method, within 10 business days.
Before starting, we agree with you in writing what result would make a Memo worth doing.
Optional quarterly re-check: the same measurement on a fresh extract, at 25% of the tier price, payable in advance, delivered in 5 business days.
Every engagement is invoiced in USD; pay by bank transfer, or, in Canada, the CAD equivalent by Interac e-Transfer. Card payments are accepted through a secure Stripe link, sent only after you accept the scope. One-off engagement, fixed scope, no subscription.
Delivery times are in business days. The clock starts when payment is received and the script’s output comes back without validation errors, and it pauses while a clarifying question is open.
If you don’t like the number, no one else sees it. You can decline publication outright, and we publish nothing from the engagement. The fee is the same either way. The method is the same for every firm and for the free research. Paying buys scope and privacy, never a result. Independence policy
From first email to memo
| Step | Who | When |
|---|---|---|
| Email or form: which traders, which dates | You | Day 0 |
| Reply | donttrade | Within 1 business day |
| Written scope and fixed price, free (nothing owed until you accept) | donttrade | After your reply |
| Accept, sign the agreement, pay | You | When ready |
| Your staff run the script and send back what it prints | Your staff | Your pace |
| Memo delivered | donttrade | Within the tier’s business days of payment and a clean run |
The legal contracting party is named in writing, in the engagement agreement, before anything is paid. An NDA or DPA is signed on request. A “no measurable effect” answer is a finished job and is invoiced as one.
Copy-trading platforms: the copy-leader persistence test
Sold to platforms only, never to followers. For copy-trading apps, social trading networks, crypto exchanges with copy features and vault front-ends.
Does your leader ranking predict what followers actually earn after copying costs and delay? The test answers that out of sample: leaders are ranked on one period and judged on a later period the ranking never saw. It is adjusted for luck, so a ranking counts only if it does better than chance would.
- A method fixed in advance. The ranking rule, the periods, the cost and delay assumptions and the pass mark are fixed in writing before anyone sees data, and they don’t change afterwards.
- Run on your systems. Your engineers run a script we send with the scope, and can read every line of it first. Only aggregate results come back. We hold no follower, leader or account record.
- About your ranking, not about people. The result names no leader and scores no one.
- Not advice. It does not recommend any trader or leader, to you or to your followers, and makes no promise about future results. It is not an audit: please don’t call any leader or ranking audited, certified or verified.
Which engagement: the Pilot ($745 USD) covers one ranking rule and one period, one per platform; a Snapshot ($2,500) the same; a Memo ($6,000) every rule and period agreed in the scope; an Outcomes pack ($12,000) adds a re-check on a later period. Payment, delivery and refunds are those of the engagement.
Firms that make behaviour claims: the claims substantiation test
We report the result whether it supports the claim or not. For trading journals, education sellers, prop firms and brokers whose marketing says their product changes how traders behave, such as “our journal makes you more disciplined”.
Before anyone sees data, the claim is written down as a test: which behaviour, which users, which periods, what comparison, and what result would support it. That test is fingerprinted with a SHA-256 hash, recorded, and then run once, as written.
- Run on your systems. Your engineers run a script we send with the scope; only aggregate results come back.
- Either answer is a finished result. The fee is the same either way, and you decide whether anything is published.
- Limits stated. We tell you in the scope, before you pay, whether your records can test the claim at all. A before-and-after comparison, for example, cannot by itself show that your product caused a change.
- A test, with its result and its limits. It is not an audit. Please don’t call the claim or the product certified, verified or audited.
The law, in neutral terms (not legal advice). In Canada, the Competition Act treats as reviewable conduct a representation to the public, made to promote a product or a business interest, in the form of “a statement, warranty or guarantee of the performance, efficacy or length of life of a product that is not based on an adequate and proper test thereof, the proof of which lies on the person making the representation” (s. 74.01(1)(b)). Whether a particular test is adequate and proper for a particular claim is for you and your legal advisers to judge. We give no legal advice, and we don’t say that our test meets that standard.
Which engagement: the Pilot ($745 USD) covers one claim, one measure and one comparison, one per firm; a Snapshot ($2,500) the same; a Memo ($6,000) every measure and comparison agreed in the scope; an Outcomes pack ($12,000) runs the same pre-registered test again on a later period.
What stays on your systems
Your trade records and account identifiers. The script runs inside your systems on a five-column extract, one row per open position per day plus a row on the day it closes, with no names. From the export guide:
account_id,date,position_id,closed,pnl a7f3,2026-03-02,p91,0,110.50 a7f3,2026-03-03,p91,0,-40.25 a7f3,2026-03-04,p91,1,240.00
The first two rows are the unrealised mark at each end of day; the last is the realisation. A list of closed trades alone is refused by the script, by design. To see the shape first, run it on the synthetic file that make_fixture.py writes.
Everything that comes back to us (the script’s complete output on a synthetic file)
Synthetic test file, not real traders. This is the client script’s complete output from the published partner_disposition.py on the test file from make_fixture.py.
$ python3 make_fixture.py --out fixture.csv --seed 7
$ python3 partner_disposition.py fixture.csv --pnl-basis price
pnl basis: price (funding excluded)
accounts: 30
qualifying sale days: 256
data rows parsed: 14400
blank records skipped: 0
rows in qualifying pairs: 2048
rows discarded (no close that day): 12352
same-day marks superseded by close: 0
orphan closes (no mark row): 14 of 335 (4.2%)
identifier spelling collisions: 0
unicode data version: 14.0.0
PGR 0.2178
PLR 0.1119
ratio (PGR/PLR) 1.9470
t statistic 6.51
n gains (RG+PG) 1001
n losses (RL+PL) 1046
realised gains RG 218
paper gains PG 783
realised losses RL 117
paper losses PL 929
zero-pnl rows excluded 1
AGE-CONTROLLED FIGURES (holding age = calendar days since the
position's first row in this file)
positions with a known open date: 329
positions open on the first date (left out): 240
rows used (qualifying pairs, pnl not 0): 975
ratio, ages pooled, same rows: 2.0325
within-age ratio (Mantel-Haenszel): 1.9273
95% interval 1.3825 to 2.6867, by account
holding age gain rows loss rows PGR PLR ratio within-age
<=1 day 43 32 0.2093 0.0938 2.233 2.232
2-5 days 73 75 0.2055 0.1333 1.541 1.618
6-20 days 192 224 0.2240 0.0804 2.787 2.595
21-60 days 168 168 0.1667 0.1071 1.556 1.441
61-250 days 0 0 - - - -
251+ days 0 0 - - - -
fixed effects (account + holding day), linear probability model:
gain coefficient: 0.103986
standard error (account and date): 0.021478
ratio implied for gain rows (ATT): 2.0878
95% interval 1.4495 to 3.7307
gain timing (rows that have a previous row for the same position):
rows: 933
ratio, ages pooled: same day / previous row: 2.0604 / 1.8627
within-age ratio: same day / previous row: 1.9488 / 1.7481
fixed-effects ATT: same day / previous row: 2.0993 / 1.8586
sign changed since previous row, sold rows: 10 of 138
sign changed since previous row, unsold rows: 60 of 795
HOW TO READ THE AGE-CONTROLLED FIGURES
- Positions are sold less often the longer they are held. If losing
positions are on average older than winning ones, the pooled ratio at
the top can show an effect that is only an age pattern. The within-age
ratio compares winners and losers of the same holding age; use it, not
the pooled ratio, for the size of the effect.
- Holding age is counted from each position's first row in this file.
Positions already open on the file's first date are left out of these
figures because their age is unknown; the pooled figures still use them.
- The fixed-effects line compares each account with itself, at the same
holding day. It is a different average from the pooled ratio, so the two
are not expected to match.
- Gain timing: a position's gain or loss on the day it is sold may partly
reflect the sale itself (the fill or the closing mark). The lines that
take the gain or loss from the position's previous row avoid that. If
they are much smaller, the effect depends on same-day timing.
- Not ruled out: traders may sell large moves in either direction more
often (a V-shaped pattern, Ben-David and Hirshleifer 2012). Separating
that from a preference for selling winners needs the size of each gain
or loss relative to the position, which these five columns do not carry.
- The intervals here are clustered by account (the within-age ratio) and
by account and date (fixed effects). The t statistic at the top treats
every row as independent and is not.
- NOT MEASURED means the data cannot support the figure, never zero.
That block is the whole of it. No account IDs, position IDs, dates or individual P&L values are printed. The script is one Python file using only the standard library; it makes no network calls.
Retention: we keep the returned aggregates for the life of the engagement record, and never receive the extract.
What you receive
A one-page memo with these fields, every time:
- The figure
- Pooled PGR, PLR and their ratio, with the counts behind them, and the same comparison holding position age fixed, with its 95% interval
- Precision
- The t statistic and the counts behind it
- Denominator and period
- Exactly who was counted, who was left out, and the dates the extract covers
- Script version
- The exact code that produced the figure
- What this does not show
- The limits, stated before anyone asks
- Who may rely on it
- You only
The agreement, in brief
- Fixed scope and price, in writing before any data is seen.
- Publication only with your consent. You review anything describing your data first and may decline outright.
- Use of the name. You may say a figure was “computed with donttrade’s published script (version stated in the memo) and written up by donttrade under a fixed-scope agreement”, and nothing stronger: never audited, certified or verified.
- Liability is capped at the fees paid. Either side can stop in writing; no cancellation fees. Pilot terms
What the money does not buy
- No signals, no picks, no predictions. Nothing here tells anyone what to buy.
- No flattering version. If the number comes out against your marketing, that is the number.
- Not an audit and not an assurance engagement. No regulatory status, no badge or seal.
Industry codes for prop firms now ask for rules that are objective and can be checked from outside (an example code of conduct). Some firms already pay for outside reviews of their operations, such as payout times; those reviews cover operations, not how traders behaved. A figure computed with a published method can be re-run by anyone who reads it. Publishing a pass rate? Check the arithmetic with the free pass-rate calculator.
For your compliance team
Who will we contract with?
One person. The legal contracting party is named in writing, in the engagement agreement, before anything is paid. We provide whatever identity checks your due diligence needs. The pen name is how the research is published, not a contract term.
Does any account data leave our systems?
No. Your staff run the script inside your systems; we receive only what it prints. We never need access to your systems.
What if the number is bad for us?
Then that is the number. You can keep it private, and we publish nothing from the engagement. The fee is unchanged.
Can you publish without our consent?
No. You review anything describing your data first and may decline publication outright. We may say only that an engagement took place, without naming you or the figure.
Isn’t this a kind of audit?
No. It is a measurement with its limits stated. Please don’t describe it as audited, certified or verified.
What if we stop halfway?
No cancellation fees. The Pilot is refundable in full until data kick-off, the day your staff first run the script on your records. After that, it is refunded if your extract can’t be made to run, or through the reproduction refund. Snapshot, Memo and Outcomes pack are paid 50% on acceptance and 50% within 7 days of delivery; if either side stops, completed work is billed pro rata.
How do we pay?
Invoiced in USD; bank transfer, or in Canada the CAD equivalent by Interac e-Transfer. Card payments are accepted through a secure Stripe link, sent only after you accept the scope.
Can we talk on a call?
We work by email only, so every answer is in writing and can go straight to your compliance file.
Why is there no client list?
There are no paying clients yet. A firm that chooses to publish its result will be listed, with its consent.
Can we test it first?
Yes. The licence lets any organisation run it on synthetic or test data for 32 days, and the folder includes a generator that writes a test file. partner/ on GitHub
For press and partners
donttrade is independent research on how traders handle winning and losing positions. It publishes its studies, scripts and corrections, and measures firms’ own records on their systems under a fixed-scope agreement. Paying buys scope and privacy, never a result. When describing a result, please use the wording under “Use of the name” above. Method and code: /code/; corrections: /corrections/.
Start a Pilot, or ask a question
Tell us which traders and which dates. You get a written scope and a fixed price back, free. Nothing is owed until you accept the scope.
Prefer email? Write to donttrade.research@gmail.com.