Files
foxhunt/config/ml/alpha_compose_backtest_c51.json
jgrusewski eb49e2a0f7 feat(alpha): Phase E.3 follow-up — C51 distributional Q + Thompson + L1-L10 depth + falsifications
C51 distributional Q-network with GPU Thompson selection borrowed
minimally from production (alpha_c51.cu: forward, project, grad,
expected_q, thompson_select kernels; ~260 lines). Uses Huber
negative-tail compression in projection per production
block_bellman_project_f. Action selection 100% GPU via mapped-pinned
i32 output + __threadfence_system + host volatile read (matches
gpu_training_guard MappedBuffer pattern).

Backtest result (2D sweep, 500 episodes per cell, 30 cells):
  cost=0    C51 +10.41 vs linear-Q -15.72  (+26pt, BEATS Phase 1d.4
                                            no-RL baseline +4.4 by 6pt)
  cost=0.125 C51 -13.81 vs -29.17  (+15pt closes half-tick gap)
Win rate at cost=0 best τ: linear-Q 0.008 → C51 0.552.

Calibration hypothesis vindicated; documented in
memory/pearl_c51_thompson_closed_phase_e3_gap.md.

Also in this commit (Phase E.3 follow-up cleanup):
- --pruned-actions falsified (2.4× worse Sharpe). Documented in
  memory/pearl_action_pruning_falsified.md.
- --real-spread falsified for ES futures (76% of bars at 1-tick floor).
- SnapshotRow bid_l/ask_l extended from [f32; 3] to [f32; 10].
  L4-L10 synthesized in this commit; real MBP-10 peek lands in E.4.A T5.
- docs/isv-slots.md updated per kernel-audit-doc hook requirement.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 20:43:57 +02:00

451 lines
14 KiB
JSON

