2026-08-21 10:05:52 +00:00
{
"repo" : "manifoldbt/manifoldbt" ,
2026-08-24 06:24:44 +00:00
"run_id" : "32695243410" ,
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32695243410" ,
"commit" : "7ac9831d9ac92eb40adac40db44063bc6df5d5d9" ,
2026-08-21 10:05:52 +00:00
"run_started_at" : "" ,
"conclusion" : "success" ,
2026-08-24 06:24:44 +00:00
"synced_at" : "2026-08-24T06:24:44.528361+00:00" ,
2026-08-21 10:05:52 +00:00
"backtests" : {
"schema_version" : 2 ,
2026-08-24 06:24:44 +00:00
"generated_at" : "2026-08-24T06:24:32.758792+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-24 06:24:44 +00:00
"runner" : "GitHub Actions 1000000216" ,
2026-08-21 10:05:52 +00:00
"ci" : true ,
2026-08-24 06:24:44 +00:00
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32695243410" ,
"commit" : "7ac9831d9ac92eb40adac40db44063bc6df5d5d9" ,
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-24 06:24:44 +00:00
0.004879696000003264 ,
0.003447373000000198 ,
0.0036409869999971534 ,
0.004861992999991571 ,
0.0052853259999920965 ,
0.0036438519999961727 ,
0.003896827999994912
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.003447373000000198 ,
"median_s" : 0.003896827999994912 ,
"max_s" : 0.0052853259999920965 ,
"iqr_s" : 0.0012387090000061107 ,
"iqr_over_median" : 0.31787623164474493
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.2290419250000042 ,
0.33661285999998825 ,
0.18699241899999208 ,
0.18005145600000105 ,
0.18192289499999958 ,
0.3333397349999956 ,
0.17766156199999728
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.17766156199999728 ,
"median_s" : 0.18699241899999208 ,
"max_s" : 0.33661285999998825 ,
"iqr_s" : 0.15328827899999453 ,
"iqr_over_median" : 0.8197566501345759
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.010461883000004946 ,
0.008257428000007394 ,
0.008563191999996889 ,
0.0076689409999914915 ,
0.009019629999997392 ,
0.007849149999998417 ,
0.007763659000005418
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.0076689409999914915 ,
"median_s" : 0.008257428000007394 ,
"max_s" : 0.010461883000004946 ,
"iqr_s" : 0.0012559709999919733 ,
"iqr_over_median" : 0.1521019620141827
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 46.93774468734343 ,
"min" : 34.420373502083244 ,
"max" : 97.64329534401091
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 2.1439620418972716 ,
"min" : 1.5773245662848108 ,
"max" : 2.3952812764986326
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 1.0088440858113723 ,
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-24 06:24:44 +00:00
0.0033623529999999846 ,
0.004866470999999706 ,
0.003400054000010755 ,
0.003653088999996612 ,
0.0036545920000037313 ,
0.004935180000003925 ,
0.0033094940000069073
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.0033094940000069073 ,
"median_s" : 0.003653088999996612 ,
"max_s" : 0.004935180000003925 ,
"iqr_s" : 0.0015041179999997212 ,
"iqr_over_median" : 0.4117386682889785
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.6847890750000118 ,
0.6920564480000024 ,
0.8288446549999975 ,
0.8422486780000042 ,
0.6867580870000012 ,
0.6948161400000004 ,
0.8570962679999923
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.6847890750000118 ,
"median_s" : 0.6948161400000004 ,
"max_s" : 0.8570962679999923 ,
"iqr_s" : 0.15549059100000306 ,
"iqr_over_median" : 0.22378667110410386
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.010547784999999976 ,
0.008244423000007828 ,
0.007802983000004815 ,
0.007754411000007622 ,
0.010334573999998042 ,
0.008003419999994321 ,
0.007738301000003389
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.007738301000003389 ,
"median_s" : 0.008003419999994321 ,
"max_s" : 0.010547784999999976 ,
"iqr_s" : 0.0025801629999904208 ,
"iqr_over_median" : 0.32238255645614644
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 203.66364715424436 ,
"min" : 140.78840893330087 ,
"max" : 258.98106115261226
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 2.29495855065247 ,
"min" : 1.6217078201783839 ,
"max" : 3.13702487513953
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 1.0025329371078744 ,
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-24 06:24:44 +00:00
0.03841143100000011 ,
0.036458747000011726 ,
0.036668950999995786 ,
0.037002658000005795 ,
0.03646789499998704 ,
0.03680117499999369 ,
0.03495367099998248
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.03495367099998248 ,
"median_s" : 0.036668950999995786 ,
"max_s" : 0.03841143100000011 ,
"iqr_s" : 0.0005439109999940683 ,
"iqr_over_median" : 0.014833012266812074
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
2.0374110679999973 ,
2.2835828099999986 ,
2.027839660000012 ,
2.2872230849999937 ,
2.030088625000019 ,
2.2354447450000237 ,
1.9730962159999876
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 1.9730962159999876 ,
"median_s" : 2.0374110679999973 ,
"max_s" : 2.2872230849999937 ,
"iqr_s" : 0.2557431499999865 ,
"iqr_over_median" : 0.12552358923377893
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.08098256600000298 ,
0.08288103399999613 ,
0.08194120199999588 ,
0.08412889699999937 ,
0.08147144399998751 ,
0.07943145400000162 ,
0.07921447900000089
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.07921447900000089 ,
"median_s" : 0.08147144399998751 ,
"max_s" : 0.08412889699999937 ,
"iqr_s" : 0.003449579999994512 ,
"iqr_over_median" : 0.042340970414063615
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 56.44889820016263 ,
"min" : 53.04179029414425 ,
"max" : 62.63470354588061
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 2.2346208376674124 ,
"min" : 2.1082933879761665 ,
"max" : 2.2735906431366684
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 1.0003572371830447 ,
"raptorbt" : 0.9823681132741224
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-24 06:24:44 +00:00
0.03631814499999564 ,
0.03625134800000751 ,
0.03702843700000358 ,
0.0373943049999923 ,
0.038570789999994304 ,
0.03640098300002137 ,
0.03750649199997724
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.03625134800000751 ,
"median_s" : 0.03702843700000358 ,
"max_s" : 0.038570789999994304 ,
"iqr_s" : 0.0011883469999816043 ,
"iqr_over_median" : 0.03209282098462567
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
8.432080915 ,
8.393682709999993 ,
8.390318123000014 ,
8.389687948000017 ,
8.326686325999987 ,
8.233451341000006 ,
8.397159626000018
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 8.233451341000006 ,
"median_s" : 8.390318123000014 ,
"max_s" : 8.432080915 ,
"iqr_s" : 0.07047330000003171 ,
"iqr_over_median" : 0.008399359710431755
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.09028694199999165 ,
0.09033162099999004 ,
0.09062983300000838 ,
0.08874442200001909 ,
0.08869688000001474 ,
0.08751448200001732 ,
0.08872236500002373
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.08751448200001732 ,
"median_s" : 0.08874442200001909 ,
"max_s" : 0.09062983300000838 ,
"iqr_s" : 0.0016347409999752927 ,
"iqr_over_median" : 0.01842077465978584
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 226.18760985095298 ,
"min" : 215.88062692004019 ,
"max" : 232.17267608246547
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 2.404179084943007 ,
"min" : 2.299586811678678 ,
"max" : 2.491814125090502
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 0.9999476292967955 ,
"raptorbt" : 0.9921166014797974
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-24 06:24:44 +00:00
0.32712228899998763 ,
0.3184815009999511 ,
0.3222751999999218 ,
0.31894982999995136 ,
0.3198513039999398 ,
0.35339144699992175 ,
0.3196001870001055
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.3184815009999511 ,
"median_s" : 0.3198513039999398 ,
"max_s" : 0.35339144699992175 ,
"iqr_s" : 0.00817245900003627 ,
"iqr_over_median" : 0.025550807196452162
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
25.780171853000013 ,
25.930003043 ,
25.081107128999975 ,
25.24383694300002 ,
25.436068393000028 ,
25.278404603000013 ,
25.15486167400013
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 25.081107128999975 ,
"median_s" : 25.278404603000013 ,
"max_s" : 25.930003043 ,
"iqr_s" : 0.6253101789998823 ,
"iqr_over_median" : 0.02473693212924012
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.8930712449999874 ,
0.8927464529999725 ,
0.8925744320000604 ,
0.8923351610000054 ,
0.8886531360000163 ,
0.889498802999924 ,
0.8909506539998802
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.8886531360000163 ,
"median_s" : 0.8923351610000054 ,
"max_s" : 0.8930712449999874 ,
"iqr_s" : 0.003247650000048452 ,
"iqr_over_median" : 0.0036394957208779454
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 78.80897364655267 ,
"min" : 71.53088966243602 ,
"max" : 81.41761126340579
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 2.7783320714558775 ,
"min" : 2.517035458982461 ,
"max" : 2.8031344055996192
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 1.0966491080248568 ,
"vectorbt" : 0.999862546229168 ,
"raptorbt" : 0.9984246551296616
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-24 06:24:44 +00:00
0.3175222980000285 ,
0.3220700449999754 ,
0.317636149000009 ,
0.3447560820000035 ,
0.31888608700000987 ,
0.31764246499994897 ,
0.32260021999991295
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.3175222980000285 ,
"median_s" : 0.31888608700000987 ,
"max_s" : 0.3447560820000035 ,
"iqr_s" : 0.0049640709999039245 ,
"iqr_over_median" : 0.015566909947701076
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
98.31399542399998 ,
99.13031890999997 ,
98.70245542400005 ,
98.74470937399997 ,
98.871236533 ,
98.91308681199996 ,
98.70410395699992
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 98.31399542399998 ,
"median_s" : 98.74470937399997 ,
"max_s" : 99.13031890999997 ,
"iqr_s" : 0.21063138799991066 ,
"iqr_over_median" : 0.0021330903633746587
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.8962431510000215 ,
0.8993948380000347 ,
0.8947939349999388 ,
0.8922237259999974 ,
0.8945235740000044 ,
0.8928620500000761 ,
0.8911285090000547
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.8911285090000547 ,
"median_s" : 0.8945235740000044 ,
"max_s" : 0.8993948380000347 ,
"iqr_s" : 0.004019425000024057 ,
"iqr_over_median" : 0.004493369562135249
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 309.62863409356896 ,
"min" : 286.41904966885824 ,
"max" : 311.3975545178314
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 2.8051508374524246 ,
"min" : 2.5879854557576403 ,
"max" : 2.8226148419974617
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 1.0835370125668535 ,
"vectorbt" : 0.9998988885367519 ,
"raptorbt" : 0.9982160229817851
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-24 06:24:44 +00:00
0.005246539000154371 ,
0.0049023080000552 ,
0.004818834999923638 ,
0.004937057000006462 ,
0.017221704000121463 ,
0.005395639999960622 ,
0.005208167000091635
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.004818834999923638 ,
"median_s" : 0.005208167000091635 ,
"max_s" : 0.017221704000121463 ,
"iqr_s" : 0.000493331999905422 ,
"iqr_over_median" : 0.09472276904652675
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.1847012989999257 ,
0.18548217799980193 ,
0.1910755890000928 ,
0.19474504100003287 ,
0.18500958799995715 ,
0.18662912600007076 ,
0.1880437059999167
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.1847012989999257 ,
"median_s" : 0.18662912600007076 ,
"max_s" : 0.19474504100003287 ,
"iqr_s" : 0.006066001000135657 ,
"iqr_over_median" : 0.032502970624924625
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 36.105544618021696 ,
"min" : 10.74281546115601 ,
"max" : 39.6518222771937
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 0.9956779013213584
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-24 06:24:44 +00:00
0.054873729000064486 ,
0.05125182400001904 ,
0.0565114899998207 ,
0.05653558499989231 ,
0.05610024600014185 ,
0.05288013800009139 ,
0.05169913400004589
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.05125182400001904 ,
"median_s" : 0.054873729000064486 ,
"max_s" : 0.05653558499989231 ,
"iqr_s" : 0.004812355999774809 ,
"iqr_over_median" : 0.08769872373297527
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
2.205457332999913 ,
2.312152610999874 ,
2.049424412999997 ,
2.300816937000036 ,
2.04612201000009 ,
2.2958583270001327 ,
2.059443429999874
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 2.04612201000009 ,
"median_s" : 2.205457332999913 ,
"max_s" : 2.312152610999874 ,
"iqr_s" : 0.251392524000039 ,
"iqr_over_median" : 0.1139865733235878
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 40.19149733741115 ,
"min" : 36.26562338042228 ,
"max" : 45.113567294678425
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 0.9993925670365275
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-24 06:24:44 +00:00
0.003949078999994526 ,
0.003705581000076563 ,
0.003656618999912098 ,
0.0036358500001369976 ,
0.0060230809999666235 ,
0.0036921459998211503 ,
0.0036833799999840267
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.0036358500001369976 ,
"median_s" : 0.0036921459998211503 ,
"max_s" : 0.0060230809999666235 ,
"iqr_s" : 0.00029246000008242845 ,
"iqr_over_median" : 0.07921138549141755
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.17775888999995004 ,
0.3240507749999324 ,
0.182990301000018 ,
0.18414714799996545 ,
0.18161737900004482 ,
0.18299797899999248 ,
0.18507303499995942
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.17775888999995004 ,
"median_s" : 0.18299797899999248 ,
"max_s" : 0.3240507749999324 ,
"iqr_s" : 0.0034556559999145975 ,
"iqr_over_median" : 0.018883574664585446
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 50.0435787825904 ,
"min" : 30.153567418577175 ,
"max" : 87.44938377901792
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 1.0009618348007485
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-24 06:24:44 +00:00
0.041579560999934984 ,
0.036446258999831116 ,
0.036502500000096916 ,
0.035383864000095855 ,
0.035573773000123765 ,
0.03752716999997574 ,
0.037304735000134315
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.035383864000095855 ,
"median_s" : 0.036502500000096916 ,
"max_s" : 0.041579560999934984 ,
"iqr_s" : 0.001953396999851975 ,
"iqr_over_median" : 0.05351406067657801
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
2.073242475999905 ,
2.2022289369999726 ,
2.084316709999939 ,
2.1940849729999172 ,
2.0542736519998925 ,
2.1827779390000615 ,
2.08357950300001
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 2.0542736519998925 ,
"median_s" : 2.084316709999939 ,
"max_s" : 2.2022289369999726 ,
"iqr_s" : 0.12084249700001237 ,
"iqr_over_median" : 0.05797703219488937
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 57.74685895681477 ,
"min" : 49.86205785104722 ,
"max" : 62.00806596458695
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 1.0017140611663233
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-24 06:24:44 +00:00
0.34842525399994884 ,
0.3350921820001531 ,
0.31876775899991117 ,
0.31804526599989913 ,
0.3194866800001819 ,
0.3188277130000188 ,
0.31933558799983075
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.31804526599989913 ,
"median_s" : 0.31933558799983075 ,
"max_s" : 0.34842525399994884 ,
"iqr_s" : 0.01632442300024195 ,
"iqr_over_median" : 0.05111996161308085
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
25.318823995999992 ,
25.049471093999955 ,
24.848114183000007 ,
25.909182295999926 ,
24.51903653599993 ,
25.2646018129999 ,
25.093897910999885
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 24.51903653599993 ,
"median_s" : 25.093897910999885 ,
"max_s" : 25.909182295999926 ,
"iqr_s" : 0.47070981299998493 ,
"iqr_over_median" : 0.018757939267524067
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 77.95052504982768 ,
"min" : 72.66644339162542 ,
"max" : 81.4638199834364
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 1.071124209415114 ,
"vectorbt" : 1.0000390457322261
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-24 06:24:44 +00:00
0.02229930999988028 ,
0.013707165999903737 ,
0.013650358999939272 ,
0.013151030000017272 ,
0.01828118200000972 ,
0.01388392500007285 ,
0.013613961999908497
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.013151030000017272 ,
"median_s" : 0.013707165999903737 ,
"max_s" : 0.02229930999988028 ,
"iqr_s" : 0.004667220000101224 ,
"iqr_over_median" : 0.3404948915139717
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.43960075499990126 ,
0.20985605500004567 ,
0.2119748109998909 ,
0.2128580249998322 ,
0.2172727780000514 ,
0.2185416150000492 ,
0.38523259299995516
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.20985605500004567 ,
"median_s" : 0.2172727780000514 ,
"max_s" : 0.43960075499990126 ,
"iqr_s" : 0.17325778200006425 ,
"iqr_over_median" : 0.7974205677989871
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 15.740621978215994 ,
"min" : 11.885050868151517 ,
"max" : 28.296875883930365
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 06:24:44 +00:00
"vectorbt" : 1.0024604431327035
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-24 06:24:44 +00:00
0.1501553889997922 ,
0.14490668700000242 ,
0.14558875200009425 ,
0.14636506199985888 ,
0.1536310629999207 ,
0.147068266000133 ,
0.14864912100006222
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.14490668700000242 ,
"median_s" : 0.147068266000133 ,
"max_s" : 0.1536310629999207 ,
"iqr_s" : 0.004566636999697948 ,
"iqr_over_median" : 0.03105113784161852
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
2.5935149909998927 ,
2.3203917780001575 ,
2.5642835829999058 ,
2.2895732410001983 ,
2.5865812500001084 ,
2.2739147839999987 ,
2.5474208639998324
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 2.2739147839999987 ,
"median_s" : 2.5474208639998324 ,
"max_s" : 2.5935149909998927 ,
"iqr_s" : 0.2970080089999101 ,
"iqr_over_median" : 0.1165916528349238
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 16.83631681960987 ,
"min" : 15.46162775862158 ,
"max" : 17.613198463286817
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 1.2543851132511497 ,
"vectorbt" : 1.000251489831917
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-24 06:24:44 +00:00
0.010561472000063077 ,
0.011197752000043693 ,
0.010966596999878675 ,
0.010687365999956455 ,
0.01382391800007099 ,
0.010924873000021762 ,
0.011213375999886921
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.010561472000063077 ,
"median_s" : 0.010966596999878675 ,
"max_s" : 0.01382391800007099 ,
"iqr_s" : 0.0005260099999304657 ,
"iqr_over_median" : 0.04796474238419494
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.17810525999993843 ,
0.17614517200013324 ,
0.17246758100009174 ,
0.33148679700002504 ,
0.17858882899986384 ,
0.1772170679998908 ,
0.17413174300008905
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.17246758100009174 ,
"median_s" : 0.1772170679998908 ,
"max_s" : 0.33148679700002504 ,
"iqr_s" : 0.00445708599977479 ,
"iqr_over_median" : 0.025150433025884038
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.007595532999857824 ,
0.0076879969999481546 ,
0.007537800000136485 ,
0.007794403999923816 ,
0.007623753000189026 ,
0.007632308999973247 ,
0.007587413999999626
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.007537800000136485 ,
"median_s" : 0.007623753000189026 ,
"max_s" : 0.007794403999923816 ,
"iqr_s" : 0.0001005829999485286 ,
"iqr_over_median" : 0.013193370764508596
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 15.730404816917355 ,
"min" : 12.91882872850857 ,
"max" : 31.016697379071292
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 0.6873417524342216 ,
"min" : 0.5514900334441999 ,
"max" : 0.729310103158774
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-24 06:24:44 +00:00
"vectorbt" : 1.0085420267925898 ,
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-24 06:24:44 +00:00
0.10376091400007681 ,
0.11586816199996974 ,
0.11407233099998848 ,
0.11494229999993877 ,
0.11642521699991448 ,
0.11477404199990815 ,
0.11430490799989457
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.10376091400007681 ,
"median_s" : 0.11477404199990815 ,
"max_s" : 0.11642521699991448 ,
"iqr_s" : 0.0017958309999812627 ,
"iqr_over_median" : 0.01564666512296134
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
2.0267436500000713 ,
2.297758552000005 ,
2.022033168000007 ,
2.284868069999902 ,
2.0138650700000653 ,
2.2832133000001704 ,
2.0164515349999874
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 2.0138650700000653 ,
"median_s" : 2.0267436500000713 ,
"max_s" : 2.297758552000005 ,
"iqr_s" : 0.2684165349999148 ,
"iqr_over_median" : 0.13243733858492926
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.08457978000001276 ,
0.07705215600003612 ,
0.08845987700010483 ,
0.07779004099984377 ,
0.08870894300002874 ,
0.07779083800005537 ,
0.08828350900012083
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.07705215600003612 ,
"median_s" : 0.08457978000001276 ,
"max_s" : 0.08870894300002874 ,
"iqr_s" : 0.010669836000261057 ,
"iqr_over_median" : 0.12615114392895616
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 19.53282379527392 ,
"min" : 17.297498960225642 ,
"max" : 19.893115727352335
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 0.7619392541058686 ,
"min" : 0.6649985178849755 ,
"max" : 0.8151410462705654
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 0.9947769500671655 ,
"vectorbt" : 1.001677267768342 ,
"raptorbt" : 1.012588458526649
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-24 06:24:44 +00:00
1.0875503639999806 ,
1.0724363080000785 ,
1.1248991930001466 ,
1.0724184860000605 ,
1.071602815999995 ,
1.0980863420002152 ,
1.0670113199998923
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 1.0670113199998923 ,
"median_s" : 1.0724363080000785 ,
"max_s" : 1.1248991930001466 ,
"iqr_s" : 0.02648352600022008 ,
"iqr_over_median" : 0.024694730869013196
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
24.822297670000125 ,
25.995311312000013 ,
25.331261793000067 ,
25.115389510999876 ,
25.07546243999991 ,
26.016469547000042 ,
25.20907599499992
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 24.822297670000125 ,
"median_s" : 25.20907599499992 ,
"max_s" : 26.016469547000042 ,
"iqr_s" : 0.9198488720001023 ,
"iqr_over_median" : 0.036488797613309955
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.8853017450001062 ,
0.8832706519999647 ,
0.8899431120000827 ,
0.886816041999964 ,
0.8861643479999657 ,
0.8865204819999235 ,
0.8869375670001318
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.8832706519999647 ,
"median_s" : 0.8865204819999235 ,
"max_s" : 0.8899431120000827 ,
"iqr_s" : 0.0016358220000256551 ,
"iqr_over_median" : 0.0018452162507688076
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 23.419392558847086 ,
"min" : 22.518694964515603 ,
"max" : 24.23949200347114
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 0.8236112908626925 ,
"min" : 0.7911314342990792 ,
"max" : 0.831235386518881
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 1.025809197572685 ,
"vectorbt" : 0.999801378567194 ,
"raptorbt" : 1.0008132295649872
2026-08-21 10:05:52 +00:00
}
}
],
"cold_start" : {
"workload" : "sma_cross" ,
"bars" : 20000 ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"samples_s" : {
"manifoldbt" : [
2026-08-24 06:24:44 +00:00
0.47015028300006634 ,
0.4186611949999133 ,
0.42321224099987376
2026-08-21 10:05:52 +00:00
],
"vectorbt" : [
2026-08-24 06:24:44 +00:00
7.6041231409999455 ,
7.369359748000079 ,
7.170137889999978
2026-08-21 10:05:52 +00:00
],
"raptorbt" : [
2026-08-24 06:24:44 +00:00
0.39029380200008745 ,
0.3907653839999057 ,
0.39220189899992874
2026-08-21 10:05:52 +00:00
],
"baseline" : [
2026-08-24 06:24:44 +00:00
0.35211166299995966 ,
0.35257918499996777 ,
0.3510158039998714
2026-08-21 10:05:52 +00:00
]
},
"median_s" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 0.42321224099987376 ,
"vectorbt" : 7.369359748000079 ,
"raptorbt" : 0.3907653839999057 ,
"baseline" : 0.35211166299995966
2026-08-21 10:05:52 +00:00
},
"engine_share_s" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 0.0711005779999141 ,
"vectorbt" : 7.017248085000119 ,
"raptorbt" : 0.03865372099994602
2026-08-21 10:05:52 +00:00
},
"ratio" : {
2026-08-24 06:24:44 +00:00
"vectorbt" : 17.412917288472944 ,
"raptorbt" : 0.9233319505992792
2026-08-21 10:05:52 +00:00
}
},
"memory" : {
"workload" : "sma_cross" ,
"bars" : 2000000 ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"manifoldbt" : {
2026-08-24 06:24:44 +00:00
"before_mb" : 728.928256 ,
"peak_mb" : 728.948736 ,
"added_mb" : 0.020480000000020482 ,
"added_mb_per_million_bars" : 0.010240000000010241 ,
"seconds" : 0.05882227300003251 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "mbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
},
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"before_mb" : 613.666816 ,
"peak_mb" : 862.490624 ,
"added_mb" : 248.82380799999999 ,
"added_mb_per_million_bars" : 124.41190399999999 ,
"seconds" : 4.370269445999838 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "vbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"before_mb" : 330.309632 ,
"peak_mb" : 370.839552 ,
2026-08-23 14:01:18 +00:00
"added_mb" : 40.529920000000004 ,
"added_mb_per_million_bars" : 20.264960000000002 ,
2026-08-24 06:24:44 +00:00
"seconds" : 0.16149092799992104 ,
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-24 06:24:44 +00:00
"generated_at" : "2026-08-24T06:07:30.724122+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-24 06:24:44 +00:00
"runner" : "GitHub Actions 1000000217" ,
2026-08-21 10:05:52 +00:00
"ci" : true ,
2026-08-24 06:24:44 +00:00
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32695243410" ,
"commit" : "7ac9831d9ac92eb40adac40db44063bc6df5d5d9" ,
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-24 06:24:44 +00:00
0.005697086000054696
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.005697086000054696 ,
"median_s" : 0.005697086000054696 ,
"max_s" : 0.005697086000054696 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
},
"vectorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.18699431200002437
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.18699431200002437 ,
"median_s" : 0.18699431200002437 ,
"max_s" : 0.18699431200002437 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
},
"raptorbt" : {
"samples_s" : [
2026-08-24 06:24:44 +00:00
0.01087188300004982
2026-08-21 10:05:52 +00:00
],
2026-08-24 06:24:44 +00:00
"min_s" : 0.01087188300004982 ,
"median_s" : 0.01087188300004982 ,
"max_s" : 0.01087188300004982 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 32.822799585301865 ,
"min" : 32.822799585301865 ,
"max" : 32.822799585301865
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 06:24:44 +00:00
"median_of_ratios" : 1.9083234832588873 ,
"min" : 1.9083234832588873 ,
"max" : 1.9083234832588873
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-24 06:24:44 +00:00
"manifoldbt" : 0.4606691870000077 ,
"vectorbt" : 5.286901884000031 ,
"raptorbt" : 6.738069831000075
2026-08-21 10:05:52 +00:00
},
"ratio" : {
2026-08-24 06:24:44 +00:00
"vectorbt" : 11.476569376019375 ,
"raptorbt" : 14.626699638584602
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
2026-08-24 06:24:44 +00:00
"per_combo_us" : 92.13383740000154
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 36.7 ,
"vectorbt" : 2533.2 ,
"raptorbt" : 33.5
2026-08-21 10:05:52 +00:00
},
2026-08-24 06:24:44 +00:00
"memory_baseline_mb" : 2176.0 ,
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-24 06:24:44 +00:00
"manifoldbt" : 1.9305274299999837 ,
"raptorbt" : 26.62652079599991 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null
},
"ratio" : {
2026-08-24 06:24:44 +00:00
"raptorbt" : 13.792355592689058
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
2026-08-24 06:24:44 +00:00
"per_combo_us" : 96.52637149999919
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 64.3 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null ,
"raptorbt" : null
},
2026-08-24 06:24:44 +00:00
"memory_baseline_mb" : 613.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-24 06:24:44 +00:00
"manifoldbt" : 9.619396154000015 ,
"raptorbt" : 150.39642181 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null
},
"ratio" : {
2026-08-24 06:24:44 +00:00
"raptorbt" : 15.634705069035018
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
2026-08-24 06:24:44 +00:00
"per_combo_us" : 961.9396154000015
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-24 06:24:44 +00:00
"manifoldbt" : 77.6 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null ,
"raptorbt" : null
},
2026-08-24 06:24:44 +00:00
"memory_baseline_mb" : 1728.7 ,
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
}
}