2026-08-21 10:05:52 +00:00
{
"repo" : "manifoldbt/manifoldbt" ,
2026-08-23 14:01:18 +00:00
"run_id" : "32642616670" ,
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32642616670" ,
"commit" : "44f8ed1a91da9826161aa53823e1bb891f39aa5e" ,
2026-08-21 10:05:52 +00:00
"run_started_at" : "" ,
"conclusion" : "success" ,
2026-08-23 14:01:18 +00:00
"synced_at" : "2026-08-23T14:01:18.287780+00:00" ,
2026-08-21 10:05:52 +00:00
"backtests" : {
"schema_version" : 2 ,
2026-08-23 14:01:18 +00:00
"generated_at" : "2026-08-23T14:01:07.410774+00:00" ,
2026-08-21 10:05:52 +00:00
"environment" : {
"os" : "Linux" ,
"os_release" : "6.17.0-1022-azure" ,
"arch" : "x86_64" ,
"cpu" : "AMD EPYC 7763 64-Core Processor" ,
"logical_cores" : 4 ,
"ram_gb" : 16.8 ,
"python" : "3.12.14" ,
"versions" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : "0.19.0" ,
2026-08-21 10:05:52 +00:00
"vectorbt" : "0.28.4" ,
"raptorbt" : "0.9.0" ,
"numpy" : "2.4.3" ,
"numba" : "0.64.0" ,
"pandas" : "2.3.3"
},
2026-08-23 14:01:18 +00:00
"runner" : "GitHub Actions 1000000211" ,
2026-08-21 10:05:52 +00:00
"ci" : true ,
2026-08-23 14:01:18 +00:00
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32642616670" ,
"commit" : "44f8ed1a91da9826161aa53823e1bb891f39aa5e" ,
2026-08-21 10:05:52 +00:00
"pinned_cores" : null ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
]
},
"reference" : "manifoldbt" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
2026-08-23 14:01:18 +00:00
"reps" : 7 ,
2026-08-21 10:05:52 +00:00
"results" : [
{
"workload" : "sma_cross" ,
"title" : "SMA 30/150 crossover, long-only, no cost" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.8917489796876906e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.06675521397166517 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : 0.06675521397166725 ,
"final_equity" : 106675.52139716671 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 0.0 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.06675521397166517 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : 0.06675521397166521 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
}
},
"status" : "exact" ,
"paired_with" : [
"sma_cross_metrics"
],
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.005347049999997466 ,
0.0032132190000027094 ,
0.003269553999999175 ,
0.005082164000000944 ,
0.00493666900000278 ,
0.0033668539999922587 ,
0.0033179020000062565
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.0032132190000027094 ,
"median_s" : 0.0033668539999922587 ,
"max_s" : 0.005347049999997466 ,
"iqr_s" : 0.0018126100000017686 ,
"iqr_over_median" : 0.5383690531296981
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.18863555500000473 ,
0.34205679800000155 ,
0.20039412599999196 ,
0.18093825200000424 ,
0.18287249200000133 ,
0.346504865 ,
0.17978614300000118
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.17978614300000118 ,
"median_s" : 0.18863555500000473 ,
"max_s" : 0.346504865 ,
"iqr_s" : 0.1611185459999973 ,
"iqr_over_median" : 0.8541260739524597
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.010460542000004125 ,
0.008207519000009711 ,
0.008448298999994108 ,
0.007822949000001245 ,
0.00898829300000159 ,
0.007895570000002294 ,
0.00839399199999491
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.007822949000001245 ,
"median_s" : 0.00839399199999491 ,
"max_s" : 0.010460542000004125 ,
"iqr_s" : 0.001092722999999296 ,
"iqr_over_median" : 0.13017918053769395
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 54.1866947847351 ,
"min" : 35.27843483791887 ,
"max" : 106.45299869063177
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 2.34508832281425 ,
"min" : 1.5392948751751796 ,
"max" : 2.5839301017803162
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 1.0054353768621687 ,
2026-08-21 10:05:52 +00:00
"raptorbt" : null
}
},
{
"workload" : "sma_cross_metrics" ,
"title" : "SMA 30/150 crossover, with a performance summary" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.8917489796876906e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0 ,
"max_drawdown_rel" : 2.806945912450058e-15 ,
"advisory_ratio_rel" : {
"sharpe" : 0.00034240713210042254 ,
"sortino" : 0.0003424071320978874 ,
"volatility" : 0.0003424071321000681
}
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.06675521397166517 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.07910540917093023 ,
"sharpe" : 2.1149665518057725 ,
"sortino" : 4.02133680320316 ,
"volatility" : 0.17066118340286904
},
"vectorbt" : {
"total_return" : 0.06675521397166725 ,
"final_equity" : 106675.52139716671 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.07910540917093001 ,
"sharpe" : 2.1142426200536755 ,
"sortino" : 4.019960340111955 ,
"volatility" : 0.17060276779841885
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 0.0 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0 ,
"max_drawdown_rel" : 5.263023585843841e-16 ,
"ratio_basis" : "native"
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.06675521397166517 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.07910540917093023 ,
"sharpe" : 2.1149665518057725 ,
"sortino" : 4.02133680320316 ,
"volatility" : 0.17066118340286904
},
"raptorbt" : {
"total_return" : 0.06675521397166521 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.07910540917093027 ,
"sharpe" : 0.9692748979846307 ,
"sortino" : 1.3742016523326603 ,
"volatility" : null
}
},
"note" : ""
}
},
"status" : "exact" ,
"paired_with" : [
"sma_cross"
],
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.0033861920000077816 ,
0.005095889999992664 ,
0.0033050610000060487 ,
0.0033925749999923482 ,
0.0033702409999989413 ,
0.00511029300000132 ,
0.0033675650000049018
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.0033050610000060487 ,
"median_s" : 0.0033861920000077816 ,
"max_s" : 0.00511029300000132 ,
"iqr_s" : 0.0017283249999877626 ,
"iqr_over_median" : 0.5104037219341936
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.685716162999995 ,
0.7026406140000034 ,
0.8420005899999978 ,
0.8500549900000038 ,
0.6868578610000071 ,
0.7315806839999937 ,
0.8522979340000063
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.685716162999995 ,
"median_s" : 0.7315806839999937 ,
"max_s" : 0.8522979340000063 ,
"iqr_s" : 0.16319712899999672 ,
"iqr_over_median" : 0.22307468276458503
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.010763509000000226 ,
0.008259987000002411 ,
0.00783488200001159 ,
0.007808417999996209 ,
0.010623882000004414 ,
0.007928362000001243 ,
0.007854914999995799
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.007808417999996209 ,
"median_s" : 0.007928362000001243 ,
"max_s" : 0.010763509000000226 ,
"iqr_s" : 0.002788999999992825 ,
"iqr_over_median" : 0.3517750576969603
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 203.80081454122208 ,
"min" : 137.88378752308526 ,
"max" : 254.7609832310075
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 2.3325206788835153 ,
"min" : 1.5514495939859407 ,
"max" : 3.178646987523298
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9997853104005853 ,
2026-08-21 10:05:52 +00:00
"raptorbt" : null
}
},
{
"workload" : "sma_cross" ,
"title" : "SMA 30/150 crossover, long-only, no cost" ,
"bars" : 1000000 ,
"data_digest" : "0ef03e7a3c4d011c" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 4.220055416226387e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.20294254717538118 ,
"final_equity" : 120294.25471753812 ,
"round_trips" : 4534 ,
"fills" : 9069 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : 0.20294254717537696 ,
"final_equity" : 120294.2547175377 ,
"round_trips" : 4534 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 0.0 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.20294254717538118 ,
"final_equity" : 120294.25471753812 ,
"round_trips" : 4534 ,
"fills" : 9069 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : 0.20294254717538115 ,
"final_equity" : 120294.25471753812 ,
"round_trips" : 4534 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
}
},
"status" : "exact" ,
"paired_with" : [
"sma_cross_metrics"
],
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.037335460000008425 ,
0.037978995000003124 ,
0.03791546700000481 ,
0.039023332999988725 ,
0.038331946999988986 ,
0.038091042000019115 ,
0.03732786800000554
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.03732786800000554 ,
"median_s" : 0.037978995000003124 ,
"max_s" : 0.039023332999988725 ,
"iqr_s" : 0.0009964869999805614 ,
"iqr_over_median" : 0.026237845419039642
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
2.0507589489999987 ,
2.315858748000011 ,
2.0414709830000106 ,
2.328412334999996 ,
2.037601520999999 ,
2.2872202920000007 ,
2.022937194000008
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 2.022937194000008 ,
"median_s" : 2.0507589489999987 ,
"max_s" : 2.328412334999996 ,
"iqr_s" : 0.27825722700001165 ,
"iqr_over_median" : 0.13568499951478785
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.07901990999999953 ,
0.08475653599998623 ,
0.0793328129999793 ,
0.08569068500000299 ,
0.07950533600001108 ,
0.08441346500001146 ,
0.08000269400000093
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.07901990999999953 ,
"median_s" : 0.08000269400000093 ,
"max_s" : 0.08569068500000299 ,
"iqr_s" : 0.00542372300000693 ,
"iqr_over_median" : 0.0677942545285646
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 54.92791434736671 ,
"min" : 53.1567447122001 ,
"max" : 60.977357299734244
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 2.143243059046101 ,
"min" : 2.074127254742211 ,
"max" : 2.2316687421554797
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 1.0010434703443873 ,
"raptorbt" : 1.0127087280209428
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "sma_cross_metrics" ,
"title" : "SMA 30/150 crossover, with a performance summary" ,
"bars" : 1000000 ,
"data_digest" : "0ef03e7a3c4d011c" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 4.220055416226387e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0 ,
"max_drawdown_rel" : 1.464735645642113e-15 ,
"advisory_ratio_rel" : {
"sharpe" : 0.0003424071321271261 ,
"sortino" : 0.00034240713212705575 ,
"volatility" : 0.0003424071321024856
}
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.20294254717538118 ,
"final_equity" : 120294.25471753812 ,
"round_trips" : 4534 ,
"fills" : 9069 ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.15159363779099633 ,
"sharpe" : 0.6860158229410881 ,
"sortino" : 1.3522858253366064 ,
"volatility" : 0.16128875607357201
},
"vectorbt" : {
"total_return" : 0.20294254717537696 ,
"final_equity" : 120294.2547175377 ,
"round_trips" : 4534 ,
"fills" : null ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.1515936377909961 ,
"sharpe" : 0.6857810066333395 ,
"sortino" : 1.351822951516634 ,
"volatility" : 0.16123354855661204
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 0.0 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0 ,
"max_drawdown_rel" : 0.0 ,
"ratio_basis" : "native"
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.20294254717538118 ,
"final_equity" : 120294.25471753812 ,
"round_trips" : 4534 ,
"fills" : 9069 ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.15159363779099633 ,
"sharpe" : 0.6860158229410881 ,
"sortino" : 1.3522858253366064 ,
"volatility" : 0.16128875607357201
},
"raptorbt" : {
"total_return" : 0.20294254717538115 ,
"final_equity" : 120294.25471753812 ,
"round_trips" : 4534 ,
"fills" : null ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.15159363779099633 ,
"sharpe" : 0.3005175738027932 ,
"sortino" : 0.42543548791233987 ,
"volatility" : null
}
},
"note" : ""
}
},
"status" : "exact" ,
"paired_with" : [
"sma_cross"
],
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.03776869099999658 ,
0.036214618000002474 ,
0.03805361700000276 ,
0.03835612099999253 ,
0.03794206099999542 ,
0.037969554000000016 ,
0.03712031999998544
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.036214618000002474 ,
"median_s" : 0.03794206099999542 ,
"max_s" : 0.03835612099999253 ,
"iqr_s" : 0.0009332970000173191 ,
"iqr_over_median" : 0.02459795212541121
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
8.470414614000006 ,
8.453709758999992 ,
8.483099930999998 ,
8.443229481999992 ,
8.505207001000002 ,
8.376691564999987 ,
8.546466886000019
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 8.376691564999987 ,
"median_s" : 8.470414614000006 ,
"max_s" : 8.546466886000019 ,
"iqr_s" : 0.061977519000009806 ,
"iqr_over_median" : 0.007316940412523915
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.087959761999997 ,
0.08789736800000014 ,
0.09063822400000277 ,
0.08818575500001202 ,
0.0897488300000191 ,
0.08837810500000387 ,
0.09013085699999124
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.08789736800000014 ,
"median_s" : 0.08837810500000387 ,
"max_s" : 0.09063822400000277 ,
"iqr_s" : 0.0021710949999942386 ,
"iqr_over_median" : 0.02456598271703318
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 224.16302058554567 ,
"min" : 220.127303331889 ,
"max" : 233.4336305576774
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 2.36541789335139 ,
"min" : 2.299131212982387 ,
"max" : 2.428073276308679
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9998512244657815 ,
"raptorbt" : 0.9952822002361194
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "sma_cross" ,
"title" : "SMA 30/150 crossover, long-only, no cost" ,
"bars" : 10000000 ,
"data_digest" : "f4e6a3a8823f3768" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.2369127944111823e-14 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.3001352494374474 ,
"final_equity" : 130013.52494374473 ,
"round_trips" : 46127 ,
"fills" : 92254 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : 0.30013524943743497 ,
"final_equity" : 130013.5249437435 ,
"round_trips" : 46127 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.4551915228366853e-16 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.3001352494374474 ,
"final_equity" : 130013.52494374473 ,
"round_trips" : 46127 ,
"fills" : 92254 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : 0.3001352494374475 ,
"final_equity" : 130013.52494374475 ,
"round_trips" : 46127 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
}
},
"status" : "exact" ,
"paired_with" : [
"sma_cross_metrics"
],
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.3235047160000022 ,
0.3234485200000563 ,
0.323429739000062 ,
0.32509285100002216 ,
0.32039177000001473 ,
0.3194278570000506 ,
0.3223829769999611
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.3194278570000506 ,
"median_s" : 0.323429739000062 ,
"max_s" : 0.32509285100002216 ,
"iqr_s" : 0.00311294599998746 ,
"iqr_over_median" : 0.00962479829347685
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
25.683530236000024 ,
26.08707517099998 ,
25.33292799000003 ,
25.588718906000054 ,
25.306060289000015 ,
25.158651128999963 ,
25.056078312999944
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 25.056078312999944 ,
"median_s" : 25.33292799000003 ,
"max_s" : 26.08707517099998 ,
"iqr_s" : 0.5248791070000607 ,
"iqr_over_median" : 0.020719243634500225
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.9073103939999783 ,
0.9050338699999543 ,
0.9025704289999794 ,
0.9056177639999987 ,
0.8986746360000097 ,
0.8985271369999737 ,
0.8979460529999415
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.8979460529999415 ,
"median_s" : 0.9025704289999794 ,
"max_s" : 0.9073103939999783 ,
"iqr_s" : 0.0070906270000250515 ,
"iqr_over_median" : 0.007856037348665688
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 78.76160634604882 ,
"min" : 77.72146825544999 ,
"max" : 80.65294338337192
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 2.798077017015866 ,
"min" : 2.785339540431286 ,
"max" : 2.8129266665675665
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 1.089614874869514 ,
"vectorbt" : 0.9999268177353846 ,
"raptorbt" : 1.0038506884310427
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "sma_cross_metrics" ,
"title" : "SMA 30/150 crossover, with a performance summary" ,
"bars" : 10000000 ,
"data_digest" : "f4e6a3a8823f3768" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.2369127944111823e-14 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0 ,
"max_drawdown_rel" : 1.1043826616631323e-14 ,
"advisory_ratio_rel" : {
"sharpe" : 0.0003424071321157821 ,
"sortino" : 0.0003424071321161821 ,
"volatility" : 0.0003424071321037301
}
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.3001352494374474 ,
"final_equity" : 130013.52494374473 ,
"round_trips" : 46127 ,
"fills" : 92254 ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.6232787775126734 ,
"sharpe" : 0.16657583326366043 ,
"sortino" : 0.3242480879539277 ,
"volatility" : 0.15596640368660572
},
"vectorbt" : {
"total_return" : 0.30013524943743497 ,
"final_equity" : 130013.5249437435 ,
"round_trips" : 46127 ,
"fills" : null ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.6232787775126802 ,
"sharpe" : 0.16651881603341911 ,
"sortino" : 0.324137101098728 ,
"volatility" : 0.15591301795726933
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.4551915228366853e-16 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0 ,
"max_drawdown_rel" : 0.0 ,
"ratio_basis" : "native"
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.3001352494374474 ,
"final_equity" : 130013.52494374473 ,
"round_trips" : 46127 ,
"fills" : 92254 ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.6232787775126734 ,
"sharpe" : 0.16657583326366043 ,
"sortino" : 0.3242480879539277 ,
"volatility" : 0.15596640368660572
},
"raptorbt" : {
"total_return" : 0.3001352494374475 ,
"final_equity" : 130013.52494374475 ,
"round_trips" : 46127 ,
"fills" : null ,
"total_fees" : 0.0 ,
"max_drawdown" : -0.6232787775126734 ,
"sharpe" : 0.07064081213793068 ,
"sortino" : 0.09993197026250207 ,
"volatility" : null
}
},
"note" : ""
}
},
"status" : "exact" ,
"paired_with" : [
"sma_cross"
],
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.3217440409999881 ,
0.3247571649999941 ,
0.32139380200010237 ,
0.33266460599998027 ,
0.31832793700004913 ,
0.31972129700000096 ,
0.3228766590000305
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.31832793700004913 ,
"median_s" : 0.3217440409999881 ,
"max_s" : 0.33266460599998027 ,
"iqr_s" : 0.0050358679999931155 ,
"iqr_over_median" : 0.015651783275741543
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
99.000129775 ,
99.91466347699998 ,
99.57081783199999 ,
98.77557968300005 ,
98.44118702799994 ,
98.90509020000002 ,
98.50235578499996
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 98.44118702799994 ,
"median_s" : 98.90509020000002 ,
"max_s" : 99.91466347699998 ,
"iqr_s" : 1.0684620470000254 ,
"iqr_over_median" : 0.010802902508247501
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.9035892349999699 ,
0.905373528000041 ,
0.904816925000091 ,
0.8981749869999476 ,
0.8985160949999909 ,
0.898877296999899 ,
0.8994789800001399
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.8981749869999476 ,
"median_s" : 0.8994789800001399 ,
"max_s" : 0.905373528000041 ,
"iqr_s" : 0.006300830000100177 ,
"iqr_over_median" : 0.00700497748162964
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 307.698409789674 ,
"min" : 296.9224194623395 ,
"max" : 309.80939026312734
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 2.8084101641528254 ,
"min" : 2.69994153510879 ,
"max" : 2.822611497651405
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 1.0922024449656378 ,
"vectorbt" : 0.9998704046935736 ,
"raptorbt" : 0.9986008418150869
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "ema_rsi_fees" ,
"title" : "EMA 12/26 crossover + RSI(14) filter, 5 bps taker fee" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.3096723705530167e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 4.7748471843078734e-17
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.01570110342278974 ,
"final_equity" : 98429.88965772103 ,
"round_trips" : 3176 ,
"fills" : 6352 ,
"total_fees" : 1542.3890014306103
},
"vectorbt" : {
"total_return" : -0.01570110342278846 ,
"final_equity" : 98429.88965772116 ,
"round_trips" : 3176 ,
"fills" : null ,
"total_fees" : 1542.3890014306055
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "Two blockers, either one sufficient. Sizing: raptorbt has no fixed-quantity mode. `position_sizes` is a fraction of equity (measured: 0.5 buys exactly half the equity of the bar before the entry), `lot_size` rounds a computed size down to a multiple, and `alloted_capital` fixes the notional, not the quantity. Reproducing `units=5` would mean feeding a fraction derived from an equity curve that does not exist until the run is over. Indicator: `raptorbt.ema` seeds on a simple mean of the first `period` bars and emits from bar `period-1`, while manifoldbt seeds on the first observation and emits from bar 0 (measured: 11 leading NaN for span 12, and ema[11] equal to sma(12)[11] to the last bit). The two are the same recursion with a different warmup, so the signal differs early and the round-trip count with it. Its `sma` and `rsi` do match, which is why the other three workloads run."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.0048959789999116765 ,
0.004888546000074712 ,
0.004972762999841507 ,
0.004702697000084299 ,
0.015825846000097954 ,
0.0054333839998435 ,
0.005020231000116837
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.004702697000084299 ,
"median_s" : 0.004972762999841507 ,
"max_s" : 0.015825846000097954 ,
"iqr_s" : 0.000544837999768788 ,
"iqr_over_median" : 0.1095644412947396
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.18151143299996875 ,
0.18488166700012698 ,
0.18811562699988826 ,
0.1911986049999541 ,
0.18417833200010136 ,
0.18622987999992802 ,
0.18950436599993736
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.18151143299996875 ,
"median_s" : 0.18622987999992802 ,
"max_s" : 0.1911986049999541 ,
"iqr_s" : 0.0053260339998359996 ,
"iqr_over_median" : 0.028599245190074
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 37.748136688436645 ,
"min" : 11.63781904606941 ,
"max" : 40.65722392842378
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 1.0033547971859902
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "ema_rsi_fees" ,
"title" : "EMA 12/26 crossover + RSI(14) filter, 5 bps taker fee" ,
"bars" : 1000000 ,
"data_digest" : "0ef03e7a3c4d011c" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 8.294591680169105e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 2.1100277081131935e-15
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.1532708157041739 ,
"final_equity" : 84672.91842958261 ,
"round_trips" : 31389 ,
"fills" : 62779 ,
"total_fees" : 15206.83039822937
},
"vectorbt" : {
"total_return" : -0.15327081570418216 ,
"final_equity" : 84672.91842958178 ,
"round_trips" : 31389 ,
"fills" : null ,
"total_fees" : 15206.830398229158
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "Two blockers, either one sufficient. Sizing: raptorbt has no fixed-quantity mode. `position_sizes` is a fraction of equity (measured: 0.5 buys exactly half the equity of the bar before the entry), `lot_size` rounds a computed size down to a multiple, and `alloted_capital` fixes the notional, not the quantity. Reproducing `units=5` would mean feeding a fraction derived from an equity curve that does not exist until the run is over. Indicator: `raptorbt.ema` seeds on a simple mean of the first `period` bars and emits from bar `period-1`, while manifoldbt seeds on the first observation and emits from bar 0 (measured: 11 leading NaN for span 12, and ema[11] equal to sma(12)[11] to the last bit). The two are the same recursion with a different warmup, so the signal differs early and the round-trip count with it. Its `sma` and `rsi` do match, which is why the other three workloads run."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.05473372300002666 ,
0.054536822000045504 ,
0.05356822899989311 ,
0.054051924000077634 ,
0.052198359999920285 ,
0.05121749200020531 ,
0.051620961000026
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.05121749200020531 ,
"median_s" : 0.05356822899989311 ,
"max_s" : 0.05473372300002666 ,
"iqr_s" : 0.002915861000019504 ,
"iqr_over_median" : 0.05443265634235028
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
2.2554828490001455 ,
2.32160071699991 ,
2.0455224890001773 ,
2.315093546000071 ,
2.042998187999956 ,
2.3009759660001237 ,
2.0521571520000634
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 2.042998187999956 ,
"median_s" : 2.2554828490001455 ,
"max_s" : 2.32160071699991 ,
"iqr_s" : 0.2695710569998937 ,
"iqr_over_median" : 0.11951811432279098
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 41.2082848630459 ,
"min" : 38.18536709519105 ,
"max" : 44.92558842965017
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9997501663463275
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "sma_cross_costs" ,
"title" : "SMA 30/150 with a 5 bps fee and 2 bps of slippage" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 8.731149137020111e-16 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 1.4210854715202004e-18
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.002745042655159957 ,
"final_equity" : 99725.49573448401 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 218.42799507745576
},
"vectorbt" : {
"total_return" : -0.0027450426551607985 ,
"final_equity" : 99725.49573448392 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 218.4279950774559
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "Same blocker as the other fixed-quantity workload: raptorbt has no units sizing, and a cost model on top of a fraction of equity compares policy rather than arithmetic. See `ema_rsi_fees` for the measurements behind that."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.0039813280000089435 ,
0.003687388000116698 ,
0.003578004000019064 ,
0.0037989439999819297 ,
0.00668571799997153 ,
0.003655769000033615 ,
0.0035326879999502125
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.0035326879999502125 ,
"median_s" : 0.003687388000116698 ,
"max_s" : 0.00668571799997153 ,
"iqr_s" : 0.00040332399998987967 ,
"iqr_over_median" : 0.10937932215896871
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.17644552800015845 ,
0.3230557110000518 ,
0.18195427399996333 ,
0.17985060799992425 ,
0.177283055000089 ,
0.17966308800009756 ,
0.18122035099986533
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.17644552800015845 ,
"median_s" : 0.17985060799992425 ,
"max_s" : 0.3230557110000518 ,
"iqr_s" : 0.004671218999874327 ,
"iqr_over_median" : 0.025972772913151868
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 49.14508766786018 ,
"min" : 26.516681529320252 ,
"max" : 87.61098940220768
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9789401988405265
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "sma_cross_costs" ,
"title" : "SMA 30/150 with a 5 bps fee and 2 bps of slippage" ,
"bars" : 1000000 ,
"data_digest" : "0ef03e7a3c4d011c" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.6007106751203538e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 6.821210263296961e-17
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.02986364258908214 ,
"final_equity" : 97013.63574109178 ,
"round_trips" : 4534 ,
"fills" : 9069 ,
"total_fees" : 2195.9426086254202
},
"vectorbt" : {
"total_return" : -0.02986364258908383 ,
"final_equity" : 97013.63574109162 ,
"round_trips" : 4534 ,
"fills" : null ,
"total_fees" : 2195.9426086254134
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "Same blocker as the other fixed-quantity workload: raptorbt has no units sizing, and a cost model on top of a fraction of equity compares policy rather than arithmetic. See `ema_rsi_fees` for the measurements behind that."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.0384609120001187 ,
0.035915725999984716 ,
0.03618134600014855 ,
0.037242202999777874 ,
0.036020176999954856 ,
0.036429581999982474 ,
0.03634975299996768
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.035915725999984716 ,
"median_s" : 0.03634975299996768 ,
"max_s" : 0.0384609120001187 ,
"iqr_s" : 0.0012220259998230176 ,
"iqr_over_median" : 0.03361855030553039
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
2.0826293519999126 ,
2.203784844999973 ,
2.0856359940000857 ,
2.1970288970001093 ,
2.0753685449999466 ,
2.193081161000009 ,
2.074696724999967
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 2.074696724999967 ,
"median_s" : 2.0856359940000857 ,
"max_s" : 2.203784844999973 ,
"iqr_s" : 0.12166035200016267 ,
"iqr_over_median" : 0.0583324953875713
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 57.64395813222434 ,
"min" : 54.149245134735374 ,
"max" : 61.35988577819395
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9998507587618723
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "sma_cross_costs" ,
"title" : "SMA 30/150 with a 5 bps fee and 2 bps of slippage" ,
"bars" : 10000000 ,
"data_digest" : "f4e6a3a8823f3768" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 8.149072527885436e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 3.1650415621697903e-15
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.30242917768507427 ,
"final_equity" : 69757.08223149258 ,
"round_trips" : 46127 ,
"fills" : 92254 ,
"total_fees" : 21749.94829446186
},
"vectorbt" : {
"total_return" : -0.30242917768506616 ,
"final_equity" : 69757.08223149339 ,
"round_trips" : 46127 ,
"fills" : null ,
"total_fees" : 21749.948294462178
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "Same blocker as the other fixed-quantity workload: raptorbt has no units sizing, and a cost model on top of a fraction of equity compares policy rather than arithmetic. See `ema_rsi_fees` for the measurements behind that."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.3229244540000309 ,
0.31889919699983693 ,
0.3229150720001144 ,
0.31798327299998164 ,
0.3189351019998412 ,
0.3180735190001087 ,
0.3188503060000585
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.31798327299998164 ,
"median_s" : 0.31889919699983693 ,
"max_s" : 0.3229244540000309 ,
"iqr_s" : 0.004841553000005661 ,
"iqr_over_median" : 0.015182079621254538
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
25.367273596000132 ,
24.91851582000004 ,
24.80163867500005 ,
25.764870866000138 ,
24.523001781999938 ,
25.067886242999975 ,
24.85969646800004
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 24.523001781999938 ,
"median_s" : 24.91851582000004 ,
"max_s" : 25.764870866000138 ,
"iqr_s" : 0.5656349210000826 ,
"iqr_over_median" : 0.022699382462662326
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 78.13916138525987 ,
"min" : 76.80545389653186 ,
"max" : 81.02586850850368
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 1.081042000821003 ,
"vectorbt" : 0.9998694633565076
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "multi_asset" ,
"title" : "Five assets in one book, SMA 30/150, 5 bps fee" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.4551915228366853e-16 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 5.115907697472722e-18
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.004784214364567441 ,
"final_equity" : 99521.57856354325 ,
"round_trips" : 2350 ,
"fills" : 4700 ,
"total_fees" : 464.09434549765643
},
"vectorbt" : {
"total_return" : -0.004784214364567548 ,
"final_equity" : 99521.57856354324 ,
"round_trips" : 2350 ,
"fills" : null ,
"total_fees" : 464.09434549765695
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "No multi-instrument portfolio on the entry point this harness drives: `run_single_backtest` is one instrument, and `run_multi_backtest` broadcasts over strategies rather than over assets. 0.9.0 does add `run_portfolio_backtest`, but its allocation model is a different one and would need its own parity work before any timing from it could be published. The units blocker applies here too."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.02227130100004615 ,
0.012896017000002757 ,
0.013307124999982989 ,
0.015623138999899311 ,
0.018572385999959806 ,
0.01311688900000263 ,
0.013085992000014812
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.012896017000002757 ,
"median_s" : 0.013307124999982989 ,
"max_s" : 0.02227130100004615 ,
"iqr_s" : 0.005486393999944994 ,
"iqr_over_median" : 0.41228995744400143
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.42891496700008247 ,
0.20736030700004449 ,
0.20771924700011368 ,
0.21033216599994375 ,
0.2139387090001037 ,
0.21400341999992634 ,
0.36465912399989975
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.20736030700004449 ,
"median_s" : 0.2139387090001037 ,
"max_s" : 0.42891496700008247 ,
"iqr_s" : 0.15693987699978607 ,
"iqr_over_median" : 0.7335740116096054
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 16.079407075843662 ,
"min" : 11.519182780315179 ,
"max" : 27.866372224550265
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9908345422507613
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "multi_asset" ,
"title" : "Five assets in one book, SMA 30/150, 5 bps fee" ,
"bars" : 1000000 ,
"data_digest" : "0ef03e7a3c4d011c" ,
"engines" : [
"manifoldbt" ,
"vectorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.0186340659856795e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 2.7284841053187848e-17
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.0447197098443024 ,
"final_equity" : 95528.02901556976 ,
"round_trips" : 22902 ,
"fills" : 45806 ,
"total_fees" : 4561.765315438204
},
"vectorbt" : {
"total_return" : -0.044719709844301396 ,
"final_equity" : 95528.02901556986 ,
"round_trips" : 22902 ,
"fills" : null ,
"total_fees" : 4561.7653154382015
}
},
"note" : ""
}
},
"status" : "exact" ,
"unsupported" : {
"raptorbt" : "No multi-instrument portfolio on the entry point this harness drives: `run_single_backtest` is one instrument, and `run_multi_backtest` broadcasts over strategies rather than over assets. 0.9.0 does add `run_portfolio_backtest`, but its allocation model is a different one and would need its own parity work before any timing from it could be published. The units blocker applies here too."
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.14341802100011591 ,
0.14587604200005444 ,
0.1439747819999866 ,
0.14483486800008905 ,
0.16363966400012941 ,
0.14317125000002306 ,
0.14649057899987383
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.14317125000002306 ,
"median_s" : 0.14483486800008905 ,
"max_s" : 0.16363966400012941 ,
"iqr_s" : 0.003072557999757919 ,
"iqr_over_median" : 0.021214214796370926
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
2.5565067089999047 ,
2.286807359000022 ,
2.5437298639999426 ,
2.288696568999967 ,
2.5330255450001005 ,
2.2876889350000056 ,
2.5355352779999976
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 2.286807359000022 ,
"median_s" : 2.5330255450001005 ,
"max_s" : 2.5565067089999047 ,
"iqr_s" : 0.256040928999937 ,
"iqr_over_median" : 0.10108106864746477
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 15.978689401675526 ,
"min" : 15.479288352719285 ,
"max" : 17.8255611893978
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 1.2507208539331298 ,
"vectorbt" : 0.9992960153911904
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "bracket_sl_tp" ,
"title" : "SMA 10/50 entry with a 15 bps stop / 30 bps target bracket" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "documented" ,
"expected" : "documented" ,
"publishable" : false ,
"diffs" : {
"final_equity_vs_capital" : 0.01145740341532248 ,
"round_trips_delta" : 94 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.05756525685928504 ,
"final_equity" : 94243.4743140715 ,
"round_trips" : 2309 ,
"fills" : 4618 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : -0.06902266027460748 ,
"final_equity" : 93097.73397253925 ,
"round_trips" : 2215 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : "Re-entry on the exit bar. When a bracket fires intrabar and the entry condition still holds at that bar's close, manifoldbt books two orders on that bar (the stop or target exit, then a fresh entry at the close); vectorbt processes one order per bar and re-enters on the next bar instead. Neither is wrong, and on controlled bars the bracket fills themselves match exactly (see the cross-engine parity suite shipped with the library). The harness counts the affected round-trips so the size of the divergence is measured, not asserted."
},
"raptorbt" : {
"status" : "documented" ,
"expected" : "documented" ,
"publishable" : false ,
"diffs" : {
"final_equity_vs_capital" : 0.009248235144781793 ,
"round_trips_delta" : 925 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.05756525685928504 ,
"final_equity" : 94243.4743140715 ,
"round_trips" : 2309 ,
"fills" : 4618 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : -0.06681349200406679 ,
"final_equity" : 93318.65079959332 ,
"round_trips" : 1384 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : "Same fork in the road, taken further: raptorbt does not re-arm at all. Once a bracket closes a position, the entry level being still true is not enough to open another one; it waits for the level to go false and true again. So on the same bars the three engines book a different number of round-trips from the same signal, manifoldbt re-entering on the exit bar, vectorbt on the next bar, raptorbt not until the next crossing. The count of affected round-trips is measured rather than asserted, and it is the same population for both challengers."
}
},
"status" : "documented" ,
"divergence_scale" : {
"raptorbt" : {
"round_trips" : 1384 ,
"final_equity" : 93318.65079959332
},
"manifoldbt" : {
"reentries_on_exit_bar" : 925 ,
"round_trips" : 2309 ,
"share_of_round_trips" : 0.40060632308358596 ,
"sl_exits" : 632 ,
"tp_exits" : 388
}
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.010991447999913362 ,
0.010809377999976277 ,
0.010707467999964138 ,
0.010633620000135124 ,
0.013683024999863846 ,
0.011050597999883394 ,
0.010710762999906365
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.010633620000135124 ,
"median_s" : 0.010809377999976277 ,
"max_s" : 0.013683024999863846 ,
"iqr_s" : 0.0003431299999192561 ,
"iqr_over_median" : 0.0317437321481411
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.18317504199990253 ,
0.18067231800000627 ,
0.17392761099995369 ,
0.33920341400016696 ,
0.18228420800005551 ,
0.17970991099991807 ,
0.17375997699991785
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.17375997699991785 ,
"median_s" : 0.18067231800000627 ,
"max_s" : 0.33920341400016696 ,
"iqr_s" : 0.009247430999948847 ,
"iqr_over_median" : 0.05118344139442837
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.007785780999938652 ,
0.007744213000023592 ,
0.007711743000072602 ,
0.007797944000003554 ,
0.007788495999875522 ,
0.007808533000115858 ,
0.007783599000049435
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.007711743000072602 ,
"median_s" : 0.007785780999938652 ,
"max_s" : 0.007808533000115858 ,
"iqr_s" : 5.373099997996178e-05 ,
"iqr_over_median" : 0.0069011702204807915
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 16.262460276069618 ,
"min" : 13.321923185981852 ,
"max" : 31.899147608797062
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 0.7164346551707774 ,
"min" : 0.5692086362447647 ,
"max" : 0.733329195504867
2026-08-21 10:05:52 +00:00
}
},
2026-08-23 14:01:18 +00:00
"noisy" : false ,
2026-08-21 10:05:52 +00:00
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-23 14:01:18 +00:00
"vectorbt" : 0.9980658185206216 ,
2026-08-21 10:05:52 +00:00
"raptorbt" : null
}
},
{
"workload" : "bracket_sl_tp" ,
"title" : "SMA 10/50 entry with a 15 bps stop / 30 bps target bracket" ,
"bars" : 1000000 ,
"data_digest" : "0ef03e7a3c4d011c" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "documented" ,
"expected" : "documented" ,
"publishable" : false ,
"diffs" : {
"final_equity_vs_capital" : 0.010543837599986582 ,
"round_trips_delta" : 1092 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.45070441471402267 ,
"final_equity" : 54929.558528597736 ,
"round_trips" : 23075 ,
"fills" : 46151 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : -0.46124825231400923 ,
"final_equity" : 53875.17476859908 ,
"round_trips" : 21983 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : "Re-entry on the exit bar. When a bracket fires intrabar and the entry condition still holds at that bar's close, manifoldbt books two orders on that bar (the stop or target exit, then a fresh entry at the close); vectorbt processes one order per bar and re-enters on the next bar instead. Neither is wrong, and on controlled bars the bracket fills themselves match exactly (see the cross-engine parity suite shipped with the library). The harness counts the affected round-trips so the size of the divergence is measured, not asserted."
},
"raptorbt" : {
"status" : "documented" ,
"expected" : "documented" ,
"publishable" : false ,
"diffs" : {
"final_equity_vs_capital" : 0.10072796246195154 ,
"round_trips_delta" : 9330 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.45070441471402267 ,
"final_equity" : 54929.558528597736 ,
"round_trips" : 23075 ,
"fills" : 46151 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : -0.3499764522520711 ,
"final_equity" : 65002.35477479289 ,
"round_trips" : 13745 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : "Same fork in the road, taken further: raptorbt does not re-arm at all. Once a bracket closes a position, the entry level being still true is not enough to open another one; it waits for the level to go false and true again. So on the same bars the three engines book a different number of round-trips from the same signal, manifoldbt re-entering on the exit bar, vectorbt on the next bar, raptorbt not until the next crossing. The count of affected round-trips is measured rather than asserted, and it is the same population for both challengers."
}
},
"status" : "documented" ,
"divergence_scale" : {
"raptorbt" : {
"round_trips" : 13745 ,
"final_equity" : 65002.35477479289
},
"manifoldbt" : {
"reentries_on_exit_bar" : 9330 ,
"round_trips" : 23075 ,
"share_of_round_trips" : 0.40433369447453954 ,
"sl_exits" : 6363 ,
"tp_exits" : 3906
}
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.10495266099997025 ,
0.11684381000009125 ,
0.11480037100000118 ,
0.11554238899998381 ,
0.11500177999982952 ,
0.11438688099997307 ,
0.11622175799993784
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.10495266099997025 ,
"median_s" : 0.11500177999982952 ,
"max_s" : 0.11684381000009125 ,
"iqr_s" : 0.001834876999964763 ,
"iqr_over_median" : 0.015955205214801746
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
2.040712714999927 ,
2.314468017000081 ,
2.066698793000114 ,
2.3341982450001524 ,
2.0710454789998494 ,
2.3247341919998235 ,
2.0481397460000608
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 2.040712714999927 ,
"median_s" : 2.0710454789998494 ,
"max_s" : 2.3341982450001524 ,
"iqr_s" : 0.2765944459997627 ,
"iqr_over_median" : 0.13355305269942014
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.0862263310000344 ,
0.07862739900019733 ,
0.08823097499998767 ,
0.0789900800000396 ,
0.08687320099988938 ,
0.07906726600003822 ,
0.08717225300006248
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.07862739900019733 ,
"median_s" : 0.0862263310000344 ,
"max_s" : 0.08823097499998767 ,
"iqr_s" : 0.008182173000022885 ,
"iqr_over_median" : 0.09489181442753977
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 19.444125528179846 ,
"min" : 17.62268770707423 ,
"max" : 20.32343369866314
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 0.7500510618683733 ,
"min" : 0.6729273805787053 ,
"max" : 0.8215735568634972
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 0.9902856115323238 ,
"vectorbt" : 1.0006580799244513 ,
"raptorbt" : 1.0424009309625302
2026-08-21 10:05:52 +00:00
}
},
{
"workload" : "bracket_sl_tp" ,
"title" : "SMA 10/50 entry with a 15 bps stop / 30 bps target bracket" ,
"bars" : 10000000 ,
"data_digest" : "f4e6a3a8823f3768" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "documented" ,
"expected" : "documented" ,
"publishable" : false ,
"diffs" : {
"final_equity_vs_capital" : 0.0008838890600401106 ,
"round_trips_delta" : 10171 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.9948342253853452 ,
"final_equity" : 516.5774614654839 ,
"round_trips" : 231082 ,
"fills" : 462164 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : -0.9957181144453853 ,
"final_equity" : 428.18855546147284 ,
"round_trips" : 220911 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : "Re-entry on the exit bar. When a bracket fires intrabar and the entry condition still holds at that bar's close, manifoldbt books two orders on that bar (the stop or target exit, then a fresh entry at the close); vectorbt processes one order per bar and re-enters on the next bar instead. Neither is wrong, and on controlled bars the bracket fills themselves match exactly (see the cross-engine parity suite shipped with the library). The harness counts the affected round-trips so the size of the divergence is measured, not asserted."
},
"raptorbt" : {
"status" : "documented" ,
"expected" : "documented" ,
"publishable" : false ,
"diffs" : {
"final_equity_vs_capital" : 0.022352514553554532 ,
"round_trips_delta" : 93295 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : -0.9948342253853452 ,
"final_equity" : 516.5774614654839 ,
"round_trips" : 231082 ,
"fills" : 462164 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : -0.9724817108317907 ,
"final_equity" : 2751.828916820937 ,
"round_trips" : 137787 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : "Same fork in the road, taken further: raptorbt does not re-arm at all. Once a bracket closes a position, the entry level being still true is not enough to open another one; it waits for the level to go false and true again. So on the same bars the three engines book a different number of round-trips from the same signal, manifoldbt re-entering on the exit bar, vectorbt on the next bar, raptorbt not until the next crossing. The count of affected round-trips is measured rather than asserted, and it is the same population for both challengers."
}
},
"status" : "documented" ,
"divergence_scale" : {
"raptorbt" : {
"round_trips" : 137787 ,
"final_equity" : 2751.828916820937
},
"manifoldbt" : {
"reentries_on_exit_bar" : 93295 ,
"round_trips" : 231082 ,
"share_of_round_trips" : 0.4037311430574428 ,
"sl_exits" : 63245 ,
"tp_exits" : 39487
}
},
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
1.0938301109999884 ,
1.0822019249999357 ,
1.0741370199998528 ,
1.0740174619998015 ,
1.0735488580000947 ,
1.0734366080000655 ,
1.0680245089999971
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 1.0680245089999971 ,
"median_s" : 1.0740174619998015 ,
"max_s" : 1.0938301109999884 ,
"iqr_s" : 0.008765316999870265 ,
"iqr_over_median" : 0.008161242540274345
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
25.34885260200008 ,
26.449796845000037 ,
25.433935591999898 ,
25.150011135000113 ,
25.19940975999998 ,
26.0010572220001 ,
25.222897539000087
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 25.150011135000113 ,
"median_s" : 25.34885260200008 ,
"max_s" : 26.449796845000037 ,
"iqr_s" : 0.801647462000119 ,
"iqr_over_median" : 0.031624605444148086
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.8916911960000107 ,
0.8841948920000959 ,
0.8747061929998381 ,
0.8779344900001433 ,
0.8752377180001076 ,
0.8764544499999829 ,
0.8777472740000576
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.8747061929998381 ,
"median_s" : 0.8777472740000576 ,
"max_s" : 0.8916911960000107 ,
"iqr_s" : 0.0089571739999883 ,
"iqr_over_median" : 0.010204730069019516
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 23.61640330016074 ,
"min" : 23.174396414106713 ,
"max" : 24.440722414166476
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 0.8164939070160065 ,
"min" : 0.8143339040674327 ,
"max" : 0.8218418834057486
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 1.022655399306693 ,
"vectorbt" : 0.9999107373437759 ,
"raptorbt" : 1.0003302692690246
2026-08-21 10:05:52 +00:00
}
}
],
"cold_start" : {
"workload" : "sma_cross" ,
"bars" : 20000 ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"samples_s" : {
"manifoldbt" : [
2026-08-23 14:01:18 +00:00
0.46644176499989953 ,
0.4233923770000274 ,
0.4149115669999901
2026-08-21 10:05:52 +00:00
],
"vectorbt" : [
2026-08-23 14:01:18 +00:00
7.282435325000051 ,
7.359608939000054 ,
7.364390715000127
2026-08-21 10:05:52 +00:00
],
"raptorbt" : [
2026-08-23 14:01:18 +00:00
0.40151585800003886 ,
0.39548957599981804 ,
0.3936956680001913
2026-08-21 10:05:52 +00:00
],
"baseline" : [
2026-08-23 14:01:18 +00:00
0.3522295130001112 ,
0.3622796229999494 ,
0.35250136200011184
2026-08-21 10:05:52 +00:00
]
},
"median_s" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 0.4233923770000274 ,
"vectorbt" : 7.359608939000054 ,
"raptorbt" : 0.39548957599981804 ,
"baseline" : 0.35250136200011184
2026-08-21 10:05:52 +00:00
},
"engine_share_s" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 0.07089101499991557 ,
"vectorbt" : 7.0071075769999425 ,
"raptorbt" : 0.042988213999706204
2026-08-21 10:05:52 +00:00
},
"ratio" : {
2026-08-23 14:01:18 +00:00
"vectorbt" : 17.382478615101704 ,
"raptorbt" : 0.9340970633483853
2026-08-21 10:05:52 +00:00
}
},
"memory" : {
"workload" : "sma_cross" ,
"bars" : 2000000 ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"manifoldbt" : {
2026-08-23 14:01:18 +00:00
"before_mb" : 728.94464 ,
"peak_mb" : 728.956928 ,
"added_mb" : 0.012287999999898602 ,
"added_mb_per_million_bars" : 0.006143999999949301 ,
"seconds" : 0.058185798000067734 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "mbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
},
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"before_mb" : 613.777408 ,
"peak_mb" : 862.683136 ,
"added_mb" : 248.90572799999995 ,
"added_mb_per_million_bars" : 124.45286399999998 ,
"seconds" : 4.335076891999961 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "vbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"before_mb" : 330.133504 ,
"peak_mb" : 370.663424 ,
"added_mb" : 40.529920000000004 ,
"added_mb_per_million_bars" : 20.264960000000002 ,
"seconds" : 0.16050234499994076 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "rbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
}
},
"sweeps" : null ,
"sweep_reps" : null
},
"sweeps" : {
"schema_version" : 2 ,
2026-08-23 14:01:18 +00:00
"generated_at" : "2026-08-23T13:44:27.708416+00:00" ,
2026-08-21 10:05:52 +00:00
"environment" : {
"os" : "Linux" ,
"os_release" : "6.17.0-1022-azure" ,
"arch" : "x86_64" ,
"cpu" : "AMD EPYC 7763 64-Core Processor" ,
"logical_cores" : 4 ,
"ram_gb" : 16.8 ,
"python" : "3.12.14" ,
"versions" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : "0.19.0" ,
2026-08-21 10:05:52 +00:00
"vectorbt" : "0.28.4" ,
"raptorbt" : "0.9.0" ,
"numpy" : "2.4.3" ,
"numba" : "0.64.0" ,
"pandas" : "2.3.3"
},
2026-08-23 14:01:18 +00:00
"runner" : "GitHub Actions 1000000210" ,
2026-08-21 10:05:52 +00:00
"ci" : true ,
2026-08-23 14:01:18 +00:00
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32642616670" ,
"commit" : "44f8ed1a91da9826161aa53823e1bb891f39aa5e" ,
2026-08-21 10:05:52 +00:00
"pinned_cores" : null ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
]
},
"reference" : "manifoldbt" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"reps" : 1 ,
"results" : [
{
"workload" : "sma_cross" ,
"title" : "SMA 30/150 crossover, long-only, no cost" ,
"bars" : 100000 ,
"data_digest" : "b7c2ad8cea687ce0" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 1.8917489796876906e-15 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.06675521397166517 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 0.0
},
"vectorbt" : {
"total_return" : 0.06675521397166725 ,
"final_equity" : 106675.52139716671 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
},
"raptorbt" : {
"status" : "exact" ,
"expected" : "exact" ,
"publishable" : true ,
"diffs" : {
"final_equity_vs_capital" : 0.0 ,
"round_trips_delta" : 0 ,
"total_fees_vs_capital" : 0.0
},
"metrics" : {
"manifoldbt" : {
"total_return" : 0.06675521397166517 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : 900 ,
"total_fees" : 0.0
},
"raptorbt" : {
"total_return" : 0.06675521397166521 ,
"final_equity" : 106675.52139716652 ,
"round_trips" : 450 ,
"fills" : null ,
"total_fees" : 0.0
}
},
"note" : ""
}
},
"status" : "exact" ,
"timings" : {
"manifoldbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.005803446000015811
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.005803446000015811 ,
"median_s" : 0.005803446000015811 ,
"max_s" : 0.005803446000015811 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
},
"vectorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.1942569980000144
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.1942569980000144 ,
"median_s" : 0.1942569980000144 ,
"max_s" : 0.1942569980000144 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
},
"raptorbt" : {
"samples_s" : [
2026-08-23 14:01:18 +00:00
0.01128670600002124
2026-08-21 10:05:52 +00:00
],
2026-08-23 14:01:18 +00:00
"min_s" : 0.01128670600002124 ,
"median_s" : 0.01128670600002124 ,
"max_s" : 0.01128670600002124 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
}
},
"speedup" : {
"vectorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 33.472698462169745 ,
"min" : 33.472698462169745 ,
"max" : 33.472698462169745
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-23 14:01:18 +00:00
"median_of_ratios" : 1.9448282968413062 ,
"min" : 1.9448282968413062 ,
"max" : 1.9448282968413062
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
"vectorbt" : null ,
"raptorbt" : null
}
}
],
"cold_start" : null ,
"memory" : null ,
"sweeps" : [
{
"bars" : 20000 ,
"combos" : 5000 ,
"requested_combos" : 5000 ,
"grid" : {
"fast" : 50 ,
"slow" : 100
},
"data_digest" : "ccec9b97c4ca2b6f" ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"metrics" : false ,
"tier_before" : {
"pro" : true ,
"budget_used" : 0 ,
"budget_limit" : 256
},
"parity" : {
"vectorbt" : {
"status" : "exact" ,
"combos_compared" : 5000 ,
"worst_abs_return_delta" : 1.2663481374630692e-15 ,
"worst_component" : "return" ,
"worst_pair" : [
101 ,
118
]
},
"raptorbt" : {
"status" : "exact" ,
"combos_compared" : 5000 ,
"worst_abs_return_delta" : 1.1102230246251565e-16 ,
"worst_component" : "return" ,
"worst_pair" : [
19 ,
113
]
}
},
"status" : "exact" ,
"timings" : {
"seconds" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 0.45537921499999356 ,
"vectorbt" : 5.481004186999996 ,
"raptorbt" : 6.752745947999983
2026-08-21 10:05:52 +00:00
},
"ratio" : {
2026-08-23 14:01:18 +00:00
"vectorbt" : 12.036131660071648 ,
"raptorbt" : 14.828840943037067
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
"per_combo_us" : 91.07584299999871
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 36.0 ,
"vectorbt" : 2530.7 ,
"raptorbt" : 32.8
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"memory_baseline_mb" : 2177.5 ,
2026-08-21 10:05:52 +00:00
"tier_after" : {
"pro" : true ,
"budget_used" : 0 ,
"budget_limit" : 256
}
},
{
"bars" : 20000 ,
"combos" : 20000 ,
"requested_combos" : 20000 ,
"grid" : {
"fast" : 125 ,
"slow" : 160
},
"data_digest" : "ccec9b97c4ca2b6f" ,
"engines" : [
"manifoldbt" ,
"raptorbt"
],
"metrics" : false ,
"tier_before" : {
"pro" : true ,
"budget_used" : 0 ,
"budget_limit" : 256
},
"out_of_scope" : {
"vectorbt" : {
"status" : "out of scope" ,
"reason" : "vectorbt materialises the simulation per combination (measured: 1.57 MB per combination at 20k bars), so this grid would need tens of gigabytes. Running it would measure the swap file." ,
"parity_scope" : "anchor grid"
}
},
"parity" : {
"raptorbt" : {
"status" : "exact" ,
"combos_compared" : 20000 ,
"worst_abs_return_delta" : 1.1102230246251565e-16 ,
"worst_component" : "return" ,
"worst_pair" : [
11 ,
733
]
},
"vectorbt" : {
"status" : "exact" ,
"combos_compared" : 250 ,
"worst_abs_return_delta" : 2.2707530300536405e-15 ,
"worst_component" : "return" ,
"worst_pair" : [
9 ,
78
],
"checked_at_combos" : 250 ,
"scope" : "anchor grid, not this grid"
}
},
"status" : "exact" ,
"timings" : {
"seconds" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 1.9211620379999772 ,
"raptorbt" : 26.626413162999995 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null
},
"ratio" : {
2026-08-23 14:01:18 +00:00
"raptorbt" : 13.859535341807701
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
"per_combo_us" : 96.05810189999886
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 64.2 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null ,
"raptorbt" : null
},
2026-08-23 14:01:18 +00:00
"memory_baseline_mb" : 612.7 ,
2026-08-21 10:05:52 +00:00
"tier_after" : {
"pro" : true ,
"budget_used" : 0 ,
"budget_limit" : 256
}
},
{
"bars" : 200000 ,
"combos" : 10000 ,
"requested_combos" : 10000 ,
"grid" : {
"fast" : 100 ,
"slow" : 100
},
"data_digest" : "e89a96644ec074e4" ,
"engines" : [
"manifoldbt" ,
"raptorbt"
],
"metrics" : false ,
"tier_before" : {
"pro" : true ,
"budget_used" : 0 ,
"budget_limit" : 256
},
"out_of_scope" : {
"vectorbt" : {
"status" : "out of scope" ,
"reason" : "vectorbt materialises the simulation per combination (measured: 1.57 MB per combination at 20k bars), so this grid would need tens of gigabytes. Running it would measure the swap file." ,
"parity_scope" : "anchor grid"
}
},
"parity" : {
"raptorbt" : {
"status" : "exact" ,
"combos_compared" : 10000 ,
"worst_abs_return_delta" : 1.1796119636642288e-16 ,
"worst_component" : "return" ,
"worst_pair" : [
7 ,
323
]
},
"vectorbt" : {
"status" : "exact" ,
"combos_compared" : 250 ,
"worst_abs_return_delta" : 9.196202827022049e-15 ,
"worst_component" : "return" ,
"worst_pair" : [
11 ,
53
],
"checked_at_combos" : 250 ,
"scope" : "anchor grid, not this grid"
}
},
"status" : "exact" ,
"timings" : {
"seconds" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 9.693729294000036 ,
"raptorbt" : 156.93451893400004 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null
},
"ratio" : {
2026-08-23 14:01:18 +00:00
"raptorbt" : 16.189282181743526
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
"per_combo_us" : 969.3729294000036
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-23 14:01:18 +00:00
"manifoldbt" : 100.8 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null ,
"raptorbt" : null
},
2026-08-23 14:01:18 +00:00
"memory_baseline_mb" : 1729.4 ,
2026-08-21 10:05:52 +00:00
"tier_after" : {
"pro" : true ,
"budget_used" : 0 ,
"budget_limit" : 256
}
}
],
2026-08-23 14:01:18 +00:00
"sweep_reps" : 2
2026-08-21 10:05:52 +00:00
}
}