{
  "name": "The minimum-trading-days drag: what a \"trade at least N days\" rule costs a trader who could finish early",
  "description": "A seeded Monte Carlo study of how a minimum-trading-days rule changes the probability of passing a proprietary-trading evaluation. Holding every other clause fixed, the minimum is swept across 1, 5, 10 and 15 forced days inside a 20-day window. The rule is nearly free while it is a small fraction of the window and becomes a hidden drawdown-exposure tax only once it forces a fast finisher to keep trading well past the target. Synthetic archetype; every figure model-derived and reproducible.",
  "url": "https://propsurvival.com/articles/minimum-trading-days-cost",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "citation": "PropSurvival — The minimum-trading-days drag (seeded Monte Carlo study), 2026-08-10. https://propsurvival.com/articles/minimum-trading-days-cost",
  "datePublished": "2026-08-10",
  "dateModified": "2026-08-10",
  "_generated_by": "tools/build-minimum-trading-days-cost.js",
  "_reproduce": "node tools/build-minimum-trading-days-cost.js",
  "_subject_is_synthetic": true,
  "method": {
    "engine": "src/lib/state-conditional-mc.js simulateFromState — the same Monte Carlo kernel the PropSurvival app runs — driven through src/lib/case-file-sections.js safeRisk (the app Rule-Fit sweep).",
    "subject": "A synthetic evaluation archetype. NOT any named firm. No pass rate here is a claim about a real firm’s business.",
    "prng": {
      "algorithm": "xoshiro128** (PSBoot rngFor)",
      "seedBase": 20260810,
      "seedFormula": "seedBase + levelIndex * 7919 (each risk level independently seeded; the same per-level seed is reused across the four minimum-days settings, so the comparison is paired)"
    },
    "pathsPerLevel": 40000,
    "riskSweep": {
      "minPct": 0.1,
      "maxPct": 2.5,
      "stepPct": 0.1,
      "levels": 25
    },
    "minDaysSwept": [
      1,
      5,
      10,
      15
    ],
    "tradeModel": "Each day: Poisson(mean 4) trades. Each trade wins with probability 0.5 for +1.2R or loses for −1R, minus 0.05R cost. Equity compounds; one R = the risk-per-trade percentage of current balance. A target-reached account keeps trading until it has completed the minimum number of trading days before it is allowed to pass.",
    "evidenceClass": "Model-derived result with disclosed assumptions. Not an empirical fact about the real world.",
    "validation": {
      "directionalInvariants": 9,
      "reconciliationsExact": 36,
      "note": "The engine passes its directional invariants (tests/engine.invariants.test.js: a trailing floor is never easier than a static one, the regimes differ by a measurable margin, results are seed-deterministic and bounded) and reconciles exactly against hand-derived worked examples (tests/rules-reconciliation.test.js), including intraday-trailing, end-of-day-trailing, static-floor and trailing-lockout breach cases. Separately, these results themselves are monotone in the rule: a longer minimum-days requirement never raised the peak probability of passing — an observed property of this run, not a separately asserted unit test."
    }
  },
  "referenceProfile": {
    "balance": 50000,
    "winRatePct": 50,
    "avgWinR": 1.2,
    "avgLossR": 1,
    "costR": 0.05,
    "tradesPerDay": 4,
    "expectancyRPerTrade": 0.05
  },
  "archetype": {
    "profitTargetPct": 8,
    "maxDrawdownPct": 6,
    "dailyLossCap": null,
    "windowDays": 20,
    "minTradingDaysVariants": [
      1,
      5,
      10,
      15
    ],
    "drawdownFloor": "The drawdown floor trails the intraday high-water mark (it rises as the account rises, and never falls).",
    "rule": "A target-reached account cannot pass until it has completed at least the minimum number of trading days; the profit and drawdown clauses stay live for every forced extra day."
  },
  "variants": [
    {
      "minDays": 1,
      "windowDays": 20,
      "optimalRiskPct": 1.1,
      "peakPassPct": 36.1,
      "peakSePct": 0.24,
      "peakSeDisplayPct": 0.2,
      "curve": [
        {
          "riskPct": 0.1,
          "passPct": 0,
          "sePct": 0,
          "timeoutPct": 100,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.2,
          "passPct": 0,
          "sePct": 0.01,
          "timeoutPct": 99.9,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.3,
          "passPct": 1.8,
          "sePct": 0.07,
          "timeoutPct": 95.3,
          "drawdownPct": 2.9
        },
        {
          "riskPct": 0.4,
          "passPct": 8.1,
          "sePct": 0.14,
          "timeoutPct": 80,
          "drawdownPct": 11.9
        },
        {
          "riskPct": 0.5,
          "passPct": 16.6,
          "sePct": 0.19,
          "timeoutPct": 58.5,
          "drawdownPct": 24.9
        },
        {
          "riskPct": 0.6,
          "passPct": 24.8,
          "sePct": 0.22,
          "timeoutPct": 37.4,
          "drawdownPct": 37.8
        },
        {
          "riskPct": 0.7,
          "passPct": 30.1,
          "sePct": 0.23,
          "timeoutPct": 21.3,
          "drawdownPct": 48.6
        },
        {
          "riskPct": 0.8,
          "passPct": 33.9,
          "sePct": 0.24,
          "timeoutPct": 10.8,
          "drawdownPct": 55.4
        },
        {
          "riskPct": 0.9,
          "passPct": 35.9,
          "sePct": 0.24,
          "timeoutPct": 5.1,
          "drawdownPct": 59.1
        },
        {
          "riskPct": 1,
          "passPct": 34.7,
          "sePct": 0.24,
          "timeoutPct": 1.9,
          "drawdownPct": 63.4
        },
        {
          "riskPct": 1.1,
          "passPct": 36.1,
          "sePct": 0.24,
          "timeoutPct": 0.9,
          "drawdownPct": 63
        },
        {
          "riskPct": 1.2,
          "passPct": 33.4,
          "sePct": 0.24,
          "timeoutPct": 0.2,
          "drawdownPct": 66.3
        },
        {
          "riskPct": 1.3,
          "passPct": 35,
          "sePct": 0.24,
          "timeoutPct": 0.1,
          "drawdownPct": 65
        },
        {
          "riskPct": 1.4,
          "passPct": 33.9,
          "sePct": 0.24,
          "timeoutPct": 0,
          "drawdownPct": 66.1
        },
        {
          "riskPct": 1.5,
          "passPct": 30.9,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 69.1
        },
        {
          "riskPct": 1.6,
          "passPct": 31.9,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 68.1
        },
        {
          "riskPct": 1.7,
          "passPct": 34.3,
          "sePct": 0.24,
          "timeoutPct": 0,
          "drawdownPct": 65.7
        },
        {
          "riskPct": 1.8,
          "passPct": 32.9,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 67.1
        },
        {
          "riskPct": 1.9,
          "passPct": 29.1,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 70.9
        },
        {
          "riskPct": 2,
          "passPct": 26.5,
          "sePct": 0.22,
          "timeoutPct": 0,
          "drawdownPct": 73.5
        },
        {
          "riskPct": 2.1,
          "passPct": 28.3,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 71.7
        },
        {
          "riskPct": 2.2,
          "passPct": 30.9,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 69.1
        },
        {
          "riskPct": 2.3,
          "passPct": 33.7,
          "sePct": 0.24,
          "timeoutPct": 0,
          "drawdownPct": 66.3
        },
        {
          "riskPct": 2.4,
          "passPct": 33.2,
          "sePct": 0.24,
          "timeoutPct": 0,
          "drawdownPct": 66.8
        },
        {
          "riskPct": 2.5,
          "passPct": 33.2,
          "sePct": 0.24,
          "timeoutPct": 0,
          "drawdownPct": 66.8
        }
      ]
    },
    {
      "minDays": 5,
      "windowDays": 20,
      "optimalRiskPct": 0.9,
      "peakPassPct": 35.4,
      "peakSePct": 0.24,
      "peakSeDisplayPct": 0.2,
      "curve": [
        {
          "riskPct": 0.1,
          "passPct": 0,
          "sePct": 0,
          "timeoutPct": 100,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.2,
          "passPct": 0,
          "sePct": 0.01,
          "timeoutPct": 99.9,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.3,
          "passPct": 1.8,
          "sePct": 0.07,
          "timeoutPct": 95.3,
          "drawdownPct": 2.9
        },
        {
          "riskPct": 0.4,
          "passPct": 8.1,
          "sePct": 0.14,
          "timeoutPct": 80,
          "drawdownPct": 11.9
        },
        {
          "riskPct": 0.5,
          "passPct": 16.6,
          "sePct": 0.19,
          "timeoutPct": 58.5,
          "drawdownPct": 24.9
        },
        {
          "riskPct": 0.6,
          "passPct": 24.7,
          "sePct": 0.22,
          "timeoutPct": 37.5,
          "drawdownPct": 37.8
        },
        {
          "riskPct": 0.7,
          "passPct": 30,
          "sePct": 0.23,
          "timeoutPct": 21.3,
          "drawdownPct": 48.7
        },
        {
          "riskPct": 0.8,
          "passPct": 33.6,
          "sePct": 0.24,
          "timeoutPct": 10.7,
          "drawdownPct": 55.6
        },
        {
          "riskPct": 0.9,
          "passPct": 35.4,
          "sePct": 0.24,
          "timeoutPct": 5.1,
          "drawdownPct": 59.5
        },
        {
          "riskPct": 1,
          "passPct": 33.7,
          "sePct": 0.24,
          "timeoutPct": 1.9,
          "drawdownPct": 64.4
        },
        {
          "riskPct": 1.1,
          "passPct": 34.1,
          "sePct": 0.24,
          "timeoutPct": 0.8,
          "drawdownPct": 65
        },
        {
          "riskPct": 1.2,
          "passPct": 31.1,
          "sePct": 0.23,
          "timeoutPct": 0.2,
          "drawdownPct": 68.6
        },
        {
          "riskPct": 1.3,
          "passPct": 31.2,
          "sePct": 0.23,
          "timeoutPct": 0.1,
          "drawdownPct": 68.7
        },
        {
          "riskPct": 1.4,
          "passPct": 28.5,
          "sePct": 0.23,
          "timeoutPct": 0,
          "drawdownPct": 71.4
        },
        {
          "riskPct": 1.5,
          "passPct": 25.3,
          "sePct": 0.22,
          "timeoutPct": 0,
          "drawdownPct": 74.7
        },
        {
          "riskPct": 1.6,
          "passPct": 25.3,
          "sePct": 0.22,
          "timeoutPct": 0,
          "drawdownPct": 74.7
        },
        {
          "riskPct": 1.7,
          "passPct": 23.9,
          "sePct": 0.21,
          "timeoutPct": 0,
          "drawdownPct": 76.1
        },
        {
          "riskPct": 1.8,
          "passPct": 20.3,
          "sePct": 0.2,
          "timeoutPct": 0,
          "drawdownPct": 79.7
        },
        {
          "riskPct": 1.9,
          "passPct": 16.6,
          "sePct": 0.19,
          "timeoutPct": 0,
          "drawdownPct": 83.4
        },
        {
          "riskPct": 2,
          "passPct": 14.2,
          "sePct": 0.17,
          "timeoutPct": 0,
          "drawdownPct": 85.8
        },
        {
          "riskPct": 2.1,
          "passPct": 14.4,
          "sePct": 0.18,
          "timeoutPct": 0,
          "drawdownPct": 85.6
        },
        {
          "riskPct": 2.2,
          "passPct": 14.1,
          "sePct": 0.17,
          "timeoutPct": 0,
          "drawdownPct": 85.9
        },
        {
          "riskPct": 2.3,
          "passPct": 13.5,
          "sePct": 0.17,
          "timeoutPct": 0,
          "drawdownPct": 86.5
        },
        {
          "riskPct": 2.4,
          "passPct": 12.2,
          "sePct": 0.16,
          "timeoutPct": 0,
          "drawdownPct": 87.8
        },
        {
          "riskPct": 2.5,
          "passPct": 9.7,
          "sePct": 0.15,
          "timeoutPct": 0,
          "drawdownPct": 90.3
        }
      ]
    },
    {
      "minDays": 10,
      "windowDays": 20,
      "optimalRiskPct": 0.8,
      "peakPassPct": 31,
      "peakSePct": 0.23,
      "peakSeDisplayPct": 0.2,
      "curve": [
        {
          "riskPct": 0.1,
          "passPct": 0,
          "sePct": 0,
          "timeoutPct": 100,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.2,
          "passPct": 0,
          "sePct": 0.01,
          "timeoutPct": 99.9,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.3,
          "passPct": 1.8,
          "sePct": 0.07,
          "timeoutPct": 95.4,
          "drawdownPct": 2.9
        },
        {
          "riskPct": 0.4,
          "passPct": 8,
          "sePct": 0.14,
          "timeoutPct": 80.1,
          "drawdownPct": 12
        },
        {
          "riskPct": 0.5,
          "passPct": 16.4,
          "sePct": 0.19,
          "timeoutPct": 58.6,
          "drawdownPct": 25
        },
        {
          "riskPct": 0.6,
          "passPct": 24,
          "sePct": 0.21,
          "timeoutPct": 37.7,
          "drawdownPct": 38.3
        },
        {
          "riskPct": 0.7,
          "passPct": 28.4,
          "sePct": 0.23,
          "timeoutPct": 21.4,
          "drawdownPct": 50.2
        },
        {
          "riskPct": 0.8,
          "passPct": 31,
          "sePct": 0.23,
          "timeoutPct": 10.6,
          "drawdownPct": 58.4
        },
        {
          "riskPct": 0.9,
          "passPct": 30.8,
          "sePct": 0.23,
          "timeoutPct": 5.1,
          "drawdownPct": 64.2
        },
        {
          "riskPct": 1,
          "passPct": 27.6,
          "sePct": 0.22,
          "timeoutPct": 1.9,
          "drawdownPct": 70.5
        },
        {
          "riskPct": 1.1,
          "passPct": 25.5,
          "sePct": 0.22,
          "timeoutPct": 0.8,
          "drawdownPct": 73.7
        },
        {
          "riskPct": 1.2,
          "passPct": 21,
          "sePct": 0.2,
          "timeoutPct": 0.2,
          "drawdownPct": 78.8
        },
        {
          "riskPct": 1.3,
          "passPct": 18.1,
          "sePct": 0.19,
          "timeoutPct": 0.1,
          "drawdownPct": 81.8
        },
        {
          "riskPct": 1.4,
          "passPct": 14.1,
          "sePct": 0.17,
          "timeoutPct": 0,
          "drawdownPct": 85.9
        },
        {
          "riskPct": 1.5,
          "passPct": 10.4,
          "sePct": 0.15,
          "timeoutPct": 0,
          "drawdownPct": 89.6
        },
        {
          "riskPct": 1.6,
          "passPct": 8.9,
          "sePct": 0.14,
          "timeoutPct": 0,
          "drawdownPct": 91.1
        },
        {
          "riskPct": 1.7,
          "passPct": 7.1,
          "sePct": 0.13,
          "timeoutPct": 0,
          "drawdownPct": 92.9
        },
        {
          "riskPct": 1.8,
          "passPct": 4.8,
          "sePct": 0.11,
          "timeoutPct": 0,
          "drawdownPct": 95.2
        },
        {
          "riskPct": 1.9,
          "passPct": 3.2,
          "sePct": 0.09,
          "timeoutPct": 0,
          "drawdownPct": 96.8
        },
        {
          "riskPct": 2,
          "passPct": 2.3,
          "sePct": 0.07,
          "timeoutPct": 0,
          "drawdownPct": 97.7
        },
        {
          "riskPct": 2.1,
          "passPct": 1.9,
          "sePct": 0.07,
          "timeoutPct": 0,
          "drawdownPct": 98.1
        },
        {
          "riskPct": 2.2,
          "passPct": 1.7,
          "sePct": 0.06,
          "timeoutPct": 0,
          "drawdownPct": 98.3
        },
        {
          "riskPct": 2.3,
          "passPct": 1.2,
          "sePct": 0.05,
          "timeoutPct": 0,
          "drawdownPct": 98.8
        },
        {
          "riskPct": 2.4,
          "passPct": 0.8,
          "sePct": 0.04,
          "timeoutPct": 0,
          "drawdownPct": 99.3
        },
        {
          "riskPct": 2.5,
          "passPct": 0.5,
          "sePct": 0.04,
          "timeoutPct": 0,
          "drawdownPct": 99.5
        }
      ]
    },
    {
      "minDays": 15,
      "windowDays": 20,
      "optimalRiskPct": 0.8,
      "peakPassPct": 25.3,
      "peakSePct": 0.22,
      "peakSeDisplayPct": 0.2,
      "curve": [
        {
          "riskPct": 0.1,
          "passPct": 0,
          "sePct": 0,
          "timeoutPct": 100,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.2,
          "passPct": 0,
          "sePct": 0.01,
          "timeoutPct": 99.9,
          "drawdownPct": 0
        },
        {
          "riskPct": 0.3,
          "passPct": 1.7,
          "sePct": 0.06,
          "timeoutPct": 95.3,
          "drawdownPct": 2.9
        },
        {
          "riskPct": 0.4,
          "passPct": 7.6,
          "sePct": 0.13,
          "timeoutPct": 80.5,
          "drawdownPct": 11.9
        },
        {
          "riskPct": 0.5,
          "passPct": 15.3,
          "sePct": 0.18,
          "timeoutPct": 59.4,
          "drawdownPct": 25.3
        },
        {
          "riskPct": 0.6,
          "passPct": 21.8,
          "sePct": 0.21,
          "timeoutPct": 38.5,
          "drawdownPct": 39.6
        },
        {
          "riskPct": 0.7,
          "passPct": 25.1,
          "sePct": 0.22,
          "timeoutPct": 21.8,
          "drawdownPct": 53.1
        },
        {
          "riskPct": 0.8,
          "passPct": 25.3,
          "sePct": 0.22,
          "timeoutPct": 11.2,
          "drawdownPct": 63.6
        },
        {
          "riskPct": 0.9,
          "passPct": 23.3,
          "sePct": 0.21,
          "timeoutPct": 5.1,
          "drawdownPct": 71.6
        },
        {
          "riskPct": 1,
          "passPct": 18.9,
          "sePct": 0.2,
          "timeoutPct": 1.9,
          "drawdownPct": 79.2
        },
        {
          "riskPct": 1.1,
          "passPct": 14.8,
          "sePct": 0.18,
          "timeoutPct": 0.8,
          "drawdownPct": 84.4
        },
        {
          "riskPct": 1.2,
          "passPct": 10.7,
          "sePct": 0.15,
          "timeoutPct": 0.2,
          "drawdownPct": 89.1
        },
        {
          "riskPct": 1.3,
          "passPct": 7.8,
          "sePct": 0.13,
          "timeoutPct": 0.1,
          "drawdownPct": 92.1
        },
        {
          "riskPct": 1.4,
          "passPct": 5,
          "sePct": 0.11,
          "timeoutPct": 0,
          "drawdownPct": 94.9
        },
        {
          "riskPct": 1.5,
          "passPct": 3.1,
          "sePct": 0.09,
          "timeoutPct": 0,
          "drawdownPct": 96.9
        },
        {
          "riskPct": 1.6,
          "passPct": 2,
          "sePct": 0.07,
          "timeoutPct": 0,
          "drawdownPct": 98
        },
        {
          "riskPct": 1.7,
          "passPct": 1.4,
          "sePct": 0.06,
          "timeoutPct": 0,
          "drawdownPct": 98.6
        },
        {
          "riskPct": 1.8,
          "passPct": 0.7,
          "sePct": 0.04,
          "timeoutPct": 0,
          "drawdownPct": 99.3
        },
        {
          "riskPct": 1.9,
          "passPct": 0.4,
          "sePct": 0.03,
          "timeoutPct": 0,
          "drawdownPct": 99.6
        },
        {
          "riskPct": 2,
          "passPct": 0.2,
          "sePct": 0.02,
          "timeoutPct": 0,
          "drawdownPct": 99.8
        },
        {
          "riskPct": 2.1,
          "passPct": 0.1,
          "sePct": 0.02,
          "timeoutPct": 0,
          "drawdownPct": 99.9
        },
        {
          "riskPct": 2.2,
          "passPct": 0.1,
          "sePct": 0.01,
          "timeoutPct": 0,
          "drawdownPct": 99.9
        },
        {
          "riskPct": 2.3,
          "passPct": 0,
          "sePct": 0.01,
          "timeoutPct": 0,
          "drawdownPct": 100
        },
        {
          "riskPct": 2.4,
          "passPct": 0,
          "sePct": 0.01,
          "timeoutPct": 0,
          "drawdownPct": 100
        },
        {
          "riskPct": 2.5,
          "passPct": 0,
          "sePct": 0,
          "timeoutPct": 0,
          "drawdownPct": 100
        }
      ]
    }
  ],
  "comparison": {
    "baselineMinDays": 1,
    "windowDays": 20,
    "baselinePeakPassPct": 36.1,
    "baselineOptimalRiskPct": 1.1,
    "peakAt1": 36.1,
    "peakAt5": 35.4,
    "peakAt10": 31,
    "peakAt15": 25.3,
    "optimalRiskAt1": 1.1,
    "optimalRiskAt5": 0.9,
    "optimalRiskAt10": 0.8,
    "optimalRiskAt15": 0.8,
    "dragPointsAt5": 0.7,
    "dragPointsAt10": 5.1,
    "dragPointsAt15": 10.8,
    "maxDragPoints": 10.8,
    "fractionPctAt5": 25,
    "fractionPctAt10": 50,
    "fractionPctAt15": 75
  },
  "axisTicks": {
    "riskPct": [
      0.5,
      1,
      1.5,
      2,
      2.5
    ],
    "passPct": [
      0,
      10,
      20,
      30,
      40
    ],
    "minDays": [
      1,
      5,
      10,
      15
    ]
  },
  "display": {
    "balance": "50,000",
    "avgWinR": "1.2",
    "avgLossR": "1.0",
    "costR": "0.05",
    "pathsPerLevel": "40,000",
    "baselinePeakPassPct": "36.1",
    "peakAt5": "35.4",
    "peakAt10": "31.0",
    "peakAt15": "25.3",
    "dragPointsAt5": "0.7",
    "dragPointsAt10": "5.1",
    "dragPointsAt15": "10.8",
    "baselineOptimalRiskPct": "1.1",
    "optimalRiskAt15": "0.8"
  },
  "disclaimer": "Model-derived and illustrative. The archetype is synthetic and does not represent any specific proprietary-trading firm. A real evaluation may combine a minimum-days rule with a daily loss limit or a consistency rule, which change the picture. Your own edge, cost and trade frequency change every number; this study shows the SHAPE of the relationship — small until the minimum is a large fraction of the window — not a target to copy."
}
