Files
foxhunt/config/ml/alpha_compose_backtest_c51_realspread.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.379087924957275,
"n_episodes": 500,
"p05": -15.246373176574707,
"p50": -9.201272964477539,
"p95": 6.196549415588379,
"sharpe_annualised": -31.543193817138672,
"sharpe_per_episode": -1.1022083759307861,
"std_reward": 6.694820880889893,
"threshold": 0.0,
"win_rate": 0.1420000046491623
},
{
"avg_n_trades": 506.8420104980469,
"cost": 0.0625,
"mean_reward": -15.913408279418945,
"n_episodes": 500,
"p05": -23.970996856689453,
"p50": -17.78717803955078,
"p95": -3.438425302505493,
"sharpe_annualised": -68.62244415283203,
"sharpe_per_episode": -2.397862195968628,
"std_reward": 6.63649845123291,
"threshold": 0.0,
"win_rate": 0.029999999329447746
},
{
"avg_n_trades": 505.7179870605469,
"cost": 0.125,
"mean_reward": -23.430904388427734,
"n_episodes": 500,
"p05": -32.949134826660156,
"p50": -24.983301162719727,
"p95": -9.647102355957031,
"sharpe_annualised": -91.5419921875,
"sharpe_per_episode": -3.1987359523773193,
"std_reward": 7.3250508308410645,
"threshold": 0.0,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 507.2300109863281,
"cost": 0.25,
"mean_reward": -40.23920440673828,
"n_episodes": 500,
"p05": -50.727237701416016,
"p50": -41.87934875488281,
"p95": -25.59070587158203,
"sharpe_annualised": -140.99142456054688,
"sharpe_per_episode": -4.926639080047607,
"std_reward": 8.167678833007812,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 506.33599853515625,
"cost": 0.5,
"mean_reward": -72.27790832519531,
"n_episodes": 500,
"p05": -89.18425750732422,
"p50": -72.6242904663086,
"p95": -53.71200180053711,
"sharpe_annualised": -197.06411743164062,
"sharpe_per_episode": -6.885977745056152,
"std_reward": 10.496389389038086,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 411.7900085449219,
"cost": 0.0,
"mean_reward": -5.73362922668457,
"n_episodes": 500,
"p05": -13.241250991821289,
"p50": -6.448873996734619,
"p95": 4.655198097229004,
"sharpe_annualised": -28.97418212890625,
"sharpe_per_episode": -1.0124398469924927,
"std_reward": 5.663179874420166,
"threshold": 0.05000000074505806,
"win_rate": 0.1459999978542328
},
{
"avg_n_trades": 414.65399169921875,
"cost": 0.0625,
"mean_reward": -12.299840927124023,
"n_episodes": 500,
"p05": -22.073755264282227,
"p50": -12.375904083251953,
"p95": -2.1291003227233887,
"sharpe_annualised": -56.6534309387207,
"sharpe_per_episode": -1.9796310663223267,
"std_reward": 6.213198661804199,
"threshold": 0.05000000074505806,
"win_rate": 0.03999999910593033
},
{
"avg_n_trades": 413.5060119628906,
"cost": 0.125,
"mean_reward": -19.20939064025879,
"n_episodes": 500,
"p05": -31.44267463684082,
"p50": -19.380374908447266,
"p95": -7.792024612426758,
"sharpe_annualised": -76.8126220703125,
"sharpe_per_episode": -2.6840503215789795,
"std_reward": 7.156866550445557,
"threshold": 0.05000000074505806,
"win_rate": 0.00800000037997961
},
{
"avg_n_trades": 411.93798828125,
"cost": 0.25,
"mean_reward": -32.43183517456055,
"n_episodes": 500,
"p05": -48.73774337768555,
"p50": -32.32264709472656,
"p95": -16.66182518005371,
"sharpe_annualised": -97.9302749633789,
"sharpe_per_episode": -3.4219608306884766,
"std_reward": 9.477559089660645,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 415.7279968261719,
"cost": 0.5,
"mean_reward": -60.216548919677734,
"n_episodes": 500,
"p05": -83.98477935791016,
"p50": -63.01105499267578,
"p95": -33.47249984741211,
"sharpe_annualised": -111.51805877685547,
"sharpe_per_episode": -3.896756410598755,
"std_reward": 15.452993392944336,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 307.6679992675781,
"cost": 0.0,
"mean_reward": -2.7668509483337402,
"n_episodes": 500,
"p05": -11.989750862121582,
"p50": -2.776402473449707,
"p95": 7.871026992797852,
"sharpe_annualised": -13.079078674316406,
"sharpe_per_episode": -0.45701998472213745,
"std_reward": 6.054113864898682,
"threshold": 0.10000000149011612,
"win_rate": 0.257999986410141
},
{
"avg_n_trades": 313.0580139160156,
"cost": 0.0625,
"mean_reward": -8.025443077087402,
"n_episodes": 500,
"p05": -20.223373413085938,
"p50": -7.3301496505737305,
"p95": 2.120025396347046,
"sharpe_annualised": -33.09466552734375,
"sharpe_per_episode": -1.156421184539795,
"std_reward": 6.939896583557129,
"threshold": 0.10000000149011612,
"win_rate": 0.09000000357627869
},
{
"avg_n_trades": 312.7879943847656,
"cost": 0.125,
"mean_reward": -13.201777458190918,
"n_episodes": 500,
"p05": -27.572002410888672,
"p50": -11.809425354003906,
"p95": -1.6250247955322266,
"sharpe_annualised": -45.03886795043945,
"sharpe_per_episode": -1.573785424232483,
"std_reward": 8.3885498046875,
"threshold": 0.10000000149011612,
"win_rate": 0.03799999877810478
},
{
"avg_n_trades": 309.92401123046875,
"cost": 0.25,
"mean_reward": -23.745981216430664,
"n_episodes": 500,
"p05": -43.5518913269043,
"p50": -22.692001342773438,
"p95": -7.84235143661499,
"sharpe_annualised": -57.198463439941406,
"sharpe_per_episode": -1.998676061630249,
"std_reward": 11.880855560302734,
"threshold": 0.10000000149011612,
"win_rate": 0.004000000189989805
},
{
"avg_n_trades": 317.7900085449219,
"cost": 0.5,
"mean_reward": -44.5992431640625,
"n_episodes": 500,
"p05": -77.12137603759766,
"p50": -44.13597869873047,
"p95": -14.920825004577637,
"sharpe_annualised": -60.17354202270508,
"sharpe_per_episode": -2.1026337146759033,
"std_reward": 21.211132049560547,
"threshold": 0.10000000149011612,
"win_rate": 0.0
},
{
"avg_n_trades": 214.0800018310547,
"cost": 0.0,
"mean_reward": -0.7500550150871277,
"n_episodes": 500,
"p05": -8.611875534057617,
"p50": -1.001124382019043,
"p95": 7.168798923492432,
"sharpe_annualised": -4.3168110847473145,
"sharpe_per_episode": -0.1508415937423706,
"std_reward": 4.972468376159668,
"threshold": 0.15000000596046448,
"win_rate": 0.3479999899864197
},
{
"avg_n_trades": 220.29600524902344,
"cost": 0.0625,
"mean_reward": -4.576065540313721,
"n_episodes": 500,
"p05": -15.124225616455078,
"p50": -3.609375,
"p95": 5.420872688293457,
"sharpe_annualised": -22.16614532470703,
"sharpe_per_episode": -0.774547815322876,
"std_reward": 5.908047676086426,
"threshold": 0.15000000596046448,
"win_rate": 0.16200000047683716
},
{
"avg_n_trades": 206.593994140625,
"cost": 0.125,
"mean_reward": -7.652109146118164,
"n_episodes": 500,
"p05": -20.91200065612793,
"p50": -5.522923946380615,
"p95": 0.7698264122009277,
"sharpe_annualised": -31.492902755737305,
"sharpe_per_episode": -1.100451111793518,
"std_reward": 6.953611373901367,
"threshold": 0.15000000596046448,
"win_rate": 0.08399999886751175
},
{
"avg_n_trades": 207.1020050048828,
"cost": 0.25,
"mean_reward": -14.569986343383789,
"n_episodes": 500,
"p05": -31.593997955322266,
"p50": -11.627604484558105,
"p95": -3.4181251525878906,
"sharpe_annualised": -42.324275970458984,
"sharpe_per_episode": -1.478929877281189,
"std_reward": 9.85170841217041,
"threshold": 0.15000000596046448,
"win_rate": 0.014000000432133675
},
{
"avg_n_trades": 212.37600708007812,
"cost": 0.5,
"mean_reward": -29.330257415771484,
"n_episodes": 500,
"p05": -61.26882553100586,
"p50": -24.778127670288086,
"p95": -7.954624652862549,
"sharpe_annualised": -46.668235778808594,
"sharpe_per_episode": -1.6307201385498047,
"std_reward": 17.98607635498047,
"threshold": 0.15000000596046448,
"win_rate": 0.0
},
{
"avg_n_trades": 133.64199829101562,
"cost": 0.0,
"mean_reward": 0.8351230621337891,
"n_episodes": 500,
"p05": -4.833250522613525,
"p50": -0.04905200004577637,
"p95": 9.4207763671875,
"sharpe_annualised": 5.84094762802124,
"sharpe_per_episode": 0.20409922301769257,
"std_reward": 4.091750144958496,
"threshold": 0.20000000298023224,
"win_rate": 0.49000000953674316
},
{
"avg_n_trades": 130.7899932861328,
"cost": 0.0625,
"mean_reward": -1.5587923526763916,
"n_episodes": 500,
"p05": -8.187274932861328,
"p50": -1.694624423980713,
"p95": 5.250924110412598,
"sharpe_annualised": -10.926456451416016,
"sharpe_per_episode": -0.3818012773990631,
"std_reward": 4.082732200622559,
"threshold": 0.20000000298023224,
"win_rate": 0.2840000092983246
},
{
"avg_n_trades": 132.32000732421875,
"cost": 0.125,
"mean_reward": -3.9061996936798096,
"n_episodes": 500,
"p05": -11.645946502685547,
"p50": -3.379124402999878,
"p95": 2.765799045562744,
"sharpe_annualised": -24.989980697631836,
"sharpe_per_episode": -0.8732205629348755,
"std_reward": 4.473325252532959,
"threshold": 0.20000000298023224,
"win_rate": 0.15600000321865082
},
{
"avg_n_trades": 131.50799560546875,
"cost": 0.25,
"mean_reward": -7.899728298187256,
"n_episodes": 500,
"p05": -18.36737632751465,
"p50": -6.697125434875488,
"p95": 0.27234911918640137,
"sharpe_annualised": -38.39303970336914,
"sharpe_per_episode": -1.3415614366531372,
"std_reward": 5.888458251953125,
"threshold": 0.20000000298023224,
"win_rate": 0.05999999865889549
},
{
"avg_n_trades": 128.50399780273438,
"cost": 0.5,
"mean_reward": -17.549320220947266,
"n_episodes": 500,
"p05": -35.324703216552734,
"p50": -15.349874496459961,
"p95": -5.963876247406006,
"sharpe_annualised": -55.83051681518555,
"sharpe_per_episode": -1.9508761167526245,
"std_reward": 8.995609283447266,
"threshold": 0.20000000298023224,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 98.94200134277344,
"cost": 0.0,
"mean_reward": 1.5531558990478516,
"n_episodes": 500,
"p05": -3.022125720977783,
"p50": 0.3488759994506836,
"p95": 10.139877319335938,
"sharpe_annualised": 10.39977741241455,
"sharpe_per_episode": 0.36339762806892395,
"std_reward": 4.273984909057617,
"threshold": 0.25,
"win_rate": 0.5519999861717224
},
{
"avg_n_trades": 98.55400085449219,
"cost": 0.0625,
"mean_reward": -0.1503140926361084,
"n_episodes": 500,
"p05": -6.051650524139404,
"p50": -0.8751249313354492,
"p95": 7.868124485015869,
"sharpe_annualised": -0.972659170627594,
"sharpe_per_episode": -0.033987462520599365,
"std_reward": 4.422633647918701,
"threshold": 0.25,
"win_rate": 0.36800000071525574
},
{
"avg_n_trades": 95.23999786376953,
"cost": 0.125,
"mean_reward": -1.923614263534546,
"n_episodes": 500,
"p05": -7.974623680114746,
"p50": -2.276874542236328,
"p95": 5.843000888824463,
"sharpe_annualised": -13.825085639953613,
"sharpe_per_episode": -0.48308759927749634,
"std_reward": 3.9819159507751465,
"threshold": 0.25,
"win_rate": 0.20600000023841858
},
{
"avg_n_trades": 97.05400085449219,
"cost": 0.25,
"mean_reward": -5.656537055969238,
"n_episodes": 500,
"p05": -13.8267240524292,
"p50": -5.272023677825928,
"p95": 1.1986992359161377,
"sharpe_annualised": -35.41947937011719,
"sharpe_per_episode": -1.2376567125320435,
"std_reward": 4.57036018371582,
"threshold": 0.25,
"win_rate": 0.08399999886751175
},
{
"avg_n_trades": 96.16999816894531,
"cost": 0.5,
"mean_reward": -12.691283226013184,
"n_episodes": 500,
"p05": -23.98550033569336,
"p50": -11.424251556396484,
"p95": -4.219249248504639,
"sharpe_annualised": -58.172401428222656,
"sharpe_per_episode": -2.032708168029785,
"std_reward": 6.243533611297607,
"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
}