{
  "name": "Corpus-bound MC calculation receipt — Topstep $50k reference",
  "description": "Versioned, hash-addressed Monte Carlo calculation receipt binding a firm rules corpus id to trader inputs and honest sample outputs (sample mean + SE + concordance with analytical E_net + mixture variance). Public face is free and citable; first sale opens the percentile worksheet and portfolio-replay kit under the same hash so a visitor can re-mint with their own portfolio.",
  "url": "https://propsurvival.com/articles/calc-receipt-mc-data.json",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "citation": "PropSurvival calc-receipt MC b2b24d3c · calc-receipt-mc-1 · topstep@40ecf3b35a8ccb90",
  "datePublished": "2026-08-16",
  "dateModified": "2026-08-16",
  "_generated_by": "tools/build-calc-receipt-mc.js",
  "_reproduce": "node tools/build-calc-receipt-mc.js",
  "_subject_is_synthetic": true,
  "method": {
    "engine": "src/lib/calc-receipt-mc.js — seeded mulberry32 sample mean of net R bound to firm corpus id; absolute BE/win/loss partition; mixture variance published on free face",
    "formulaId": "corpus-iid-trade-sample-mean-1",
    "version": "calc-receipt-mc-1",
    "prng": "mulberry32",
    "paths": 10000,
    "seed": 704639342,
    "formula": "sampleMean = (1/N) Σ netR_i ; netR ∈ {W-c, -(L+c), -c}; SE = √(var/N)",
    "evidenceClass": "Model-derived Monte Carlo estimate bound to a disclosed rules corpus id. Not an empirical claim about any named market outcome or pass rate.",
    "assumptions": [
      "Firm rule percentages are taken from the stated corpus id (rulesHash when present); this receipt samples trade net-R, not a full equity-curve path against firm breach rules.",
      "Trade outcomes are i.i.d. at the stated win and break-even rates (no streak or Markov clustering).",
      "Average win R and average loss R are fixed constants; per-trade cost is a constant R deduction on every trade.",
      "The sample uses an absolute BE/win/loss partition of [0,1) — never win conditional on non-break-even.",
      "Reproducibility is corpus id + rules + trader + seed + paths + VERSION: the same tuple regenerates this public face.",
      "This is a seeded Monte Carlo estimate of per-trade net expectancy, not an empirical claim about any named market or pass rate."
    ],
    "rulesHashAlgorithm": "sha256(canonical firm rules JSON paths)[:16] — same family as tools/corpus-sync.js"
  },
  "reference": {
    "corpusId": {
      "firmId": "topstep",
      "firmName": "Topstep",
      "accountSize": 50000,
      "source": "rules/topstep",
      "rulesHash": "40ecf3b35a8ccb90"
    },
    "rules": {
      "targetPct": 6,
      "dailyDdPct": 2,
      "totalDdPct": 4,
      "ddMode": "trail_eod",
      "freezeAtInitial": true,
      "consistencyPct": 50,
      "minDays": 2,
      "maxDays": 60,
      "onDailyBasis": "initial"
    },
    "trader": {
      "winRatePct": 50,
      "breakEvenRatePct": 0,
      "avgWinR": 1.2,
      "avgLossR": 1,
      "tradeCostR": 0.05
    },
    "sim": {
      "paths": 10000,
      "seed": 704639342
    }
  },
  "proof": {
    "kind": "calc-receipt-mc",
    "version": "calc-receipt-mc-1",
    "hash": "b2b24d3c",
    "engine": {
      "formulaId": "corpus-iid-trade-sample-mean-1",
      "matches": "mc-net-return-proof sample design + calc-receipt corpus binding",
      "prng": "mulberry32",
      "formula": "sampleMean = (1/N) Σ netR_i ; netR ∈ {W-c, -(L+c), -c}; SE = √(var/N)"
    },
    "assumptions": [
      "Firm rule percentages are taken from the stated corpus id (rulesHash when present); this receipt samples trade net-R, not a full equity-curve path against firm breach rules.",
      "Trade outcomes are i.i.d. at the stated win and break-even rates (no streak or Markov clustering).",
      "Average win R and average loss R are fixed constants; per-trade cost is a constant R deduction on every trade.",
      "The sample uses an absolute BE/win/loss partition of [0,1) — never win conditional on non-break-even.",
      "Reproducibility is corpus id + rules + trader + seed + paths + VERSION: the same tuple regenerates this public face.",
      "This is a seeded Monte Carlo estimate of per-trade net expectancy, not an empirical claim about any named market or pass rate."
    ],
    "corpusId": {
      "firmId": "topstep",
      "firmName": "Topstep",
      "rulesHash": "40ecf3b35a8ccb90",
      "accountSize": 50000,
      "source": "rules/topstep"
    },
    "rules": {
      "targetPct": 6,
      "dailyDdPct": 2,
      "totalDdPct": 4,
      "ddMode": "trail_eod",
      "freezeAtInitial": true,
      "consistencyPct": 50,
      "minDays": 2,
      "maxDays": 60,
      "onDailyBasis": "initial"
    },
    "trader": {
      "winRatePct": 50,
      "breakEvenRatePct": 0,
      "avgWinR": 1.2,
      "avgLossR": 1,
      "tradeCostR": 0.05
    },
    "sim": {
      "paths": 10000,
      "seed": 704639342
    },
    "inputs": {
      "corpusId": {
        "firmId": "topstep",
        "firmName": "Topstep",
        "rulesHash": "40ecf3b35a8ccb90",
        "accountSize": 50000,
        "source": "rules/topstep"
      },
      "rules": {
        "targetPct": 6,
        "dailyDdPct": 2,
        "totalDdPct": 4,
        "ddMode": "trail_eod",
        "freezeAtInitial": true,
        "consistencyPct": 50,
        "minDays": 2,
        "maxDays": 60,
        "onDailyBasis": "initial"
      },
      "trader": {
        "winRatePct": 50,
        "breakEvenRatePct": 0,
        "avgWinR": 1.2,
        "avgLossR": 1,
        "tradeCostR": 0.05
      },
      "paths": 10000,
      "seed": 704639342
    },
    "public": {
      "sampleMeanNetR": 0.03834,
      "sampleSE": 0.010999,
      "analyticalNetExpectancyR": 0.05,
      "concordanceAbsErr": 0.01166,
      "mixtureVariance": 1.21,
      "paths": 10000,
      "seed": 704639342,
      "formula": "sampleMean = (1/N) Σ netR_i ; netR ∈ {W-c, -(L+c), -c}; SE = √(var/N)"
    },
    "full": null,
    "unlock": {
      "requires": "sale",
      "opens": "full",
      "open": false,
      "note": "Public face only. First sale opens percentiles, sample moments and portfolio-replay kit under the same hash; re-mint with your trader inputs under the same corpus id."
    },
    "citation": "PropSurvival calc-receipt MC b2b24d3c · calc-receipt-mc-1 · topstep@40ecf3b35a8ccb90",
    "evidenceClass": "Model-derived Monte Carlo estimate bound to a disclosed rules corpus id. Not an empirical claim about any named market outcome or pass rate."
  },
  "unlock": {
    "requires": "sale",
    "opens": "full worksheet + portfolioReplay under the same hash",
    "recompute": "node -e \"const M=require('./src/lib/calc-receipt-mc.js');const r=require('./articles/calc-receipt-mc-data.json');console.log(JSON.stringify(M.mint({corpusId:r.reference.corpusId,rules:r.reference.rules,trader:r.reference.trader,paths:r.reference.sim.paths,seed:r.reference.sim.seed},{unlocked:true}),null,2))\""
  },
  "related": {
    "analyticalReceipt": "articles/calc-receipt-data.json",
    "note": "Analytical calc-receipt (quant) and this MC face share the same Topstep $50k corpus + study-kit trader; MC re-estimates E_net by sampling and publishes variance."
  }
}
