Règles d’audit et preuves de parité des moteurs de backtest
Résumé
Ce relevé d’audit définit la méthode de comparaison de plusieurs frameworks de backtesting avec ML4T, sur des études de cas de stratégies réelles et une charge synthétique de résistance. Il précise les règles de comparaison des exécutions ordonnées, des horodatages, des valeurs monétaires du compte, des quantités et des autres champs numériques. Il consigne aussi les éditions des frameworks, les identifiants immuables, l’état de prise en charge, les règles de performance et les références aux preuves de justesse, de durée et d’échelle. La mesure du temps se limite à l’appel du moteur ; le chargement des entrées, l’inférence, la préparation, l’extraction et la production des rapports sont exclus.
Les relevés montrent pourquoi les affirmations de parité doivent être limitées à chaque modèle d’actif et à chaque implémentation. Par exemple, VectorBT OSS est déclaré non pris en charge pour la charge de travail sur les contrats à terme CME, car il ne dispose pas de multiplicateurs de contrat natifs ni de comptabilisation de marge ; les deux éditions de VectorBT ne sont pas non plus prises en charge pour la comptabilisation du financement et de la marge des contrats perpétuels crypto. Les temps de l’audit reposent sur des processus isolés et des paires ayant passé les contrôles de justesse ; ils n’établissent donc pas une performance universelle pour tous les jeux de données et toutes les machines. Ce fichier documente des preuves et des règles, sans enseigner de signal de trading ni de stratégie d’allocation.
Idées clés
- La parité d’un backtest dépend de règles explicites pour l’ordre des exécutions, les horodatages et les tolérances numériques.
- Les preuves de temps d’exécution couvrent les appels du moteur et excluent la préparation des données et des adaptateurs ainsi que le traitement des résultats.
- La prise en charge d’un framework doit être évaluée au regard des exigences comptables de l’actif.
- L’audit limite les comparaisons de temps publiées aux paires de frameworks et d’études de cas qui réussissent les contrôles de justesse.
- Les résultats des charges de travail consignées n’établissent pas un classement universel de vitesse.
Étiquettes
Texte intégral
# framework_parity_audit.json
```json
{
"audit_generated_at": "2026-09-03T11:44:14.344493+00:00",
"comparison_policy": {
"account_money_fields": [
"cash",
"commission",
"equity",
"final_value"
],
"account_money_quantum": "0.01",
"fill_order": "canonical timestamp, asset, side, quantity, price, commission",
"meaning": "account-money gaps round to zero cents; quantity gaps round to zero at 1e-5 shares or contracts; all other numeric gaps round to zero at 1e-8",
"quantity_quantum": "0.00001",
"record_numeric_quantum": "0.00000001",
"rounding": "ROUND_HALF_EVEN",
"timestamp_domain": {
"cme_futures": "session date",
"crypto_perps_funding": "exact UTC event timestamp",
"etfs": "session date",
"fx_pairs": "session date",
"us_equities_panel": "session date"
}
},
"engine_commit": "7034236519cc0a99df6ef34a21d07ec2a81fc87c",
"engine_source_sha256": "8011ecdaf90807b4fe4fb5ada518a237311774b32891179bf1fad0a0baad8a58",
"evidence": {
"correctness": "https://github.com/ml4t/backtest/blob/0c3de46b1881ce6cb9fd72b672a1dba38ebc383b/validation/REAL_STRATEGY_RESULTS.json",
"performance": "https://github.com/ml4t/backtest/blob/0c3de46b1881ce6cb9fd72b672a1dba38ebc383b/validation/REAL_STRATEGY_PERFORMANCE.json",
"source_artifacts": [
{
"path": "validation/REAL_STRATEGY_RESULTS.json",
"sha256": "d7c6460fcb5ebf9ecf74c31d06e227996c66f488de46a5beaa2145104209916b"
},
{
"path": "validation/REAL_STRATEGY_PERFORMANCE.json",
"sha256": "7276dfba4356c4ce2e6e45c256e4431a4e01cd47ca5710e9d341893286929c40"
},
{
"path": "validation/LARGE_SCALE_RESULTS.json",
"sha256": "fb3a06a7c485bfb131dfef286ff743af18fa4ba673f5f1075245d7a9123cb3f5"
}
],
"synthetic_stress": "https://github.com/ml4t/backtest/blob/0c3de46b1881ce6cb9fd72b672a1dba38ebc383b/validation/LARGE_SCALE_RESULTS.json"
},
"frameworks": {
"backtrader": {
"access": "public",
"artifact": "backtrader-1.9.78.123-py2.py3-none-any.whl",
"display_name": "Backtrader",
"environment": ".venv-backtrader",
"immutable_id": "sha256:9a07a516b0de9155539a35c56e9404d8711dd7020b3d37b30495e83e1b9d5dfd",
"license": "GPL-3.0-or-later",
"package": "backtrader",
"profile": "backtrader_strict",
"python": "3.12 audit interpreter; upstream package metadata does not declare a range",
"python_env_var": "ML4T_BACKTRADER_PYTHON",
"required_scenarios": 17,
"scenario_matrix": true,
"source": "https://pypi.org/project/backtrader/1.9.78.123/",
"unsupported_scenarios": 0,
"version": "1.9.78.123"
},
"lean": {
"access": "public",
"artifact": "quantconnect/lean@sha256:ecd62b0e418d40d1d7c0cd95e90a94e397642a21d2c8810614830c8a4e9a8f70",
"cli_immutable_id": "sha256:eaa4c08f16295b76f005e429d9ca0d0453784dc1a40c1f5cbe5e50c02a05bd7c",
"cli_version": "1.0.228",
"display_name": "LEAN",
"environment": ".venv-lean",
"immutable_id": "sha256:ecd62b0e418d40d1d7c0cd95e90a94e397642a21d2c8810614830c8a4e9a8f70",
"license": "Apache-2.0",
"package": "lean",
"platform_artifact": "linux/amd64@sha256:cbe3f26b3f16c57be836b2cf913253d434f58e010c84ed038360d26b9df88307",
"profile": "lean",
"python": "3.11",
"python_env_var": "ML4T_LEAN_PYTHON",
"required_scenarios": 0,
"scenario_matrix": false,
"source": "https://github.com/QuantConnect/Lean",
"source_commit": "278fcb3d1b815b63ccadba68d7ae54422e34b792",
"unsupported_scenarios": 0,
"version": "18001"
},
"vectorbt_oss": {
"access": "public",
"artifact": "vectorbt-1.1.0.tar.gz",
"display_name": "VectorBT OSS",
"environment": ".venv-vectorbt-oss",
"immutable_id": "sha256:67a3b41466234485af70c18d201da105f1ebb2c1d1fac079db20059e45ddc73b",
"license": "Apache-2.0 WITH Commons-Clause",
"package": "vectorbt",
"profile": "vectorbt_oss_strict",
"python": ">=3.11,<3.15",
"python_env_var": "ML4T_VECTORBT_OSS_PYTHON",
"required_scenarios": 16,
"scenario_matrix": true,
"source": "https://pypi.org/project/vectorbt/1.1.0/",
"source_commit": "259d2d89fe2e7638baf3ca76c394937cd32b656d",
"unsupported_scenarios": 1,
"version": "1.1.0"
},
"vectorbt_pro": {
"access": "licensed",
"display_name": "VectorBT Pro",
"environment": ".venv-vectorbt-pro",
"immutable_id": "git:6e18cf0aa37849cfc20848f40f1d26ecfdc771b4",
"license": "Proprietary",
"package": "vectorbtpro",
"profile": "vectorbt_strict",
"python": ">=3.11",
"python_env_var": "ML4T_VECTORBT_PRO_PYTHON",
"required_scenarios": 17,
"scenario_matrix": true,
"source": "https://github.com/polakowo/vectorbt.pro",
"source_commit": "6e18cf0aa37849cfc20848f40f1d26ecfdc771b4",
"unsupported_scenarios": 0,
"version": "2026.6.27"
},
"zipline": {
"access": "public",
"artifact": "zipline_reloaded-3.1.1.tar.gz",
"display_name": "Zipline Reloaded",
"environment": ".venv-zipline",
"immutable_id": "sha256:4a305524616f7aad836f929e5a2ba5afc7db0e238757f47eb49487d9e2457a6f",
"license": "Apache-2.0",
"package": "zipline-reloaded",
"profile": "zipline_strict",
"python": ">=3.10",
"python_env_var": "ML4T_ZIPLINE_PYTHON",
"required_scenarios": 16,
"scenario_matrix": true,
"source": "https://pypi.org/project/zipline-reloaded/3.1.1/",
"source_commit": "09885a2ebc7567d40942c891b3879dc03c745070",
"unsupported_scenarios": 1,
"version": "3.1.1"
}
},
"library_commit": "0c3de46b1881ce6cb9fd72b672a1dba38ebc383b",
"performance_policy": {
"boundary": "engine call only",
"excluded": [
"input loading",
"model inference",
"target construction",
"adapter preparation",
"result extraction",
"serialization",
"reporting"
],
"interval": "10,000-draw percentile bootstrap of the sample median",
"measured_processes": 10,
"process_isolation": true,
"publication_scope": "only correctness-passing case-study/framework pairs",
"warmup_processes": 1
},
"performance_records": [
{
"case_study": "etfs",
"framework": "vectorbt_pro",
"framework_ci95_seconds": [
0.28554552848800085,
0.2885417409997899
],
"framework_median_seconds": 0.2872375610168092,
"framework_to_ml4t_ratio": 0.6924827859284183,
"ml4t_ci95_seconds": [
0.4141692244884325,
0.41945260000647977
],
"ml4t_median_seconds": 0.4147937925008591
},
{
"case_study": "etfs",
"framework": "vectorbt_oss",
"framework_ci95_seconds": [
0.17068579950137064,
0.17357376401196234
],
"framework_median_seconds": 0.17132284450053703,
"framework_to_ml4t_ratio": 0.4124410450618539,
"ml4t_ci95_seconds": [
0.41297478799242526,
0.41699278698069975
],
"ml4t_median_seconds": 0.4153874754993012
},
{
"case_study": "etfs",
"framework": "backtrader",
"framework_ci95_seconds": [
9.30285160850326,
9.423639220010955
],
"framework_median_seconds": 9.355300096503925,
"framework_to_ml4t_ratio": 21.7615755934312,
"ml4t_ci95_seconds": [
0.42605314050160814,
0.431600633499329
],
"ml4t_median_seconds": 0.4298999425082002
},
{
"case_study": "etfs",
"framework": "zipline",
"framework_ci95_seconds": [
3.8670725979900453,
3.9098115700180642
],
"framework_median_seconds": 3.8715068249875912,
"framework_to_ml4t_ratio": 6.126579592244658,
"ml4t_ci95_seconds": [
0.6284003740001936,
0.6377887904964155
],
"ml4t_median_seconds": 0.6319197794946376
},
{
"case_study": "etfs",
"framework": "lean",
"framework_ci95_seconds": [
2.4874195760057773,
2.599079799008905
],
"framework_median_seconds": 2.564114402513951,
"framework_to_ml4t_ratio": 3.418485618498456,
"ml4t_ci95_seconds": [
0.7486901020165533,
0.7566314754949417
],
"ml4t_median_seconds": 0.750073186980444
},
{
"case_study": "cme_futures",
"framework": "vectorbt_pro",
"framework_ci95_seconds": [
0.28389174649782944,
0.2887275889952434
],
"framework_median_seconds": 0.28636373148765415,
"framework_to_ml4t_ratio": 0.6631588833815962,
"ml4t_ci95_seconds": [
0.428688713509473,
0.43454156002553646
],
"ml4t_median_seconds": 0.43181768149952404
},
{
"case_study": "cme_futures",
"framework": "backtrader",
"framework_ci95_seconds": [
2.487967457011109,
2.526018163494882
],
"framework_median_seconds": 2.494809443000122,
"framework_to_ml4t_ratio": 5.811638815571466,
"ml4t_ci95_seconds": [
0.4273611745011294,
0.4325851899920963
],
"ml4t_median_seconds": 0.4292781300027855
},
{
"case_study": "crypto_perps_funding",
"framework": "lean",
"framework_ci95_seconds": [
2.7094629269995494,
2.8912153329874855
],
"framework_median_seconds": 2.801038935489487,
"framework_to_ml4t_ratio": 4.266156698399411,
"ml4t_ci95_seconds": [
0.6548837659938727,
0.6614908079791348
],
"ml4t_median_seconds": 0.6565719764912501
},
{
"case_study": "fx_pairs",
"framework": "vectorbt_pro",
"framework_ci95_seconds": [
0.2809414380026283,
0.28584351851895917
],
"framework_median_seconds": 0.28271306499664206,
"framework_to_ml4t_ratio": 1.9393634353319569,
"ml4t_ci95_seconds": [
0.14505504499538802,
0.14667728898348287
],
"ml4t_median_seconds": 0.1457762170030037
},
{
"case_study": "fx_pairs",
"framework": "vectorbt_oss",
"framework_ci95_seconds": [
0.13754021801287308,
0.1413268009928288
],
"framework_median_seconds": 0.1387957935075974,
"framework_to_ml4t_ratio": 0.9517668155264412,
"ml4t_ci95_seconds": [
0.1447887455142336,
0.14715092899859883
],
"ml4t_median_seconds": 0.14582962049462367
},
{
"case_study": "fx_pairs",
"framework": "backtrader",
"framework_ci95_seconds": [
0.4199030729942024,
0.43193558798520826
],
"framework_median_seconds": 0.42490502599684987,
"framework_to_ml4t_ratio": 2.919662876838548,
"ml4t_ci95_seconds": [
0.14518085900635924,
0.14739416650263593
],
"ml4t_median_seconds": 0.1455322220135713
},
{
"case_study": "fx_pairs",
"framework": "lean",
"framework_ci95_seconds": [
0.8773026489943732,
0.9533085440052673
],
"framework_median_seconds": 0.9130055215064203,
"framework_to_ml4t_ratio": 5.951507252400165,
"ml4t_ci95_seconds": [
0.1521106895088451,
0.15719534500385635
],
"ml4t_median_seconds": 0.1534074450028129
},
{
"case_study": "us_equities_panel",
"framework": "vectorbt_pro",
"framework_ci95_seconds": [
0.7874248115113005,
0.8377640749968123
],
"framework_median_seconds": 0.7949095129879424,
"framework_to_ml4t_ratio": 0.03867173809347579,
"ml4t_ci95_seconds": [
20.48596853449999,
20.599761563003995
],
"ml4t_median_seconds": 20.555308661496383
},
{
"case_study": "us_equities_panel",
"framework": "vectorbt_oss",
"framework_ci95_seconds": [
16.959977449994767,
17.023569879005663
],
"framework_median_seconds": 16.9949149099848,
"framework_to_ml4t_ratio": 0.8292416699730313,
"ml4t_ci95_seconds": [
20.453040241001872,
20.533734439013642
],
"ml4t_median_seconds": 20.49452593299793
},
{
"case_study": "us_equities_panel",
"framework": "backtrader",
"framework_ci95_seconds": [
494.2269169654901,
510.27303914300865
],
"framework_median_seconds": 495.55252874150756,
"framework_to_ml4t_ratio": 23.08159898786381,
"ml4t_ci95_seconds": [
21.38583242200548,
21.54328417198849
],
"ml4t_median_seconds": 21.46959268298815
},
{
"case_study": "us_equities_panel",
"framework": "zipline",
"framework_ci95_seconds": [
106.83352753649524,
109.14979357349512
],
"framework_median_seconds": 107.60890489349549,
"framework_to_ml4t_ratio": 4.862239476470224,
"ml4t_ci95_seconds": [
22.08169161299884,
22.23382121999748
],
"ml4t_median_seconds": 22.131551811515237
},
{
"case_study": "us_equities_panel",
"framework": "lean",
"framework_ci95_seconds": [
47.33300897400477,
48.01486862101592
],
"framework_median_seconds": 47.68267791901599,
"framework_to_ml4t_ratio": 1.8083761067475683,
"ml4t_ci95_seconds": [
26.22179457700986,
26.472655913996277
],
"ml4t_median_seconds": 26.36767746548867
}
],
"protocol_scope": {
"disabled_on_both_sides": [
"transaction costs",
"position rules"
],
"shared_inputs": "frozen model-derived targets and historical market data",
"tested": [
"target sizing",
"order sequencing",
"fills",
"cash and margin",
"funding where applicable",
"valuation"
]
},
"real_strategy_records": [
{
"case_study": "etfs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 2466,
"framework": "vectorbt_pro",
"input_bundle_sha256": "01f38079ce47821a5379d3769e86f4a2170b88033108153bfc0f928698e946db",
"negative_control_detected": true,
"profile": "vectorbt_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 1995
},
{
"case_study": "etfs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 2466,
"framework": "vectorbt_oss",
"input_bundle_sha256": "01f38079ce47821a5379d3769e86f4a2170b88033108153bfc0f928698e946db",
"negative_control_detected": true,
"profile": "vectorbt_oss_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 1995
},
{
"case_study": "etfs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 2433,
"framework": "backtrader",
"input_bundle_sha256": "01f38079ce47821a5379d3769e86f4a2170b88033108153bfc0f928698e946db",
"negative_control_detected": true,
"profile": "backtrader_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 1995
},
{
"case_study": "etfs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 2458,
"framework": "zipline",
"input_bundle_sha256": "01f38079ce47821a5379d3769e86f4a2170b88033108153bfc0f928698e946db",
"negative_control_detected": true,
"profile": "zipline_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 1995
},
{
"case_study": "etfs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 2457,
"framework": "lean",
"input_bundle_sha256": "01f38079ce47821a5379d3769e86f4a2170b88033108153bfc0f928698e946db",
"negative_control_detected": true,
"profile": "lean",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 1995
},
{
"case_study": "cme_futures",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000010",
"fill_gap": "0.00000000",
"fills": 3545,
"framework": "vectorbt_pro",
"input_bundle_sha256": "c7191027f550ef1be0c9528dac08e7c2bf6a76c86d935f593efeb1ad8b628c39",
"negative_control_detected": true,
"profile": "vectorbt_futures_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000007",
"valuation_timestamps_match": true,
"valuations": 1595
},
{
"case_study": "cme_futures",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000015",
"fill_gap": "0.00000000",
"fills": 3376,
"framework": "backtrader",
"input_bundle_sha256": "c7191027f550ef1be0c9528dac08e7c2bf6a76c86d935f593efeb1ad8b628c39",
"negative_control_detected": true,
"profile": "backtrader_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000015",
"valuation_timestamps_match": true,
"valuations": 1595
},
{
"case_study": "crypto_perps_funding",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 8408,
"framework": "lean",
"input_bundle_sha256": "2acee3c8542043266e6f9c0dfc9434c95b4469ef6fcaf0556efc569fc9721cdd",
"negative_control_detected": true,
"profile": "lean_crypto_future",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 2426
},
{
"case_study": "fx_pairs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 279,
"framework": "vectorbt_pro",
"input_bundle_sha256": "48922296cea03bfc9867a9c4e1a1d352a0bd54c0b48671e3ca8d1fdddb95d762",
"negative_control_detected": true,
"profile": "vectorbt_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 2108
},
{
"case_study": "fx_pairs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 279,
"framework": "vectorbt_oss",
"input_bundle_sha256": "48922296cea03bfc9867a9c4e1a1d352a0bd54c0b48671e3ca8d1fdddb95d762",
"negative_control_detected": true,
"profile": "vectorbt_oss_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 2108
},
{
"case_study": "fx_pairs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 279,
"framework": "backtrader",
"input_bundle_sha256": "48922296cea03bfc9867a9c4e1a1d352a0bd54c0b48671e3ca8d1fdddb95d762",
"negative_control_detected": true,
"profile": "backtrader_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 2108
},
{
"case_study": "fx_pairs",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000000",
"fill_gap": "0.00000000",
"fills": 279,
"framework": "lean",
"input_bundle_sha256": "48922296cea03bfc9867a9c4e1a1d352a0bd54c0b48671e3ca8d1fdddb95d762",
"negative_control_detected": true,
"profile": "lean",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000000",
"valuation_timestamps_match": true,
"valuations": 2108
},
{
"case_study": "us_equities_panel",
"equity_gap": "0.00",
"equity_raw_gap": "0.00001950",
"fill_gap": "0.00000000",
"fills": 54295,
"framework": "vectorbt_pro",
"input_bundle_sha256": "02926d8a7f1c1f5b4855b2393d1763885288ef64950d5cf521ca96c61f454d88",
"negative_control_detected": true,
"profile": "vectorbt_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00001880",
"valuation_timestamps_match": true,
"valuations": 4146
},
{
"case_study": "us_equities_panel",
"equity_gap": "0.00",
"equity_raw_gap": "0.00001910",
"fill_gap": "0.00000000",
"fills": 49120,
"framework": "vectorbt_oss",
"input_bundle_sha256": "02926d8a7f1c1f5b4855b2393d1763885288ef64950d5cf521ca96c61f454d88",
"negative_control_detected": true,
"profile": "vectorbt_oss_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00001870",
"valuation_timestamps_match": true,
"valuations": 4146
},
{
"case_study": "us_equities_panel",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000170",
"fill_gap": "0.00000000",
"fills": 54242,
"framework": "backtrader",
"input_bundle_sha256": "02926d8a7f1c1f5b4855b2393d1763885288ef64950d5cf521ca96c61f454d88",
"negative_control_detected": true,
"profile": "backtrader_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000160",
"valuation_timestamps_match": true,
"valuations": 4146
},
{
"case_study": "us_equities_panel",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000190",
"fill_gap": "0.00000000",
"fills": 54259,
"framework": "zipline",
"input_bundle_sha256": "02926d8a7f1c1f5b4855b2393d1763885288ef64950d5cf521ca96c61f454d88",
"negative_control_detected": true,
"profile": "zipline_strict",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000030",
"valuation_timestamps_match": true,
"valuations": 4027
},
{
"case_study": "us_equities_panel",
"equity_gap": "0.00",
"equity_raw_gap": "0.00000460",
"fill_gap": "0.00000000",
"fills": 54265,
"framework": "lean",
"input_bundle_sha256": "02926d8a7f1c1f5b4855b2393d1763885288ef64950d5cf521ca96c61f454d88",
"negative_control_detected": true,
"profile": "lean",
"status": "pass",
"terminal_gap": "0.00",
"terminal_raw_gap": "0.00000420",
"valuation_timestamps_match": true,
"valuations": 4027
}
],
"schema_version": 2,
"scope": {
"case_protocols": {
"fx_pairs": "USD-quoted pairs from the frozen target stream, preserving native USD valuation in every required engine"
},
"case_studies": [
"etfs",
"cme_futures",
"crypto_perps_funding",
"fx_pairs",
"us_equities_panel"
],
"frameworks": [
"vectorbt_pro",
"vectorbt_oss",
"backtrader",
"zipline",
"lean"
],
"real_strategy_equivalence_gate_passed": true,
"required_pairs": 17,
"unsupported_pairs": 8
},
"synthetic_stress": {
"assets": 250,
"bars": 1260000,
"comparison_policy": {
"account_money_quantum": "0.01",
"record_numeric_quantum": "1E-8"
},
"generated_at": "2026-09-03T08:44:03.035191+00:00",
"records": [
{
"fills": 423313,
"framework": "vectorbt_pro",
"intents": 427790,
"status": "pass",
"terminal_value": 1285886.32,
"trades": 222751
},
{
"fills": 417941,
"framework": "vectorbt_oss",
"intents": 427790,
"status": "pass",
"terminal_value": 1345348.85,
"trades": 211322
},
{
"fills": 343813,
"framework": "backtrader",
"intents": 427790,
"status": "pass",
"terminal_value": -9166273.56,
"trades": 182019
},
{
"fills": 427696,
"framework": "zipline",
"intents": 427790,
"status": "pass",
"terminal_value": 10504095.9,
"trades": 226434
},
{
"fills": 361297,
"framework": "lean",
"intents": 427790,
"status": "pass",
"terminal_value": 184538.13,
"trades": 191297
}
],
"sessions": 5040,
"synthetic": true
},
"unsupported_records": [
{
"case_study": "cme_futures",
"framework": "vectorbt_oss",
"reason": "no native futures contract multiplier and margin-account model",
"source": "https://vectorbt.dev/api/portfolio/base/",
"status": "unsupported"
},
{
"case_study": "cme_futures",
"framework": "zipline",
"reason": "the frozen workload has continuous root series but no dated contract chain or roll map",
"source": "https://zipline.ml4trading.io/api-reference.html",
"status": "unsupported"
},
{
"case_study": "cme_futures",
"framework": "lean",
"reason": "the frozen workload has continuous root series but no dated contract chain or roll map",
"source": "https://www.quantconnect.com/docs/v2/writing-algorithms/securities/asset-classes/futures",
"status": "unsupported"
},
{
"case_study": "crypto_perps_funding",
"framework": "vectorbt_pro",
"reason": "no native perpetual-futures funding and margin-account model",
"source": "https://vectorbt.pro/features/portfolio/",
"status": "unsupported"
},
{
"case_study": "crypto_perps_funding",
"framework": "vectorbt_oss",
"reason": "no native perpetual-futures funding and margin-account model",
"source": "https://vectorbt.dev/api/portfolio/base/",
"status": "unsupported"
},
{
"case_study": "crypto_perps_funding",
"framework": "backtrader",
"reason": "no native perpetual-futures funding model",
"source": "https://www.backtrader.com/docu/commission-schemes/commission-schemes/",
"status": "unsupported"
},
{
"case_study": "crypto_perps_funding",
"framework": "zipline",
"reason": "no crypto perpetual-futures asset and funding model",
"source": "https://zipline.ml4trading.io/api-reference.html",
"status": "unsupported"
},
{
"case_study": "fx_pairs",
"framework": "zipline",
"reason": "no native spot-forex asset, currency cashbook, or conversion model",
"source": "https://zipline.ml4trading.io/api-reference.html",
"status": "unsupported"
}
]
}
```Reproduit dans son intégralité avec attribution, conformément à la licence de la source. Licence: MIT
Ce résumé a été rédigé par l’agent de recherche de Stratmill à partir de la source originale ; il n’en est pas une copie.