How Prop Preflight calculates its numbers
This note describes the method behind every figure on the results page. Each rule here is covered by automated tests.
1. Reading the file
- Formats. NinjaTrader 8 trade exports, Tradovate Performance exports, and generic CSVs that have a time column and a profit column.
- Accounts. A file with more than one account is never merged into one balance. The user picks the account to analyze.
- Dates.
- Day/month or month/day is inferred from the whole file. Any day over 12 settles it.
- If every day is 12 or under, the reading that keeps trade numbers in time order is used.
- Tradovate exports are read month/day.
- Otherwise the user is asked.
- A file that uses both orders is rejected.
- Duplicates. A repeated row with the same trade number is dropped. Identical rows with no trade number are kept and reported.
- Position size.
- Size caps are checked against the total size open when each trade was entered.
- That total catches scale-outs exported as several rows, and stacked positions.
- Trades that exit and enter at the same timestamp do not count as overlapping.
2. Fees
The profit column is checked against each trade's own prices: gross = (exit − entry) × quantity × point value × direction. Tradovate files use (sell − buy) instead.
| Finding | Classification | Treatment |
|---|---|---|
| Profit = gross, no fee recorded (absent or $0) | Missing | Assumed round-trip fee per contract (default $4.50) or per micro ($1.50); the user can confirm the fees really were zero |
| Profit = gross, fees listed | Gross, fees listed | Listed fees subtracted once |
| Profit = gross − listed fees | Net | Unchanged |
| Profit below gross by a fee-sized amount, nothing listed | Net (embedded) | Unchanged |
| No prices, no side, unknown contract, or numbers that don't reconcile | Unverified | The user chooses before results show: already after fees, before fees (assumed rate), or subtract the listed fees |
- Each trade is classified on its own, so a commission template added partway through a history is handled.
- A trade verified as net is never charged again, under any setting.
- Fees are charged at the close of each trade.
Evaluation commissions are the firm's, not yours
- Evaluation accounts charge each firm's own commission schedule, which usually differs from a trader's live-account fees.
- For every trade whose gross P&L is known, each firm's replay uses gross − that firm's round-trip rate × contracts. Gross is known when the trade is checked against prices, or when the user says its profit is before fees.
- Trades the user marks "already after fees" can't be re-priced and are replayed as-is.
- Contracts a firm doesn't list use the user's assumed rate, and the replay reports how many trades that affected.
- The user's own fee settings, including "my own fees really were zero", change only the summary figures (net P&L, best and worst day) and the "losing history" check.
| Firm | E-mini / micro, round trip | Source |
|---|---|---|
| Apex | $3.98 / $1.02 on Rithmic (default) or $3.10 / $1.04 on Tradovate, chosen by the user | Apex Help Center, Rithmic and Tradovate commission pages |
| Topstep | $3.78 / $1.22 (TopstepX, all-in) | Topstep Help: commissions in the Combine and Express Funded Account |
| Take Profit Trader | $4.50 / $1.50 on every permitted product, Test and PRO (older Rithmic accounts may still pay $5.00 / $0.50) | TPT's commission statement, confirmed by our team (Oct 16, 2026); matches the Aug 9, 2026 change reported by PropFirmMatch |
| MyFundedFutures | $4.68 / $1.90 (total cost incl. fees) | MFF Help: Futures instrument list |
| Tradeify | $5.76 / $1.82 (34 contracts listed; crude $5.66 from the newer pricing reference vs $6.00 on the April commission page) | Tradeify Help: Trading commission fees, Pricing reference |
| Lucid | $3.50 / $1.00 ($1.75 / $0.50 per side) | Lucid Support: Approved products and commissions |
All rates were checked on Oct 17, 2026. A plan whose commission schedule is disputed is shown, but it is never recommended and never ranked above plans with confirmed fees.
3. Replay
For each evaluation and size, a new account is started on every trading day in the file. Trades are replayed in exit-time order under the firm's rules:
- trailing drawdown, end-of-day or intraday
- lock level
- daily loss limit (soft pause)
- size cap
- consistency rule (raises the target rather than failing the account)
- minimum days
- time limit
With MAE/MFE, each trade's worst and best point are replayed. Winners are assumed to dip first and losers to run first.
A pass is counted at the close of the day the target is reached, after every trade that day, so a loss later the same day still counts. Drawdown lines are enforced during the day, including at a trade's worst point, even where a firm's page only says the line is calculated at the end of the day (Take Profit Trader, Lucid); that is the stricter reading.
The trading day rolls at 5 PM Central, and weekend trades count toward Monday.
4. Pass rate and likely range
- Pass rate. p = passed ÷ resolved start days. Start days from the first one that runs out of history before resolving onward are excluded, because the late starts that do resolve are mostly quick busts.
- Sample size.
- Neighbouring start days share most of their trades, so the resolved start days are not independent.
- The sample size n is the number of back-to-back attempts: start on the first day, resolve, then start again the next trading day, until history runs out.
- An attempt that takes 6 trading days to resolve covers 6 start days, so a history holds several times fewer back-to-back attempts than resolved start days.
- Likely range.
- The range is a 95% Wilson score interval at p with that n. It always contains p.
- The range describes uncertainty about the past frequency. It is not a forecast for the next attempt.
5. Expected evaluation cost
- One-time plans: price + (1/p − 1) × reset or repurchase price + activation.
- Monthly plans: subscription months over the expected trading days, + resets, + activation.
- Range: the same formula at the high and low ends of the likely range.
- Price. The firm's list price by default. Firms run coupons almost constantly (Apex was 90% off on Oct 17, 2026), so the trader can enter the price they would pay; that price replaces the first purchase, and resets keep the firm's reset price. The entered price is kept in that browser only.
- This is the cost to pass the evaluation. Funded-account rules and payouts are not modeled.
6. Recommendation outcomes
The thresholds are 20 trading days, 5 back-to-back attempts and a 25% low end.
- Not enough evidence.
- Fewer than 20 trading days, or no evaluation with 5 back-to-back attempts.
- Also when an evaluation passes often but has too few attempts to measure.
- Don't buy yet.
- Net P&L after fees ≤ 0, or no eligible evaluation has a range whose low end is at least 25%.
- Potentially suitable.
- Up to three eligible evaluations, ranked by the low end of their range, then pass rate, then cost.
- Eligible means the published size cap fits the largest open position, the commission schedule is confirmed, the rules pass verification (section 7), and the evaluation has at least 5 back-to-back attempts.
The results list uses the same order. Evaluations without a published size cap are never ranked above ones with a cap, and never recommended.
Caveats shown with any outcome: backtest or simulated data, no MAE/MFE, and fees that were assumed.
7. Rule verification policy
Every rule value in the rules data records where it came from, field by field.
| Code | Meaning |
|---|---|
| F | Stated on the firm's own page, or confirmed by our team from the firm's terms or dashboard where the firm publishes no page (each such value is listed on our review checklist and reconfirmed at every review) |
| G | From a third-party guide only |
| A | The firm doesn't publish it; modeled conservatively |
| C | Sources disagree: the firm's own pages, or the firm and a recent report |
Pass-or-fail fields are profit target, max loss amount, drawdown type, lock level, daily loss limit, contract limit, how micros count, consistency rule, minimum days and time limit. The commission schedule must also be confirmed by the firm and checked within 14 days.
- Every one of these must be F, and checked within the last 14 days, before a plan can be recommended or ranked among verified plans.
- "How micros count" is only required for traders whose file contains micros.
- A plan that would qualify except for verification gets "rules being checked", never a pick.
Cost fields are price, reset and activation.
- These may come from guides (G), and are labeled as such.
- They are rechecked every 7 days, and only affect the expected-cost figure.
Pre-publish gate. An automated rules check must pass before the site is published or an affiliate link is turned on. It fails if any plan is unverified or overdue.
Reviews. Every source behind a verified value is on our review checklist and is re-read at each review. Because a review older than 14 days switches recommendations off, the site cannot keep recommending on stale rules. Values our team confirmed from a firm's dashboard or terms count as firm sources and are reconfirmed at each review.
8. Known limitations
- Optional daily loss limits (Topstep, LucidFlex, LucidPro) are modeled as not chosen.
- Add-on versions are not modeled: MyFundedFutures Rapid EOD and Builder $1,500, Tradeify Select 50% consistency, Topstep and Apex no-activation-fee paths, Pro 50K One Day.
- Inactivity rules (Lucid deletes accounts after 30 days without trading) are not modeled.
- Drawdown inside overlapping positions is replayed one trade at a time, so the combined dip is understated.
- The order of the worst and best point inside a trade is assumed.
- Apex's Tradovate page doesn't say whether its rates apply to evaluations; they are used only when the user picks Tradovate.
- Live fills, future trading and rule changes can all differ from a replay of past trades.
9. Measurement and privacy
The file is read in the browser tab and never uploaded. With analytics off (the default until an account is set up), the page makes no network requests after it loads; the only outside request is a firm site the visitor chooses to open.
When analytics is configured, the page sends one anonymous request per event to the configured provider (Plausible or Umami), with no cookies and no identifier.
- Each event may carry only the properties its schema lists, and every value must be a fixed label (a format name, an outcome, a plan key, a firm id, a sample name) or a count bucket (0, 1-19, 20-99, 100-499, 500-1999, 2000+). There is no free-text field.
- The page address is sent without its query string or fragment, and the referrer only as its origin.
- Analytics stays off when the browser sends Global Privacy Control or Do Not Track, and when the visitor turns it off on the Privacy page.
- Events: page view, tab viewed, sample loaded, upload succeeded (format, bucketed trade and day counts), upload failed (reason), data-quality question shown, results viewed (outcome), replay opened (plan), price entered (plan only, never the price), firm link clicked (plan, firm, whether it was an affiliate link, outcome), methods opened, tracked account saved (plan), email signup.
Affiliate links. A firm link becomes an affiliate link only when all three hold: the firm has approved us as an affiliate, the published site was built after passing the rules check, and that plan's rules are still verified in the visitor's browser that day. Every affiliate link is labeled beside it and in the footer, and carries rel="sponsored". Commissions play no part in pass rates, ranking or verdicts; the engine has no access to affiliate data.