code wiki / (root) / nx_fin_advstats_gate.nx

nx_fin_advstats_gate.nx source

↩ module page · 42 lines · 2336 B

1// nx_fin_advstats_gate.nx -- GATE for the deflated-Sharpe / multiple-testing suite, hand-computed. The headline: 2// a Sharpe that looks significant alone (t=5) can FAIL once deflated for having tried 4 strategies -- exactly 3// our tournament's trap. Exits 0 iff all pass. license_tier: ORIGINAL 4import "nx_gate.nx" 5import "nx_fin_metrics.nx" 6import "nx_fin_advstats.nx" 7 8func chk(name: *u8, got: i64, want: i64, st: *i64) -> i64 { 9 if got == want { st[0] = st[0] + 1; gw(" PASS " as *u8); gw(name); gw("\n" as *u8) } 10 else { st[1] = st[1] + 1; gw(" FAIL " as *u8); gw(name); gw(" got=" as *u8); gn(got); gw(" want=" as *u8); gn(want); gw("\n" as *u8) } 11 return 0 12} 13 14func main() -> i64 { 15 let st: *i64 = sys_mmap(16) as *i64 16 st[0] = 0; st[1] = 0 17 18 // Sharpe t-stat = SR*sqrt(N-1): SR 0.5 over 101 obs -> t 5.0 (5000 milli) 19 chk("t-stat SR0.5 N101 = 5000" as *u8, as_sharpe_tstat_milli(500, 101), 5000, st) 20 chk("t-stat SR0.2 N101 = 2000" as *u8, as_sharpe_tstat_milli(200, 101), 2000, st) 21 chk("t-stat N<=1 = 0" as *u8, as_sharpe_tstat_milli(500, 1), 0, st) 22 23 // multiple-testing expected-max table sqrt(2 ln T) x1000 24 chk("maxZ T=1 = 0" as *u8, as_max_z_milli(1), 0, st) 25 chk("maxZ T=4 = 1665" as *u8, as_max_z_milli(4), 1665, st) 26 chk("maxZ T=8 = 2036" as *u8, as_max_z_milli(8), 2036, st) 27 chk("maxZ T=16 = 2354" as *u8, as_max_z_milli(16), 2354, st) 28 chk("maxZ T=100 = 3035" as *u8, as_max_z_milli(100), 3035, st) 29 30 // deflated SR: best 0.5, trial-std 0.2, 4 trials -> haircut 0.2*1.665=0.333 -> 0.167 31 chk("deflated SR = 167 milli" as *u8, as_deflated_sr_milli(500, 200, 4), 167, st) 32 33 // significance AFTER deflation (the honest tournament gate) 34 chk("strong edge survives deflation (t>2)" as *u8, as_deflated_significant(800, 100, 4, 101, 2000), 1, st) 35 chk("mediocre 0.5 SR FAILS after 4-trial deflation" as *u8, as_deflated_significant(500, 200, 4, 101, 2000), 0, st) 36 chk("weak edge deflates below zero -> fail" as *u8, as_deflated_significant(300, 200, 4, 101, 2000), 0, st) 37 38 gw("nx_fin_advstats_gate: PASS=" as *u8); gn(st[0]); gw(" FAIL=" as *u8); gn(st[1]); gw("\n" as *u8) 39 if st[1] == 0 { gw("nx_fin_advstats: GREEN (deflated-Sharpe multiple-testing correction proven)\n" as *u8); return 0 } 40 gw("nx_fin_advstats: RED\n" as *u8) 41 return 1 42}