Honest Monte Carlo for prop-firm trading challenges. Given a per-trade edge, what's the probability of passing — and is attempting it +EV after the fee?
TL;DR — A funded-account challenge is a variance play: hit a profit target before a drawdown limit stops you out. With no demonstrable edge it is −EV by construction. This tool lets you see that with your own numbers instead of a marketing page's.
🔗 Live calculator → makeph.github.io/prop-ev (no install, runs in your browser)
This came out of an edge investigation on a live crypto bot. The finding: retail directional alpha at short horizons was ~0. Once that's true, "can I pass a prop challenge?" stops being a trading question and becomes a pure question of target/drawdown geometry vs. variance. The marketing says "trade our capital, keep 80–90%." The geometry often says "you will pay the fee and breach the trailing drawdown." Both can be true. This tool measures which.
It refuses to show you a single hopeful in-sample number. It sweeps the edge from negative to positive so you can locate where the challenge flips +EV — and then ask yourself, honestly, whether you've actually proven you trade there.
git clone https://github.com/Makeph/prop-ev
cd prop-ev
# nothing to install — pure standard library# Sweep P(pass) and EV across an edge grid, for all built-in archetypes:
python -m propev table
# A single configuration:
python -m propev one --preset trailing-50k --edge 0.5
# Your exact challenge, from its real T&Cs:
python -m propev one --account 50000 --target 0.08 --total-dd 0.10 \
--daily-dd 0.04 --phases 2 --consistency 0.15 --trailing --fee 300 --edge 0Example output:
P(pass) by per-trade edge (bps of account):
PRESET tgt/DD e=-2.0 e=-1.0 e=+0.0 e=+0.5 e=+1.0 e=+2.0
--------------------------------------------------------------------------
classic-100k 10/10 0.0% 0.0% 0.0% 0.0% 0.8% 59.8%
trailing-50k 8/10 0.0% 0.0% 0.0% 0.1% 2.6% 61.0%
lowtarget-500k 4/5 0.0% 0.0% 0.0% 0.0% 0.0% 0.0%
onestep-100k 10/6 0.0% 0.0% 0.0% 1.1% 9.8% 77.7%
Read it like this: at zero edge every archetype passes ~0% of the time, so
every cell in the EV table at e<=0 is just −fee. The low-target $500k looks
generous (4% target!) but its 0.8% daily / 5% total drawdown is so tight it
fails even at a fat +2 bps edge. That's the trap the geometry hides.
from propev import Firm, simulate, expected_value
challenge = Firm(
name="my-firm", account=50_000, target=0.08,
daily_dd=0.04, total_dd=0.10, phases=2,
consistency=0.15, trailing=True, fee=300, profit_split=0.80,
)
p = simulate(challenge, edge_bps=0.0, std_bps=12, n_sims=20_000)
print(f"P(pass) = {p:.1%} EV = ${expected_value(p, challenge):,.0f}")Deliberately simple and transparent — a go/no-go sanity tool, not a predictor. Every assumption is one explicit knob:
- A challenge is a sequence of trading days; each day is
trades_per_daytrades. - Each trade's P&L in account currency is
account × Normal(edge_bps, std_bps) / 1e4. - Daily DD: max loss within a day from that day's open. Breach ⇒ fail.
- Total DD: from the running equity peak (trailing, Topstep/Apex-style) or from the static starting balance. Breach ⇒ fail.
- Pass a phase: target reached,
min_daysmet, and no single day exceedsconsistencyof total profit. - Funded value ≈
target × account × profit_split— one cycle of withdrawable profit. Conservative on purpose: most funded accounts are lost before they compound.
What it does not model: news gaps, slippage tails, scaling plans, payout delays, or the firm changing the rules on you. All of those make reality worse than this sim, not better.
python -m pytest -qProperties checked: output is a probability; more edge ⇒ higher pass rate; tighter drawdown / more phases ⇒ lower pass rate; a zero-edge fee-charging challenge is always −EV; same seed ⇒ same result.
The built-in presets are approximate archetypes, not any specific firm's live terms. Prop firms change rules constantly and vary by plan. Plug in your exact numbers before drawing any conclusion about real money. This is a research/education tool — not financial advice, and not an endorsement of trading a challenge.
MIT — see LICENSE.