科研論文
源自本部落格的完全可復現論文:每個數字都可由開原始碼和公開的隨機種子重新生成。每篇論文都有互動式網頁版和可下載的 PDF。
-
Plateaus, Peaks, and the Probability of Backtest Overfitting
Do plateau-shaped optima mean robust trading strategies? A controlled validation of parameter-robustness heuristics against PBO and the Deflated Sharpe Ratio (9,000 simulated optimization problems).
-
How Many Correlated Signals Actually Diversify?
A controlled validation of effective-breadth approximations for trading-signal portfolios: the equicorrelation N_eff vs realized variance reduction and a correlated-Bernoulli capacity model (4,000 portfolios).
-
Does Walk-Forward Validation Predict Out-of-Sample Performance?
The walk-forward efficiency ratio, its folk thresholds, anchored vs rolling windows, and window design — tested against known time-varying ground truth (8,000 validation problems).
-
When Does Hierarchical Risk Parity Beat Markowitz?
A controlled comparison under known covariance: HRP vs sample and Ledoit–Wolf min-variance, 1/N and inverse variance, across structure families and T/N ratios (4,800 experiments).
-
Conformal Prediction for Financial Returns: Where Coverage Survives and Where It Breaks
Marginal, volatility-conditional and post-break coverage of split conformal, normalized scores, CQR and Adaptive Conformal Inference against exact oracles (180 experiments × 14 methods).
-
Do Bootstrap Confidence Intervals for Backtest Statistics Cover?
iid vs trade-level vs block bootstrap for Sharpe and maximum drawdown under serial dependence, with exactly known truth (6,000 coverage experiments).
-
How Much Does Purging Actually Fix?
A controlled quantification of overlap leakage in time-series cross-validation: phantom skill as an overlap × persistence interaction, and what purging, embargo and walk-forward each buy.
-
Objective-Function Design: The Metric You Optimize Secretly Picks Your Strategy
The scalar you call 'best' silently selects the winning strategy. On synthetic data with a known edge (600 seeds, T=2000, 80 thresholds), a naive per-trade Sharpe crowns a lottery — an in-sample Sharpe of 21.09 collapsing to 0.13 out of sample — while measuring on the full timeline never degenerates (1.71). Goodhart's law in a backtest, with controlled ground truth.
-
How Overfit Is Your Search? The Probability of Backtest Overfitting
PBO via CSCV as an overfitting thermometer: its 0.5 null for a no-edge search, calibration against a planted edge, and the random-walk trap where an in-sample winner is certified worthless (null 0.476, planted-edge 0.001, overfit MA-grid 0.463).
-
How Many Backtest 'Winners' Survive Deflation?
How multiplicity deflation — the Deflated Sharpe Ratio and the False Strategy Theorem — culls apparent winners from a parameter search once the number of trials is priced in, versus the naive per-strategy significance test.
-
Do You Need a GPU to Speed Up a Backtest Parameter Sweep?
The pandas → numpy → numba → multiprocessing → GPU speed ladder for a parameter sweep with a result-equivalence cross-check, and where an accelerator actually earns its place (M0 1.1 → M4 340.9 combos/s on CPU alone).
-
The IPC Tax: Put the Backtest Engine Behind a Socket and Lose 13% — Almost None of It to the Socket
A numba backtest kernel ported line-for-line to Rust and called across a process boundary four ways, with an equivalence gate confirming identical PnL to the last trade. Shipping the whole 1.2 MB price series through a Unix socket costs ~2 ms (~0.1% of the job), but JSON-encoding the same payload costs 1348x more than raw bytes and chatty per-combo calls re-ship the data 80 times. The boundary is cheap; the tax is in how you cross it.
-
How Much Sharpe Does a Look-Ahead Leak Manufacture?
How much apparent Sharpe a single look-ahead leak manufactures out of pure noise (+14.8 from a random walk), the ≈1/√L dose-response with bar count, and the false-deploy rate it drives (68.4%).
-
The GPU Precision Trap: fp32 Catastrophic Cancellation in a Vectorized Backtest
Apple Metal has no float64, so a vectorized backtest runs in fp32. The O(n) prefix-sum weighted moving average builds a ~3.26e14 intermediate — seven orders past fp32's 2^24 exact-integer ceiling — and recovering a window subtracts two such numbers whose rounding error dwarfs the answer: max relative error ~399 (WMA) / ~3416 (HMA) vs fp64, yet finite and plausible. A direct windowed convolution keeps every partial sum near price scale (~7e-7 error). Verified by a discrete invariant — HMA-cross trade-count parity: 0.059% shifted trades for the fix vs 97% for the trap. fp32 modeled with numpy float32 on CPU; seeded and deterministic.
-
The Framework Tax: When Your Backtest Library Is Slower Than a Naive Python Loop
At exact trade-count parity (40,779 identical trades across four engines), a minimal event-driven framework runs ~22.6x slower than vectorized numpy and ~1.72x slower than even a naive Python loop — the equivalence gate makes the whole gap pure per-bar overhead, not a difference in work. CPU-relative; no third-party frameworks are timed.
-
Two-Axis Parameter Space: Cache the Expensive Axis, Sweep the Cheap One Free
Strategy parameters split into an expensive indicator axis (recomputed over the whole series) and a cheap threshold axis (a pass over cached signals). Computing each indicator config once and sweeping all thresholds on the cache cuts indicator builds by the threshold factor T (768 → 12) at bit-exact result parity; measured speedup 6.48x brackets the analytic 4.64x, capped by this workload’s build/threshold cost ratio.
-
The Fidelity Gate: Keeping Drill-Down Search From Collapsing Silently
Multi-fidelity search (successive halving, ASHA, Hyperband) collapses silently when the cheap low-fidelity proxy does not rank configs like the full evaluation. A fidelity gate — require Spearman rank correlation ρ ≥ 0.5 before pruning — recovers regret 0.203 → 0.022 (−89%) at a moderate proxy and disables pruning entirely at a degraded proxy (rung-1 top-1 hit rate = 1/400, a coin flip). Synthetic, known ground truth.
-
The Parameter-Sweep Roofline: A Closed-Form Batch-Size Amortization Law
A closed-form law S(B) = B(O+b)/(O+bB) for how a parameter sweep’s speedup rises and saturates at 1+O/b as fixed per-call overhead is amortized across a growing batch, with a machine-invariant CPU analog (work measured as an operation count) that obeys it with zero fit residual: ridge batch O/b ≈ 24, compute-bound crossover B ≈ 216. No GPU is measured; device speedups are prior engineering work.
-
The Best Search Method Depends on Evaluation Cost
When each backtest is cheap, dumb high-throughput samplers (random, scrambled Sobol) win because smart sequential samplers pay an ask/tell tax (~60x throughput throttle) and afford far fewer points; when each eval is expensive, sample-efficiency wins. The per-method regret regimes invert monotonically around a crossover evaluation cost of ~0.12 s. Modeled, machine-independent timing.
-
An Honest Negative: A Tempting Out-of-Sample Winner With No Robust Edge
On a driftless, no-edge random walk, a dual-timeframe search finds a config with tempting out-of-sample (+49.00%) and positive holdout (+2.66%) return; the naive per-strategy test says significant (p = 0.044), but the Deflated Sharpe Ratio fails (0.84 effective / 0.35 raw < 0.95) and the winner sits inside the best-of-N pure-noise null — so the correct verdict is no robust edge. The capstone negative result of the series.
-
Does GARCH(1,1) Actually Forecast Volatility?
A controlled study with known conditional-variance ground truth: MLE consistency (persistence RMSE 0.028 → 0.004), one-step forecasts beating EWMA and rolling baselines on QLIKE (≈85% margin at crypto-like persistence), near-IGARCH fragility, and proxy-robust evaluation when true volatility is unobservable.
-
Asymmetry, Fat Tails, and the Cost of the Wrong GARCH Innovation
On a GJR-GARCH-t ground truth, Gaussian GARCH under-covers the tail — 99% VaR breached at 1.58% vs 1% nominal, Kupiec rejecting on 80–96% of paths — while Student-t and GJR-t stay calibrated. Quantifies the tail-shape vs asymmetry cost, and when the extra structure does not pay.
-
Recovering Time-Varying Correlation with DCC-GARCH
Against a known correlation path (calm → crisis → recovery), DCC tracks the crisis window about 7× tighter than static correlation (MAE 0.028 vs 0.208) and recovers the true DCC parameters, while static and rolling covariance under-state portfolio VaR exactly during the spike (2.2× nominal breaches). Includes a from-scratch DCC estimator.
-
Volatility Targeting with GARCH Forecasts: A Controlled Evaluation
Volatility targeting pins realized vol to the target and cuts drawdowns (0.84 → 0.56), but the forecast-accuracy edge among GARCH, EWMA and HAR is small and often insignificant (Diebold–Mariano p ≈ 0.57) and the downstream Sharpe is forecaster-agnostic — the win is risk management, not alpha.