{
"bins": [
{
"avg_n_trades": 505.7820129394531,
"cost": 0.0,
"mean_reward": -7.376502513885498,
"n_episodes": 500,
"p05": -15.246373176574707,
"p50": -9.201272964477539,
"p95": 6.196549415588379,
"sharpe_annualised": -31.529918670654297,
"sharpe_per_episode": -1.101744532585144,
"std_reward": 6.695292949676514,
"threshold": 0.0,
"win_rate": 0.1420000046491623
},
{
"avg_n_trades": 506.8420104980469,
"cost": 0.0625,
"mean_reward": -15.909566879272461,
"n_episodes": 500,
"p05": -23.928251266479492,
"p50": -17.78717803955078,
"p95": -3.438425302505493,
"sharpe_annualised": -68.6070327758789,
"sharpe_per_episode": -2.3973236083984375,
"std_reward": 6.636386871337891,
"threshold": 0.0,
"win_rate": 0.029999999329447746
},
{
"avg_n_trades": 505.7179870605469,
"cost": 0.125,
"mean_reward": -23.42654800415039,
"n_episodes": 500,
"p05": -32.949134826660156,
"p50": -24.983301162719727,
"p95": -9.647102355957031,
"sharpe_annualised": -91.52935028076172,
"sharpe_per_episode": -3.1982944011688232,
"std_reward": 7.324700355529785,
"threshold": 0.0,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 507.2300109863281,
"cost": 0.25,
"mean_reward": -40.23649215698242,
"n_episodes": 500,
"p05": -50.727237701416016,
"p50": -41.87934875488281,
"p95": -25.59070587158203,
"sharpe_annualised": -140.9852752685547,
"sharpe_per_episode": -4.926424026489258,
"std_reward": 8.167484283447266,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 506.33599853515625,
"cost": 0.5,
"mean_reward": -72.27515411376953,
"n_episodes": 500,
"p05": -89.18425750732422,
"p50": -72.6242904663086,
"p95": -53.71200180053711,
"sharpe_annualised": -197.0381622314453,
"sharpe_per_episode": -6.88507080078125,
"std_reward": 10.4973726272583,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 411.7900085449219,
"cost": 0.0,
"mean_reward": -5.731086730957031,
"n_episodes": 500,
"p05": -13.217626571655273,
"p50": -6.432249069213867,
"p95": 4.667325973510742,
"sharpe_annualised": -28.958410263061523,
"sharpe_per_episode": -1.0118887424468994,
"std_reward": 5.663751602172852,
"threshold": 0.05000000074505806,
"win_rate": 0.1459999978542328
},
{
"avg_n_trades": 414.65399169921875,
"cost": 0.0625,
"mean_reward": -12.296024322509766,
"n_episodes": 500,
"p05": -22.073755264282227,
"p50": -12.375904083251953,
"p95": -2.1291003227233887,
"sharpe_annualised": -56.619964599609375,
"sharpe_per_episode": -1.978461742401123,
"std_reward": 6.214941501617432,
"threshold": 0.05000000074505806,
"win_rate": 0.03999999910593033
},
{
"avg_n_trades": 413.5060119628906,
"cost": 0.125,
"mean_reward": -19.207530975341797,
"n_episodes": 500,
"p05": -31.44267463684082,
"p50": -19.380374908447266,
"p95": -7.792024612426758,
"sharpe_annualised": -76.79408264160156,
"sharpe_per_episode": -2.6834022998809814,
"std_reward": 7.157902240753174,
"threshold": 0.05000000074505806,
"win_rate": 0.00800000037997961
},
{
"avg_n_trades": 411.93798828125,
"cost": 0.25,
"mean_reward": -32.429752349853516,
"n_episodes": 500,
"p05": -48.73774337768555,
"p50": -32.32264709472656,
"p95": -16.66182518005371,
"sharpe_annualised": -97.9114761352539,
"sharpe_per_episode": -3.4213037490844727,
"std_reward": 9.47877025604248,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 415.7279968261719,
"cost": 0.5,
"mean_reward": -60.21247482299805,
"n_episodes": 500,
"p05": -83.98477935791016,
"p50": -63.01105499267578,
"p95": -33.47249984741211,
"sharpe_annualised": -111.4959716796875,
"sharpe_per_episode": -3.895984649658203,
"std_reward": 15.455008506774902,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 307.6679992675781,
"cost": 0.0,
"mean_reward": -2.764266014099121,
"n_episodes": 500,
"p05": -11.989750862121582,
"p50": -2.776402473449707,
"p95": 7.969524383544922,
"sharpe_annualised": -13.065699577331543,
"sharpe_per_episode": -0.4565524756908417,
"std_reward": 6.054651260375977,
"threshold": 0.10000000149011612,
"win_rate": 0.257999986410141
},
{
"avg_n_trades": 313.0580139160156,
"cost": 0.0625,
"mean_reward": -8.023506164550781,
"n_episodes": 500,
"p05": -20.223373413085938,
"p50": -7.3301496505737305,
"p95": 2.120025396347046,
"sharpe_annualised": -33.08244323730469,
"sharpe_per_episode": -1.1559940576553345,
"std_reward": 6.940784931182861,
"threshold": 0.10000000149011612,
"win_rate": 0.09000000357627869
},
{
"avg_n_trades": 312.7879943847656,
"cost": 0.125,
"mean_reward": -13.200392723083496,
"n_episodes": 500,
"p05": -27.572002410888672,
"p50": -11.809425354003906,
"p95": -1.6250247955322266,
"sharpe_annualised": -45.03028106689453,
"sharpe_per_episode": -1.5734853744506836,
"std_reward": 8.389269828796387,
"threshold": 0.10000000149011612,
"win_rate": 0.03799999877810478
},
{
"avg_n_trades": 309.92401123046875,
"cost": 0.25,
"mean_reward": -23.74254035949707,
"n_episodes": 500,
"p05": -43.5518913269043,
"p50": -22.597496032714844,
"p95": -7.84235143661499,
"sharpe_annualised": -57.187339782714844,
"sharpe_per_episode": -1.998287320137024,
"std_reward": 11.881443977355957,
"threshold": 0.10000000149011612,
"win_rate": 0.004000000189989805
},
{
"avg_n_trades": 317.7900085449219,
"cost": 0.5,
"mean_reward": -44.596744537353516,
"n_episodes": 500,
"p05": -77.12137603759766,
"p50": -44.13597869873047,
"p95": -14.920825004577637,
"sharpe_annualised": -60.16629409790039,
"sharpe_per_episode": -2.1023805141448975,
"std_reward": 21.212499618530273,
"threshold": 0.10000000149011612,
"win_rate": 0.0
},
{
"avg_n_trades": 214.0800018310547,
"cost": 0.0,
"mean_reward": -0.7483880519866943,
"n_episodes": 500,
"p05": -8.611875534057617,
"p50": -0.9981997013092041,
"p95": 7.168798923492432,
"sharpe_annualised": -4.30732536315918,
"sharpe_per_episode": -0.15051013231277466,
"std_reward": 4.972343444824219,
"threshold": 0.15000000596046448,
"win_rate": 0.3479999899864197
},
{
"avg_n_trades": 220.29600524902344,
"cost": 0.0625,
"mean_reward": -4.5742506980896,
"n_episodes": 500,
"p05": -15.124225616455078,
"p50": -3.609375,
"p95": 5.420872688293457,
"sharpe_annualised": -22.15690803527832,
"sharpe_per_episode": -0.7742250561714172,
"std_reward": 5.908166408538818,
"threshold": 0.15000000596046448,
"win_rate": 0.16200000047683716
},
{
"avg_n_trades": 206.593994140625,
"cost": 0.125,
"mean_reward": -7.650266170501709,
"n_episodes": 500,
"p05": -20.91200065612793,
"p50": -5.522923946380615,
"p95": 0.7698264122009277,
"sharpe_annualised": -31.48302459716797,
"sharpe_per_episode": -1.100105881690979,
"std_reward": 6.954117774963379,
"threshold": 0.15000000596046448,
"win_rate": 0.08399999886751175
},
{
"avg_n_trades": 207.1020050048828,
"cost": 0.25,
"mean_reward": -14.568126678466797,
"n_episodes": 500,
"p05": -31.57849884033203,
"p50": -11.627604484558105,
"p95": -3.4181251525878906,
"sharpe_annualised": -42.31534957885742,
"sharpe_per_episode": -1.4786180257797241,
"std_reward": 9.852529525756836,
"threshold": 0.15000000596046448,
"win_rate": 0.014000000432133675
},
{
"avg_n_trades": 212.37600708007812,
"cost": 0.5,
"mean_reward": -29.32847023010254,
"n_episodes": 500,
"p05": -61.26882553100586,
"p50": -24.778127670288086,
"p95": -7.954624652862549,
"sharpe_annualised": -46.66537857055664,
"sharpe_per_episode": -1.6306202411651611,
"std_reward": 17.986082077026367,
"threshold": 0.15000000596046448,
"win_rate": 0.0
},
{
"avg_n_trades": 133.64199829101562,
"cost": 0.0,
"mean_reward": 0.8386048078536987,
"n_episodes": 500,
"p05": -4.833250522613525,
"p50": -0.04905200004577637,
"p95": 9.4207763671875,
"sharpe_annualised": 5.863218307495117,
"sharpe_per_episode": 0.20487743616104126,
"std_reward": 4.093202114105225,
"threshold": 0.20000000298023224,
"win_rate": 0.492000013589859
},
{
"avg_n_trades": 130.7899932861328,
"cost": 0.0625,
"mean_reward": -1.5558525323867798,
"n_episodes": 500,
"p05": -8.187274932861328,
"p50": -1.694624423980713,
"p95": 5.250924110412598,
"sharpe_annualised": -10.904839515686035,
"sharpe_per_episode": -0.381045937538147,
"std_reward": 4.083110332489014,
"threshold": 0.20000000298023224,
"win_rate": 0.2840000092983246
},
{
"avg_n_trades": 132.32000732421875,
"cost": 0.125,
"mean_reward": -3.9048287868499756,
"n_episodes": 500,
"p05": -11.645946502685547,
"p50": -3.379124402999878,
"p95": 2.8128762245178223,
"sharpe_annualised": -24.98102569580078,
"sharpe_per_episode": -0.8729076981544495,
"std_reward": 4.473358154296875,
"threshold": 0.20000000298023224,
"win_rate": 0.15600000321865082
},
{
"avg_n_trades": 131.50799560546875,
"cost": 0.25,
"mean_reward": -7.8982110023498535,
"n_episodes": 500,
"p05": -18.36737632751465,
"p50": -6.697125434875488,
"p95": 0.27234911918640137,
"sharpe_annualised": -38.383419036865234,
"sharpe_per_episode": -1.341225266456604,
"std_reward": 5.888802528381348,
"threshold": 0.20000000298023224,
"win_rate": 0.05999999865889549
},
{
"avg_n_trades": 128.50399780273438,
"cost": 0.5,
"mean_reward": -17.548030853271484,
"n_episodes": 500,
"p05": -35.324703216552734,
"p50": -15.349874496459961,
"p95": -5.963876247406006,
"sharpe_annualised": -55.831520080566406,
"sharpe_per_episode": -1.9509111642837524,
"std_reward": 8.994787216186523,
"threshold": 0.20000000298023224,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 98.94200134277344,
"cost": 0.0,
"mean_reward": 1.554954171180725,
"n_episodes": 500,
"p05": -3.022125720977783,
"p50": 0.3521251678466797,
"p95": 10.139877319335938,
"sharpe_annualised": 10.411664009094238,
"sharpe_per_episode": 0.36381298303604126,
"std_reward": 4.274048328399658,
"threshold": 0.25,
"win_rate": 0.5519999861717224
},
{
"avg_n_trades": 98.55400085449219,
"cost": 0.0625,
"mean_reward": -0.1477748453617096,
"n_episodes": 500,
"p05": -6.051650524139404,
"p50": -0.8751249313354492,
"p95": 7.868124485015869,
"sharpe_annualised": -0.9564568996429443,
"sharpe_per_episode": -0.03342130780220032,
"std_reward": 4.421575546264648,
"threshold": 0.25,
"win_rate": 0.36800000071525574
},
{
"avg_n_trades": 95.23999786376953,
"cost": 0.125,
"mean_reward": -1.9221543073654175,
"n_episodes": 500,
"p05": -7.974623680114746,
"p50": -2.276874542236328,
"p95": 5.843000888824463,
"sharpe_annualised": -13.812037467956543,
"sharpe_per_episode": -0.482631653547287,
"std_reward": 3.9826526641845703,
"threshold": 0.25,
"win_rate": 0.20600000023841858
},
{
"avg_n_trades": 97.05400085449219,
"cost": 0.25,
"mean_reward": -5.653500556945801,
"n_episodes": 500,
"p05": -13.8267240524292,
"p50": -5.270999431610107,
"p95": 1.1986992359161377,
"sharpe_annualised": -35.398399353027344,
"sharpe_per_episode": -1.2369202375411987,
"std_reward": 4.570626258850098,
"threshold": 0.25,
"win_rate": 0.08399999886751175
},
{
"avg_n_trades": 96.16999816894531,
"cost": 0.5,
"mean_reward": -12.689785957336426,
"n_episodes": 500,
"p05": -23.98550033569336,
"p50": -11.424251556396484,
"p95": -4.219249248504639,
"sharpe_annualised": -58.158931732177734,
"sharpe_per_episode": -2.0322375297546387,
"std_reward": 6.244243621826172,
"threshold": 0.25,
"win_rate": 0.006000000052154064
}
],
"c51": true,
"c51_n_atoms": 51,
"c51_vmax": 10.0,
"c51_vmin": -10.0,
"cost_grid": [
0.0,
0.0625,
0.125,
0.25,
0.5
],
"horizon": 600,
"n_allowed_actions": 9,
"n_eval_episodes": 500,
"n_train_episodes": 1000,
"phase": "E.3 Task 23 (2D sweep)",
"pruned_actions": false,
"threshold_grid": [
0.0,
0.05000000074505806,
0.10000000149011612,
0.15000000596046448,
0.20000000298023224,
0.25
],
"train_cost": 0.0625,
"train_frac": 0.800000011920929
}