2026-08-21 10:05:52 +00:00
{
"repo" : "manifoldbt/manifoldbt" ,
2026-08-24 10:15:18 +00:00
"run_id" : "32713305381" ,
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32713305381" ,
"commit" : "8208a3310e0ceb7ec53e1401b8aa1a4eb9b0a8c7" ,
2026-08-21 10:05:52 +00:00
"run_started_at" : "" ,
"conclusion" : "success" ,
2026-08-24 10:15:18 +00:00
"synced_at" : "2026-08-24T10:15:18.247339+00:00" ,
2026-08-21 10:05:52 +00:00
"backtests" : {
"schema_version" : 2 ,
2026-08-24 10:15:18 +00:00
"generated_at" : "2026-08-24T10:15:09.228209+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-24 10:15:18 +00:00
"manifoldbt" : "0.19.1" ,
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 10:15:18 +00:00
"runner" : "GitHub Actions 1000000221" ,
2026-08-21 10:05:52 +00:00
"ci" : true ,
2026-08-24 10:15:18 +00:00
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32713305381" ,
"commit" : "8208a3310e0ceb7ec53e1401b8aa1a4eb9b0a8c7" ,
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 10:15:18 +00:00
0.005086016000007021 ,
0.0032640149999991763 ,
0.003371505000004049 ,
0.003337901999998394 ,
0.003271808999997461 ,
0.003305723000011085 ,
0.003306945000005612
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.0032640149999991763 ,
"median_s" : 0.003306945000005612 ,
"max_s" : 0.005086016000007021 ,
"iqr_s" : 9.969600000658829e-05 ,
"iqr_over_median" : 0.030147462387919696
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.18361185099999489 ,
0.17885441299999627 ,
0.1857335680000034 ,
0.17952656899998942 ,
0.18028834999999788 ,
0.32503587800000844 ,
0.17677236500000504
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.17677236500000504 ,
"median_s" : 0.18028834999999788 ,
"max_s" : 0.32503587800000844 ,
"iqr_s" : 0.006879155000007131 ,
"iqr_over_median" : 0.0381564033394682
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.009773237000004542 ,
0.009820387000004871 ,
0.008156228999993687 ,
0.007777633000003448 ,
0.00757018599999526 ,
0.007587787999995044 ,
0.007597254999993197
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.00757018599999526 ,
"median_s" : 0.007777633000003448 ,
"max_s" : 0.009820387000004871 ,
"iqr_s" : 0.0021854490000094984 ,
"iqr_over_median" : 0.2809915304577279
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 54.795830595153944 ,
"min" : 36.10131210750053 ,
"max" : 98.32520087101022
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 2.31376159182921 ,
"min" : 1.9215899045522173 ,
"max" : 3.0086831708822874
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 1.0072186409523143 ,
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 10:15:18 +00:00
0.003255979000002185 ,
0.004720033000012336 ,
0.004896713000007935 ,
0.00478545599999336 ,
0.004877547000006643 ,
0.0050088329999908865 ,
0.0033084580000064534
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.003255979000002185 ,
"median_s" : 0.00478545599999336 ,
"max_s" : 0.0050088329999908865 ,
"iqr_s" : 0.0015882550000014817 ,
"iqr_over_median" : 0.33189209137095516
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.6878645719999952 ,
0.9081481260000004 ,
0.8173868140000025 ,
0.8253067410000057 ,
0.6771847520000023 ,
0.6831418059999947 ,
0.820317715999991
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.6771847520000023 ,
"median_s" : 0.8173868140000025 ,
"max_s" : 0.9081481260000004 ,
"iqr_s" : 0.14216493500001093 ,
"iqr_over_median" : 0.17392614190129388
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.010578843000004667 ,
0.008162831000007031 ,
0.007974630000006755 ,
0.007688956999999164 ,
0.010505968000003918 ,
0.007584362000002898 ,
0.007647280000000478
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.007584362000002898 ,
"median_s" : 0.007974630000006755 ,
"max_s" : 0.010578843000004667 ,
"iqr_s" : 0.00285868800000344 ,
"iqr_over_median" : 0.3584728068889739
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 172.4614626069388 ,
"min" : 136.3874191855144 ,
"max" : 247.94563388696213
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 1.7294012563017458 ,
"min" : 1.514197418843211 ,
"max" : 3.249051360588495
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 0.9945841246374895 ,
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 10:15:18 +00:00
0.036878396000005864 ,
0.03571583599999428 ,
0.03574679599998376 ,
0.03707817700001215 ,
0.0378416449999861 ,
0.03753157099998816 ,
0.035101703000009365
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.035101703000009365 ,
"median_s" : 0.036878396000005864 ,
"max_s" : 0.0378416449999861 ,
"iqr_s" : 0.0018157349999938788 ,
"iqr_over_median" : 0.04923573682525645
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
2.1526621960000085 ,
2.043684607000003 ,
2.0278536129999907 ,
2.272070284999984 ,
2.011077475999997 ,
2.2560072160000004 ,
1.9949298709999823
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 1.9949298709999823 ,
"median_s" : 2.043684607000003 ,
"max_s" : 2.272070284999984 ,
"iqr_s" : 0.24492974000000345 ,
"iqr_over_median" : 0.11984713255708497
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.08223053499999367 ,
0.08242296100000601 ,
0.0776152770000067 ,
0.08192856700000561 ,
0.07690396999998939 ,
0.08210328799998479 ,
0.07704403600001797
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.07690396999998939 ,
"median_s" : 0.08192856700000561 ,
"max_s" : 0.08242296100000601 ,
"iqr_s" : 0.005186498999975697 ,
"iqr_over_median" : 0.06330513506937503
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 57.2206851605078 ,
"min" : 53.14455743138903 ,
"max" : 61.27783156650985
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 2.194880288286794 ,
"min" : 2.032257582883028 ,
"max" : 2.3077427335039618
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 1.0001161880238378 ,
"raptorbt" : 0.9995562077532977
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 10:15:18 +00:00
0.037138538999997195 ,
0.03594979999999737 ,
0.03583431600000608 ,
0.03592240099999344 ,
0.03758607800000391 ,
0.03689630000002353 ,
0.03835280999999213
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.03583431600000608 ,
"median_s" : 0.03689630000002353 ,
"max_s" : 0.03835280999999213 ,
"iqr_s" : 0.0016636770000104661 ,
"iqr_over_median" : 0.04509061884279467
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
8.163776672000012 ,
8.496581371999994 ,
8.350863197999985 ,
8.325415729000014 ,
8.292014292000005 ,
8.267167305000015 ,
8.279689720999983
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 8.163776672000012 ,
"median_s" : 8.292014292000005 ,
"max_s" : 8.496581371999994 ,
"iqr_s" : 0.0836958929999696 ,
"iqr_over_median" : 0.010093553876374523
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.08701218100000574 ,
0.08703576599998541 ,
0.08671125800000823 ,
0.08601961200000119 ,
0.08658772300000805 ,
0.08563197399999467 ,
0.08672109099998693
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.08563197399999467 ,
"median_s" : 0.08671125800000823 ,
"max_s" : 0.08703576599998541 ,
"iqr_s" : 0.0009925690000045506 ,
"iqr_over_median" : 0.011446829660855069
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 224.0649416064685 ,
"min" : 215.88221882573092 ,
"max" : 236.3457201987387
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 2.342908023388112 ,
"min" : 2.2611404744529726 ,
"max" : 2.4210361670994494
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 0.9999053160142127 ,
"raptorbt" : 0.9740480498398478
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 10:15:18 +00:00
0.32351850399999194 ,
0.3202701980000029 ,
0.32139288899998064 ,
0.31894670599990604 ,
0.3200021860000106 ,
0.31976874500003305 ,
0.31871445799993126
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.31871445799993126 ,
"median_s" : 0.3200021860000106 ,
"max_s" : 0.32351850399999194 ,
"iqr_s" : 0.0024461830000745977 ,
"iqr_over_median" : 0.007644269655315781
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
24.966537722999988 ,
25.087499501000025 ,
25.178886218000002 ,
24.910972221000065 ,
24.944502747 ,
24.874792727 ,
24.801107568999896
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 24.801107568999896 ,
"median_s" : 24.944502747 ,
"max_s" : 25.178886218000002 ,
"iqr_s" : 0.2127067740000257 ,
"iqr_over_median" : 0.008527200407937868
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.9003745869999875 ,
0.8885115830000245 ,
0.8903806420000819 ,
0.887415371999964 ,
0.8909642070000245 ,
0.8898108550000643 ,
0.896099920000097
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.887415371999964 ,
"median_s" : 0.8903806420000819 ,
"max_s" : 0.9003745869999875 ,
"iqr_s" : 0.007588337000072443 ,
"iqr_over_median" : 0.008522576347826466
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 77.95103858134011 ,
"min" : 77.17190026014899 ,
"max" : 78.34300969241892
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 2.7826698791339735 ,
"min" : 2.7703806539420217 ,
"max" : 2.811607373018171
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 1.0835571080165156 ,
"vectorbt" : 0.9998609629874063 ,
"raptorbt" : 1.0026335682628353
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 10:15:18 +00:00
0.32074174399997446 ,
0.3292579920000094 ,
0.32045135600003505 ,
0.32179833999998664 ,
0.31892916099991453 ,
0.3199751650000735 ,
0.32104021800000737
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.31892916099991453 ,
"median_s" : 0.32074174399997446 ,
"max_s" : 0.3292579920000094 ,
"iqr_s" : 0.0018231749999131353 ,
"iqr_over_median" : 0.005684246076535895
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
98.03886155999999 ,
98.29277811900005 ,
98.024604566 ,
97.924379467 ,
97.93534395500001 ,
97.4675261079999 ,
97.86300137600006
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 97.4675261079999 ,
"median_s" : 97.93534395500001 ,
"max_s" : 98.29277811900005 ,
"iqr_s" : 0.1758601839999301 ,
"iqr_over_median" : 0.0017956763809471635
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.8999588449999578 ,
0.9001707470000611 ,
0.8982293809999646 ,
0.897499420000031 ,
0.9007717609999872 ,
0.8987831899999037 ,
0.8962689560000854
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.8962689560000854 ,
"median_s" : 0.8987831899999037 ,
"max_s" : 0.9007717609999872 ,
"iqr_s" : 0.0026713270000300327 ,
"iqr_over_median" : 0.002972159503817955
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 304.83097097821496 ,
"min" : 298.5281466425187 ,
"max" : 307.07553880601796
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 2.803013200542882 ,
"min" : 2.733937425579742 ,
"max" : 2.8243631224434464
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 1.0922682620656068 ,
"vectorbt" : 0.999859243462431 ,
"raptorbt" : 0.9997326152339213
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 10:15:18 +00:00
0.00484398899993721 ,
0.004881091000015658 ,
0.004743271000052118 ,
0.004768868999917686 ,
0.017285433000097328 ,
0.004837667999936457 ,
0.004986926999890784
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.004743271000052118 ,
"median_s" : 0.00484398899993721 ,
"max_s" : 0.017285433000097328 ,
"iqr_s" : 0.00021805799997309805 ,
"iqr_over_median" : 0.04501620461481738
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.18274148899990905 ,
0.18636382799991225 ,
0.1908901040001183 ,
0.34402032499997404 ,
0.1837524590000612 ,
0.18440214299994295 ,
0.18748917100015206
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.18274148899990905 ,
"median_s" : 0.18636382799991225 ,
"max_s" : 0.34402032499997404 ,
"iqr_s" : 0.007137645000057091 ,
"iqr_over_median" : 0.03829951915379444
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 38.117982259709656 ,
"min" : 10.630480532308711 ,
"max" : 72.13876602731425
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 1.000233260562006
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 10:15:18 +00:00
0.05468129000018962 ,
0.05192759400006253 ,
0.05483863199992811 ,
0.054464268999936394 ,
0.05389681199994811 ,
0.052467804999878354 ,
0.051793465999935506
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.051793465999935506 ,
"median_s" : 0.05389681199994811 ,
"max_s" : 0.05483863199992811 ,
"iqr_s" : 0.0027536960001270927 ,
"iqr_over_median" : 0.051092001510771055
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
2.040135706000001 ,
2.2946230769998692 ,
2.0383569709999847 ,
2.2844864599999255 ,
2.0221348820000458 ,
2.278572961000009 ,
2.023895618000097
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 2.0221348820000458 ,
"median_s" : 2.040135706000001 ,
"max_s" : 2.2946230769998692 ,
"iqr_s" : 0.2605908419998286 ,
"iqr_over_median" : 0.12773211175777957
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 39.07627301873593 ,
"min" : 37.170091533331046 ,
"max" : 44.18889650456569
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 0.9998527803550585
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 10:15:18 +00:00
0.003871248999985255 ,
0.003302136000002065 ,
0.0033703130000048986 ,
0.0035228179999649 ,
0.005218563999960679 ,
0.003723248999904172 ,
0.003339085000106934
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.003302136000002065 ,
"median_s" : 0.0035228179999649 ,
"max_s" : 0.005218563999960679 ,
"iqr_s" : 0.0005321639998783212 ,
"iqr_over_median" : 0.15106201906644723
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.17765502999986893 ,
0.33669244599991544 ,
0.18637438899986591 ,
0.1779633249998369 ,
0.17972546500004682 ,
0.1834427849998974 ,
0.18913354100004653
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.17765502999986893 ,
"median_s" : 0.1834427849998974 ,
"max_s" : 0.33669244599991544 ,
"iqr_s" : 0.01117021600020962 ,
"iqr_over_median" : 0.06089209777433257
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 50.51732022534518 ,
"min" : 34.439639908871676 ,
"max" : 101.96201670667256
2026-08-21 10:05:52 +00:00
}
},
2026-08-24 10:15:18 +00:00
"noisy" : true ,
2026-08-21 10:05:52 +00:00
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 0.9923220957665657
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 10:15:18 +00:00
0.0406119189999572 ,
0.03566852800008746 ,
0.03565877999994882 ,
0.034294702999886795 ,
0.03435004600009961 ,
0.035560656999905405 ,
0.038307935999910114
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.034294702999886795 ,
"median_s" : 0.03565877999994882 ,
"max_s" : 0.0406119189999572 ,
"iqr_s" : 0.003957889999810504 ,
"iqr_over_median" : 0.11099342153085959
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
2.049106897999991 ,
2.1562171769999168 ,
2.0434591430000637 ,
2.1485062799999923 ,
2.043331909000017 ,
2.165936456000054 ,
2.1759491909999724
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 2.043331909000017 ,
"median_s" : 2.1485062799999923 ,
"max_s" : 2.1759491909999724 ,
"iqr_s" : 0.12247731299999032 ,
"iqr_over_median" : 0.057005797069390345
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 59.48556543400528 ,
"min" : 50.45580086974345 ,
"max" : 62.648341932195315
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 0.9984774535254388
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 10:15:18 +00:00
0.33108427800016216 ,
0.31927832199994555 ,
0.32159976499997356 ,
0.31982600300011654 ,
0.32315278700002636 ,
0.31991790799997943 ,
0.3188191829999596
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.3188191829999596 ,
"median_s" : 0.31991790799997943 ,
"max_s" : 0.33108427800016216 ,
"iqr_s" : 0.003874465000080818 ,
"iqr_over_median" : 0.012110810002174267
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
24.860258039999962 ,
25.55476604500018 ,
24.87219184399987 ,
24.9671859529999 ,
24.799834751000162 ,
24.951896657999896 ,
24.55627262400003
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 24.55627262400003 ,
"median_s" : 24.87219184399987 ,
"max_s" : 25.55476604500018 ,
"iqr_s" : 0.16735120199973608 ,
"iqr_over_median" : 0.006728446091497466
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 77.33896150080183 ,
"min" : 75.0874012809143 ,
"max" : 80.03915168723712
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 1.0959860860280388 ,
"vectorbt" : 0.9998143591409021
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 10:15:18 +00:00
0.023109289999865723 ,
0.01271814199981236 ,
0.013359569999920495 ,
0.013076972000135356 ,
0.01802267500011112 ,
0.013018533000149546 ,
0.012592148999829078
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.012592148999829078 ,
"median_s" : 0.013076972000135356 ,
"max_s" : 0.023109289999865723 ,
"iqr_s" : 0.005304533000298761 ,
"iqr_over_median" : 0.40563924127419215
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.41095788000006905 ,
0.21117583900013415 ,
0.21494155900018086 ,
0.21643066900014674 ,
0.21761884700003975 ,
0.21590418599998884 ,
0.3576757230000567
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.21117583900013415 ,
"median_s" : 0.21643066900014674 ,
"max_s" : 0.41095788000006905 ,
"iqr_s" : 0.14273416399987582 ,
"iqr_over_median" : 0.6594913958325336
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 16.58437137252782 ,
"min" : 12.074725144780006 ,
"max" : 28.404660952226
2026-08-21 10:05:52 +00:00
}
},
"noisy" : true ,
"cpu_over_wall" : {
"manifoldbt" : null ,
2026-08-24 10:15:18 +00:00
"vectorbt" : 0.9974496172785567
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 10:15:18 +00:00
0.14334547500016015 ,
0.14099054200005412 ,
0.14265404699995088 ,
0.14506040900005246 ,
0.14237165400004415 ,
0.14354739600003086 ,
0.14592469600006552
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.14099054200005412 ,
"median_s" : 0.14334547500016015 ,
"max_s" : 0.14592469600006552 ,
"iqr_s" : 0.002688755000008314 ,
"iqr_over_median" : 0.018757166907468197
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
2.548502177999808 ,
2.2950072179999097 ,
2.5687573969998994 ,
2.3378954519998842 ,
2.5308834439999828 ,
2.2760534960000314 ,
2.5351989760001743
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 2.2760534960000314 ,
"median_s" : 2.5308834439999828 ,
"max_s" : 2.5687573969998994 ,
"iqr_s" : 0.25349495999989813 ,
"iqr_over_median" : 0.10016066152744561
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 17.373337382173034 ,
"min" : 15.855763040101 ,
"max" : 18.006901668908025
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 1.2650735266363864 ,
"vectorbt" : 0.9992804852288221
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 10:15:18 +00:00
0.007959955000160335 ,
0.007891016000030504 ,
0.007931120999955965 ,
0.007959473000028083 ,
0.010777479000125822 ,
0.008580210999980409 ,
0.008099854999954914
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.007891016000030504 ,
"median_s" : 0.007959955000160335 ,
"max_s" : 0.010777479000125822 ,
"iqr_s" : 0.0006490900000244437 ,
"iqr_over_median" : 0.08154443084305996
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.18156059499983712 ,
0.17893430799995258 ,
0.17498802799991608 ,
0.3380797410000014 ,
0.18128034300002582 ,
0.1753626570000506 ,
0.18014177999998537
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.17498802799991608 ,
"median_s" : 0.18014177999998537 ,
"max_s" : 0.3380797410000014 ,
"iqr_s" : 0.006197937999786518 ,
"iqr_over_median" : 0.034405888516184424
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.00758355300013136 ,
0.007616654999992534 ,
0.007598629999847617 ,
0.007624738999993497 ,
0.007543028000100094 ,
0.007516827999779707 ,
0.007618218000061461
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.007516827999779707 ,
"median_s" : 0.007598629999847617 ,
"max_s" : 0.007624738999993497 ,
"iqr_s" : 7.5189999961367e-05 ,
"iqr_over_median" : 0.0098952047886099
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 22.24012405172538 ,
"min" : 16.820291925218267 ,
"max" : 42.47514138169807
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 0.9527130492545004 ,
"min" : 0.6998879793699465 ,
"max" : 0.9652312199041404
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 10:15:18 +00:00
"vectorbt" : 0.9855727381427762 ,
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 10:15:18 +00:00
0.07556033000014395 ,
0.086905655999999 ,
0.08652868299986949 ,
0.08505993099993248 ,
0.08579243899998801 ,
0.08698165699979654 ,
0.08476480800004538
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.07556033000014395 ,
"median_s" : 0.08579243899998801 ,
"max_s" : 0.08698165699979654 ,
"iqr_s" : 0.002140847999953621 ,
"iqr_over_median" : 0.024953807408994638
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
2.0287785399998484 ,
2.2871528539999417 ,
2.0491359790000843 ,
2.2847077960000206 ,
2.020059084999957 ,
2.2943602479999754 ,
2.0258624880000298
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 2.020059084999957 ,
"median_s" : 2.0491359790000843 ,
"max_s" : 2.2943602479999754 ,
"iqr_s" : 0.26129036599991196 ,
"iqr_over_median" : 0.12751245826419663
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.07557534700003998 ,
0.08625597499985815 ,
0.07516399199994339 ,
0.08486126000002514 ,
0.07653187899995828 ,
0.08565653300001941 ,
0.07646637699986059
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.07516399199994339 ,
"median_s" : 0.07653187899995828 ,
"max_s" : 0.08625597499985815 ,
"iqr_s" : 0.010081185999979425 ,
"iqr_over_median" : 0.13172531671390064
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 26.317652489729415 ,
"min" : 23.545887126489543 ,
"max" : 26.859977067249613
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 0.9847654776250097 ,
"min" : 0.8686598408074322 ,
"max" : 1.000198741851657
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 1.0480169166975069 ,
"vectorbt" : 0.9999961981465524 ,
"raptorbt" : 0.9990876848650796
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 10:15:18 +00:00
0.8068502040000567 ,
0.7967224879998867 ,
0.7939243590001297 ,
0.7900002689998473 ,
0.7876182999998491 ,
0.7906549809999888 ,
0.7919537610000589
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.7876182999998491 ,
"median_s" : 0.7919537610000589 ,
"max_s" : 0.8068502040000567 ,
"iqr_s" : 0.006722219000039331 ,
"iqr_over_median" : 0.008488145812390215
2026-08-21 10:05:52 +00:00
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
24.9078087649998 ,
25.90321060400015 ,
25.31438572000002 ,
24.825181309000072 ,
24.855272518999982 ,
25.89725853599998 ,
25.41575723899996
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 24.825181309000072 ,
"median_s" : 25.31438572000002 ,
"max_s" : 25.90321060400015 ,
"iqr_s" : 1.0419860169999993 ,
"iqr_over_median" : 0.04116181322846646
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.8893825309999102 ,
0.8786584000001767 ,
0.8827479530000346 ,
0.8890934060000291 ,
0.8824379769998814 ,
0.8857742300001519 ,
0.8819613980001577
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.8786584000001767 ,
"median_s" : 0.8827479530000346 ,
"max_s" : 0.8893825309999102 ,
"iqr_s" : 0.007132007999871348 ,
"iqr_over_median" : 0.008079325446899188
2026-08-21 10:05:52 +00:00
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 31.885135445246974 ,
"min" : 30.870425069630457 ,
"max" : 32.754183756922856
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 1.1136526416472088 ,
"min" : 1.1022895285775347 ,
"max" : 1.12543430792199
2026-08-21 10:05:52 +00:00
}
},
"noisy" : false ,
"cpu_over_wall" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 1.0363954066133985 ,
"vectorbt" : 0.9998934348920596 ,
"raptorbt" : 1.0016064644921072
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 10:15:18 +00:00
0.4424554540000827 ,
0.41451248299995314 ,
0.413940496999885
2026-08-21 10:05:52 +00:00
],
"vectorbt" : [
2026-08-24 10:15:18 +00:00
7.340981547999945 ,
7.887811972999998 ,
7.206707354000173
2026-08-21 10:05:52 +00:00
],
"raptorbt" : [
2026-08-24 10:15:18 +00:00
0.40212875299994266 ,
0.3889863320000586 ,
0.3910420580000391
2026-08-21 10:05:52 +00:00
],
"baseline" : [
2026-08-24 10:15:18 +00:00
0.3473758520001411 ,
0.3551300369999808 ,
0.3489620369998647
2026-08-21 10:05:52 +00:00
]
},
"median_s" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 0.41451248299995314 ,
"vectorbt" : 7.340981547999945 ,
"raptorbt" : 0.3910420580000391 ,
"baseline" : 0.3489620369998647
2026-08-21 10:05:52 +00:00
},
"engine_share_s" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 0.06555044600008841 ,
"vectorbt" : 6.9920195110000805 ,
"raptorbt" : 0.042080021000174384
2026-08-21 10:05:52 +00:00
},
"ratio" : {
2026-08-24 10:15:18 +00:00
"vectorbt" : 17.709916707142387 ,
"raptorbt" : 0.9433782432074146
2026-08-21 10:05:52 +00:00
}
},
"memory" : {
"workload" : "sma_cross" ,
"bars" : 2000000 ,
"engines" : [
"manifoldbt" ,
"vectorbt" ,
"raptorbt"
],
"manifoldbt" : {
2026-08-24 10:15:18 +00:00
"before_mb" : 728.674304 ,
"peak_mb" : 728.686592 ,
"added_mb" : 0.012288000000012289 ,
"added_mb_per_million_bars" : 0.0061440000000061445 ,
"seconds" : 0.05825765299982777 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "mbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
},
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"before_mb" : 614.281216 ,
"peak_mb" : 864.681984 ,
"added_mb" : 250.40076800000008 ,
"added_mb_per_million_bars" : 125.20038400000004 ,
"seconds" : 4.3868381639999825 ,
2026-08-21 10:05:52 +00:00
"mode" : "memory" ,
"engine" : "vbt" ,
"workload" : "sma_cross" ,
"bars" : 2000000
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"before_mb" : 330.174464 ,
"peak_mb" : 370.70848 ,
"added_mb" : 40.53401600000001 ,
"added_mb_per_million_bars" : 20.267008000000004 ,
"seconds" : 0.161842740000111 ,
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 10:15:18 +00:00
"generated_at" : "2026-08-24T09:59:57.098825+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-24 10:15:18 +00:00
"manifoldbt" : "0.19.1" ,
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 10:15:18 +00:00
"runner" : "GitHub Actions 1000000222" ,
2026-08-21 10:05:52 +00:00
"ci" : true ,
2026-08-24 10:15:18 +00:00
"run_url" : "https://github.com/manifoldbt/manifoldbt/actions/runs/32713305381" ,
"commit" : "8208a3310e0ceb7ec53e1401b8aa1a4eb9b0a8c7" ,
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 10:15:18 +00:00
0.005212192999806575
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.005212192999806575 ,
"median_s" : 0.005212192999806575 ,
"max_s" : 0.005212192999806575 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
},
"vectorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.18328484499988917
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.18328484499988917 ,
"median_s" : 0.18328484499988917 ,
"max_s" : 0.18328484499988917 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
},
"raptorbt" : {
"samples_s" : [
2026-08-24 10:15:18 +00:00
0.011166662000050565
2026-08-21 10:05:52 +00:00
],
2026-08-24 10:15:18 +00:00
"min_s" : 0.011166662000050565 ,
"median_s" : 0.011166662000050565 ,
"max_s" : 0.011166662000050565 ,
2026-08-21 10:05:52 +00:00
"iqr_s" : 0.0 ,
"iqr_over_median" : 0.0
}
},
"speedup" : {
"vectorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 35.164631280286606 ,
"min" : 35.164631280286606 ,
"max" : 35.164631280286606
2026-08-21 10:05:52 +00:00
},
"raptorbt" : {
2026-08-24 10:15:18 +00:00
"median_of_ratios" : 2.1424114572244273 ,
"min" : 2.1424114572244273 ,
"max" : 2.1424114572244273
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 10:15:18 +00:00
"manifoldbt" : 0.4702996930000154 ,
"vectorbt" : 5.237195704999976 ,
"raptorbt" : 6.737781942999845
2026-08-21 10:05:52 +00:00
},
"ratio" : {
2026-08-24 10:15:18 +00:00
"vectorbt" : 11.135868857562288 ,
"raptorbt" : 14.326570999908403
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
2026-08-24 10:15:18 +00:00
"per_combo_us" : 94.05993860000308
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 38.4 ,
"vectorbt" : 2531.8 ,
"raptorbt" : 35.1
2026-08-21 10:05:52 +00:00
},
2026-08-24 10:15:18 +00:00
"memory_baseline_mb" : 2173.6 ,
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 10:15:18 +00:00
"manifoldbt" : 1.9359811260001152 ,
"raptorbt" : 26.944831631999932 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null
},
"ratio" : {
2026-08-24 10:15:18 +00:00
"raptorbt" : 13.917920619231454
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
2026-08-24 10:15:18 +00:00
"per_combo_us" : 96.79905630000576
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 61.6 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null ,
"raptorbt" : null
},
2026-08-24 10:15:18 +00:00
"memory_baseline_mb" : 613.2 ,
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 10:15:18 +00:00
"manifoldbt" : 9.608373389000008 ,
"raptorbt" : 151.70980005299998 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null
},
"ratio" : {
2026-08-24 10:15:18 +00:00
"raptorbt" : 15.789332274147725
2026-08-21 10:05:52 +00:00
},
2026-08-23 14:01:18 +00:00
"reps" : 2 ,
2026-08-24 10:15:18 +00:00
"per_combo_us" : 960.8373389000008
2026-08-21 10:05:52 +00:00
},
"memory" : {
2026-08-24 10:15:18 +00:00
"manifoldbt" : 81.6 ,
2026-08-21 10:05:52 +00:00
"vectorbt" : null ,
"raptorbt" : null
},
2026-08-24 10:15:18 +00:00
"memory_baseline_mb" : 1755.2 ,
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
}
}