Exercise · m14_graduation.py
How many trades separate edge from noise; false-positive rate of 'edge' tests
not run yet
Not saved: sign up to keep your code"""M14 · How many trades separate edge from noise; false-positive rate of 'edge' tests.
Exercise stubs. See notes.md §14.10. Trades are measured in R-multiples (see M03).
"""
from __future__ import annotations
def t_stat(r) -> float:
"""One-sample t-statistic mean(r) / (s/sqrt(N)) with s the ddof=1 standard deviation."""
raise NotImplementedError
def trades_needed(expectancy: float, sd: float, t_crit: float = 2.0) -> int:
"""Smallest integer N with expectancy*sqrt(N)/sd >= t_crit: ceil((t_crit*sd/expectancy)^2).
Guard against float round-up (subtract 1e-12 before ceil). M03 Corollary 3.1.1."""
raise NotImplementedError
def trades_needed_power(expectancy: float, sd: float, t_crit: float = 2.0, power: float = 0.8) -> int:
"""N giving probability `power` that the t-stat clears t_crit when the true mean is `expectancy`
(normal approximation): ceil(((t_crit + z_power) * sd / expectancy)^2), z_power = Phi^-1(power).
M03 Corollary 3.1.2."""
raise NotImplementedError
def approx_power(expectancy: float, sd: float, n: int, t_crit: float = 2.0) -> float:
"""Normal approximation 1 - Phi(t_crit - expectancy*sqrt(n)/sd)."""
raise NotImplementedError
def simulate_pass_rate(n_trades: int, n_sims: int, seed: int, true_mean: float = 0.0,
t_crit: float = 2.0, kind: str = "normal") -> float:
"""Fraction of n_sims simulated traders (each with n_trades i.i.d. R-multiples) whose
t-stat >= t_crit. Use np.random.default_rng(seed) and vectorise over a (n_sims, n_trades) array.
kind='normal': R ~ N(true_mean, 1).
kind='breakout': R = +0.65/0.35 with prob 0.35, else -1, then add true_mean
(zero-mean two-point distribution typical of breakout systems).
Raise ValueError for any other kind.
"""
raise NotImplementedError
def familywise_false_positive(alpha: float, k: int) -> float:
"""P(at least one of k independent null setups passes) = 1 - (1 - alpha)^k."""
raise NotImplementedError
No runs yet
The stub's functions raise
NotImplementedError until you write them. Fill in one, press
Run tests, and watch its tests turn green.Reference solution
Available after your first run, with an account approved for code runs.