Files
foxhunt/config/ml/alpha_compose_backtest_pruned.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

447 lines
13 KiB
JSON

{
"bins": [
{
"avg_n_trades": 409.4419860839844,
"cost": 0.0,
"mean_reward": -30.64391326904297,
"n_episodes": 500,
"p05": -49.61526870727539,
"p50": -28.566925048828125,
"p95": -18.450275421142578,
"sharpe_annualised": -77.86469268798828,
"sharpe_per_episode": -2.7208125591278076,
"std_reward": 11.262779235839844,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 407.4179992675781,
"cost": 0.0625,
"mean_reward": -45.718017578125,
"n_episodes": 500,
"p05": -64.58588409423828,
"p50": -44.32868576049805,
"p95": -31.426769256591797,
"sharpe_annualised": -126.78475189208984,
"sharpe_per_episode": -4.430217742919922,
"std_reward": 10.319586753845215,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 412.2200012207031,
"cost": 0.125,
"mean_reward": -62.28627014160156,
"n_episodes": 500,
"p05": -87.70376586914062,
"p50": -59.780799865722656,
"p95": -41.51686477661133,
"sharpe_annualised": -125.80178833007812,
"sharpe_per_episode": -4.395870208740234,
"std_reward": 14.169269561767578,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 412.1180114746094,
"cost": 0.25,
"mean_reward": -94.7795181274414,
"n_episodes": 500,
"p05": -125.90235137939453,
"p50": -93.9426498413086,
"p95": -67.9682388305664,
"sharpe_annualised": -141.44520568847656,
"sharpe_per_episode": -4.942495346069336,
"std_reward": 19.176450729370117,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 412.614013671875,
"cost": 0.5,
"mean_reward": -159.3415069580078,
"n_episodes": 500,
"p05": -202.5274200439453,
"p50": -165.60362243652344,
"p95": -108.91909790039062,
"sharpe_annualised": -150.140380859375,
"sharpe_per_episode": -5.246329307556152,
"std_reward": 30.371997833251953,
"threshold": 0.0,
"win_rate": 0.0
},
{
"avg_n_trades": 346.38800048828125,
"cost": 0.0,
"mean_reward": -26.021240234375,
"n_episodes": 500,
"p05": -42.303611755371094,
"p50": -23.978374481201172,
"p95": -13.484901428222656,
"sharpe_annualised": -78.6505355834961,
"sharpe_per_episode": -2.748272180557251,
"std_reward": 9.468217849731445,
"threshold": 0.05000000074505806,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 345.72198486328125,
"cost": 0.0625,
"mean_reward": -39.795684814453125,
"n_episodes": 500,
"p05": -60.49996566772461,
"p50": -36.7501220703125,
"p95": -25.743999481201172,
"sharpe_annualised": -99.63706970214844,
"sharpe_per_episode": -3.4816009998321533,
"std_reward": 11.430282592773438,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 343.6199951171875,
"cost": 0.125,
"mean_reward": -53.896480560302734,
"n_episodes": 500,
"p05": -81.64607238769531,
"p50": -49.21561813354492,
"p95": -34.734275817871094,
"sharpe_annualised": -98.90637969970703,
"sharpe_per_episode": -3.456068515777588,
"std_reward": 15.59473705291748,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 342.9639892578125,
"cost": 0.25,
"mean_reward": -79.68690490722656,
"n_episodes": 500,
"p05": -113.12445068359375,
"p50": -73.63372802734375,
"p95": -55.00608825683594,
"sharpe_annualised": -116.19927978515625,
"sharpe_per_episode": -4.060331344604492,
"std_reward": 19.625713348388672,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 346.8240051269531,
"cost": 0.5,
"mean_reward": -135.82601928710938,
"n_episodes": 500,
"p05": -184.07630920410156,
"p50": -126.77576446533203,
"p95": -91.21710968017578,
"sharpe_annualised": -118.39791107177734,
"sharpe_per_episode": -4.137157917022705,
"std_reward": 32.83075714111328,
"threshold": 0.05000000074505806,
"win_rate": 0.0
},
{
"avg_n_trades": 283.99200439453125,
"cost": 0.0,
"mean_reward": -22.65932846069336,
"n_episodes": 500,
"p05": -43.386817932128906,
"p50": -20.47347068786621,
"p95": -9.256776809692383,
"sharpe_annualised": -60.726375579833984,
"sharpe_per_episode": -2.1219513416290283,
"std_reward": 10.678532600402832,
"threshold": 0.10000000149011612,
"win_rate": 0.0
},
{
"avg_n_trades": 280.16400146484375,
"cost": 0.0625,
"mean_reward": -33.22947311401367,
"n_episodes": 500,
"p05": -57.53879165649414,
"p50": -31.169370651245117,
"p95": -16.533370971679688,
"sharpe_annualised": -72.24711608886719,
"sharpe_per_episode": -2.5245184898376465,
"std_reward": 13.162697792053223,
"threshold": 0.10000000149011612,
"win_rate": 0.0
},
{
"avg_n_trades": 274.6679992675781,
"cost": 0.125,
"mean_reward": -42.85700225830078,
"n_episodes": 500,
"p05": -70.168212890625,
"p50": -40.32282257080078,
"p95": -22.919273376464844,
"sharpe_annualised": -79.69395446777344,
"sharpe_per_episode": -2.7847321033477783,
"std_reward": 15.38999080657959,
"threshold": 0.10000000149011612,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 274.9219970703125,
"cost": 0.25,
"mean_reward": -64.72478485107422,
"n_episodes": 500,
"p05": -101.20083618164062,
"p50": -61.02626419067383,
"p95": -35.71025085449219,
"sharpe_annualised": -84.47412872314453,
"sharpe_per_episode": -2.9517648220062256,
"std_reward": 21.9274845123291,
"threshold": 0.10000000149011612,
"win_rate": 0.0
},
{
"avg_n_trades": 275.6679992675781,
"cost": 0.5,
"mean_reward": -108.99763488769531,
"n_episodes": 500,
"p05": -166.28961181640625,
"p50": -104.48725128173828,
"p95": -57.43674850463867,
"sharpe_annualised": -82.64939880371094,
"sharpe_per_episode": -2.8880035877227783,
"std_reward": 37.74151611328125,
"threshold": 0.10000000149011612,
"win_rate": 0.0
},
{
"avg_n_trades": 215.17799377441406,
"cost": 0.0,
"mean_reward": -17.607177734375,
"n_episodes": 500,
"p05": -35.043479919433594,
"p50": -15.50200080871582,
"p95": -5.586098670959473,
"sharpe_annualised": -49.608726501464844,
"sharpe_per_episode": -1.7334692478179932,
"std_reward": 10.157191276550293,
"threshold": 0.15000000596046448,
"win_rate": 0.017999999225139618
},
{
"avg_n_trades": 209.697998046875,
"cost": 0.0625,
"mean_reward": -26.11052131652832,
"n_episodes": 500,
"p05": -48.8406982421875,
"p50": -22.618318557739258,
"p95": -10.570127487182617,
"sharpe_annualised": -57.65428161621094,
"sharpe_per_episode": -2.014603614807129,
"std_reward": 12.960623741149902,
"threshold": 0.15000000596046448,
"win_rate": 0.004000000189989805
},
{
"avg_n_trades": 217.76600646972656,
"cost": 0.125,
"mean_reward": -35.587677001953125,
"n_episodes": 500,
"p05": -62.99174499511719,
"p50": -31.81800079345703,
"p95": -16.088119506835938,
"sharpe_annualised": -66.77113342285156,
"sharpe_per_episode": -2.33317232131958,
"std_reward": 15.252914428710938,
"threshold": 0.15000000596046448,
"win_rate": 0.0020000000949949026
},
{
"avg_n_trades": 213.79600524902344,
"cost": 0.25,
"mean_reward": -51.22513961791992,
"n_episodes": 500,
"p05": -86.71883392333984,
"p50": -47.09474563598633,
"p95": -25.441743850708008,
"sharpe_annualised": -71.61820220947266,
"sharpe_per_episode": -2.502542495727539,
"std_reward": 20.469240188598633,
"threshold": 0.15000000596046448,
"win_rate": 0.0
},
{
"avg_n_trades": 216.11000061035156,
"cost": 0.5,
"mean_reward": -85.81346893310547,
"n_episodes": 500,
"p05": -140.97569274902344,
"p50": -81.15174102783203,
"p95": -41.56011962890625,
"sharpe_annualised": -76.13468933105469,
"sharpe_per_episode": -2.6603612899780273,
"std_reward": 32.25632095336914,
"threshold": 0.15000000596046448,
"win_rate": 0.0
},
{
"avg_n_trades": 161.28199768066406,
"cost": 0.0,
"mean_reward": -14.621756553649902,
"n_episodes": 500,
"p05": -34.215675354003906,
"p50": -11.45572280883789,
"p95": -4.464199542999268,
"sharpe_annualised": -42.86232376098633,
"sharpe_per_episode": -1.4977308511734009,
"std_reward": 9.762606620788574,
"threshold": 0.20000000298023224,
"win_rate": 0.014000000432133675
},
{
"avg_n_trades": 165.6179962158203,
"cost": 0.0625,
"mean_reward": -21.606536865234375,
"n_episodes": 500,
"p05": -42.06482696533203,
"p50": -18.75684356689453,
"p95": -8.337549209594727,
"sharpe_annualised": -55.583866119384766,
"sharpe_per_episode": -1.9422574043273926,
"std_reward": 11.124444961547852,
"threshold": 0.20000000298023224,
"win_rate": 0.00800000037997961
},
{
"avg_n_trades": 158.93600463867188,
"cost": 0.125,
"mean_reward": -26.25715446472168,
"n_episodes": 500,
"p05": -49.11092758178711,
"p50": -23.162250518798828,
"p95": -11.844600677490234,
"sharpe_annualised": -63.4965705871582,
"sharpe_per_episode": -2.218749761581421,
"std_reward": 11.834211349487305,
"threshold": 0.20000000298023224,
"win_rate": 0.0
},
{
"avg_n_trades": 161.45599365234375,
"cost": 0.25,
"mean_reward": -39.04631805419922,
"n_episodes": 500,
"p05": -68.93614959716797,
"p50": -34.38017272949219,
"p95": -20.195877075195312,
"sharpe_annualised": -70.44474029541016,
"sharpe_per_episode": -2.461538314819336,
"std_reward": 15.862567901611328,
"threshold": 0.20000000298023224,
"win_rate": 0.0
},
{
"avg_n_trades": 163.34800720214844,
"cost": 0.5,
"mean_reward": -63.5859375,
"n_episodes": 500,
"p05": -102.9427719116211,
"p50": -58.92830276489258,
"p95": -32.09709548950195,
"sharpe_annualised": -75.88227844238281,
"sharpe_per_episode": -2.6515414714813232,
"std_reward": 23.980743408203125,
"threshold": 0.20000000298023224,
"win_rate": 0.0
},
{
"avg_n_trades": 134.08599853515625,
"cost": 0.0,
"mean_reward": -13.83078670501709,
"n_episodes": 500,
"p05": -36.201629638671875,
"p50": -10.920823097229004,
"p95": -2.622623920440674,
"sharpe_annualised": -37.462730407714844,
"sharpe_per_episode": -1.3090537786483765,
"std_reward": 10.565484046936035,
"threshold": 0.25,
"win_rate": 0.00800000037997961
},
{
"avg_n_trades": 136.51199340820312,
"cost": 0.0625,
"mean_reward": -18.66702651977539,
"n_episodes": 500,
"p05": -40.3795051574707,
"p50": -15.633600234985352,
"p95": -5.700125217437744,
"sharpe_annualised": -46.29603576660156,
"sharpe_per_episode": -1.6177144050598145,
"std_reward": 11.539135932922363,
"threshold": 0.25,
"win_rate": 0.004000000189989805
},
{
"avg_n_trades": 136.00399780273438,
"cost": 0.125,
"mean_reward": -22.70488739013672,
"n_episodes": 500,
"p05": -46.12636947631836,
"p50": -20.130022048950195,
"p95": -8.378849029541016,
"sharpe_annualised": -52.185447692871094,
"sharpe_per_episode": -1.8235070705413818,
"std_reward": 12.45121955871582,
"threshold": 0.25,
"win_rate": 0.004000000189989805
},
{
"avg_n_trades": 133.22999572753906,
"cost": 0.25,
"mean_reward": -31.63664436340332,
"n_episodes": 500,
"p05": -58.47060012817383,
"p50": -29.137378692626953,
"p95": -13.295875549316406,
"sharpe_annualised": -64.48110961914062,
"sharpe_per_episode": -2.253152370452881,
"std_reward": 14.041058540344238,
"threshold": 0.25,
"win_rate": 0.0
},
{
"avg_n_trades": 133.7779998779297,
"cost": 0.5,
"mean_reward": -49.41081619262695,
"n_episodes": 500,
"p05": -84.51933288574219,
"p50": -46.30955123901367,
"p95": -23.72110366821289,
"sharpe_annualised": -71.6323471069336,
"sharpe_per_episode": -2.5030367374420166,
"std_reward": 19.74034881591797,
"threshold": 0.25,
"win_rate": 0.0
}
],
"cost_grid": [
0.0,
0.0625,
0.125,
0.25,
0.5
],
"horizon": 600,
"n_allowed_actions": 4,
"n_eval_episodes": 500,
"n_train_episodes": 1000,
"phase": "E.3 Task 23 (2D sweep)",
"pruned_actions": true,
"threshold_grid": [
0.0,
0.05000000074505806,
0.10000000149011612,
0.15000000596046448,
0.20000000298023224,
0.25
],
"train_cost": 0.0625,
"train_frac": 0.800000011920929
}