تائید شدہ ٹریڈنگ اسٹریٹجیز پر Backtrader اور Zipline کا موازنہ
خلاصہ
یہ آڈٹ حقیقی اسٹریٹیجی کیسز پر Backtrader اور Zipline کا ML4T سے موازنہ کرتا ہے، اور صرف ایسے اثاثہ اور معاہدہ امتزاج استعمال کرتا ہے جنہیں ہر انجن اور منجمد ڈیٹا بنڈل مقامی طور پر ظاہر کر سکتے ہیں۔ اس میں دونوں انجنوں کے لیے ETF مختص اور US ایکویٹی پینل، نیز Backtrader کے لیے CME فیوچرز اور USD کے کوٹ والی FX مختص شامل ہے۔ کرپٹو پرپیچوئل فنڈنگ شامل نہیں، کیونکہ کسی انجن میں مطلوبہ مقامی معاونت موجود نہیں۔ آڈٹ مماثل فلز، قدر پیمائی کے اوقات اور اکاؤنٹ ویلیو کا موازنہ رپورٹ کرتا ہے، اور بتاتا ہے کہ تمام چھ مطلوبہ قطاریں کامیاب ہیں۔
چلنے کا وقت صرف انجن کے عمل درآمد کے لیے ان قطاروں پر ناپا گیا ہے جو درستگی کی جانچ میں کامیاب ہوں؛ ڈیٹا کی تیاری اور اڈاپٹر کا کام وقت کی حد میں شامل نہیں۔ رپورٹ شدہ تناسب کو دوسری اسٹریٹجیز یا مشینوں پر لاگو نہیں کرنا چاہیے۔ مصنوعی دباؤ کے ٹیسٹ ثانوی، جوڑی وار مطابقت کی شہادت دیتے ہیں: دونوں انجن پروفائل اپنے مماثل ML4T پروفائل کے مقابلے میں کامیاب ہیں، جبکہ مختلف آخری قدریں فریم ورک کے الگ طریقۂ کار کی عکاسی کرتی ہیں۔ یہ ٹیسٹ پیمانے اور واقعات کو سنبھالنے کی جانچ کرتے ہیں، حقیقی ڈیٹا پر اسٹریٹیجی معاونت کی نہیں۔
اہم خیالات
- فریم ورکس کا موازنہ صرف ان اسٹریٹجیز اور اثاثہ ماڈلز پر کریں جنہیں دونوں مقامی طور پر ظاہر کر سکتے ہیں۔
- آڈٹ فل کی درستگی، اکاؤنٹ ویلیو اور قدر پیمائی کے اوقات کو الگ الگ برابری کی شرائط کے طور پر جانچتا ہے۔
- غیر تائید شدہ اثاثہ قطاریں کامیابی کے مخرج میں شامل نہیں۔
- صرف انجن کا وقت ڈیٹا اور اڈاپٹر کی تیاری کو خارج کرتا ہے؛ اسے مختلف مشینوں یا اسٹریٹجیز پر لاگو نہ کریں۔
- مصنوعی دباؤ کے ٹیسٹ جوڑی وار مطابقت کی شہادت دیتے ہیں، جبکہ اسٹریٹیجی کا موازنہ حقیقی ڈیٹا کی قطاروں سے ہوتا ہے۔
ٹیگز
مکمل متن
# Backtrader and Zipline on Current Case-Study Strategies
# Backtrader and Zipline on Current Case-Study Strategies
This notebook reports the Backtrader and Zipline Reloaded rows from the current real-strategy
audit. It does not infer asset support from ML4T's configurability: a pair is included only when
the external engine and frozen bundle can express the same native contract.
**Learning objectives**
- Compare Backtrader and Zipline against ML4T on supported real strategies
- Apply a monetary comparison unit to account values without weakening fill comparison
- Interpret the measured engine-only runtime boundary
- Use synthetic stress evidence as a secondary conformance result
**Book reference**: Chapter 16, Section 16.3
## Setup
```python
"""Current Backtrader and Zipline parity evidence."""
import json
import polars as pl
from IPython.display import display
from utils.paths import get_chapter_dir
```
```python
# Production defaults - Papermill injects overrides after this cell
ROUND_SECONDS = 3
```
```python
AUDIT_PATH = get_chapter_dir(16) / "resources" / "framework_parity_audit.json"
audit = json.loads(AUDIT_PATH.read_text(encoding="utf-8"))
FRAMEWORKS = ["backtrader", "zipline"]
FRAMEWORK_NAMES = {
key: f"{audit['frameworks'][key]['display_name']} {audit['frameworks'][key]['version']}"
for key in FRAMEWORKS
}
CASE_NAMES = {
"etfs": "ETF allocation",
"cme_futures": "CME futures",
"crypto_perps_funding": "Crypto perpetual funding",
"fx_pairs": "FX allocation (USD-quoted pairs)",
"us_equities_panel": "US equity panel",
}
```
## 1. Required comparisons
```python
results = (
pl.DataFrame(audit["real_strategy_records"])
.filter(pl.col("framework").is_in(FRAMEWORKS))
.with_columns(
pl.col("case_study").replace_strict(CASE_NAMES).alias("strategy"),
pl.col("framework").replace_strict(FRAMEWORK_NAMES).alias("engine"),
)
.select(
"strategy",
"engine",
"status",
"fills",
"valuations",
"valuation_timestamps_match",
"equity_gap",
"equity_raw_gap",
"terminal_gap",
"terminal_raw_gap",
)
.sort("strategy", "engine")
)
assert results.height == 6
assert results.filter(pl.col("status") == "pass").height == 6
assert results["valuation_timestamps_match"].all()
display(results)
```
Backtrader and Zipline both participate in the ETF and US equity-panel comparisons. Backtrader
also participates in the CME and USD-quoted foreign-exchange comparisons. The fill stream is
compared at eight-decimal price precision and five-decimal quantity precision, while account
values must round to the same cent. Zipline has no required CME or spot-FX row because the frozen
inputs do not map to its native asset models.
## 2. Unsupported asset models
```python
unsupported = (
pl.DataFrame(audit["unsupported_records"])
.filter(pl.col("framework").is_in(FRAMEWORKS))
.with_columns(
pl.col("case_study").replace_strict(CASE_NAMES).alias("strategy"),
pl.col("framework").replace_strict(FRAMEWORK_NAMES).alias("engine"),
)
.select("strategy", "engine", "reason")
.sort("strategy", "engine")
)
display(unsupported)
```
Neither engine is credited with crypto-perpetual funding support it does not natively provide.
Unsupported rows are excluded from the pass denominator.
## 3. Engine-only timing
Timing is retained only for correctness-passing rows and covers the engine call only.
```python
timing = (
pl.DataFrame(audit["performance_records"])
.filter(pl.col("framework").is_in(FRAMEWORKS))
.with_columns(
pl.col("case_study").replace_strict(CASE_NAMES).alias("strategy"),
pl.col("framework").replace_strict(FRAMEWORK_NAMES).alias("engine"),
pl.col("framework_median_seconds").round(ROUND_SECONDS).alias("external_seconds"),
pl.col("ml4t_median_seconds").round(ROUND_SECONDS).alias("ml4t_seconds"),
pl.col("framework_to_ml4t_ratio").round(2).alias("external_div_ml4t"),
)
.select("strategy", "engine", "external_seconds", "ml4t_seconds", "external_div_ml4t")
)
assert timing.height == 6
display(timing)
```
The timer excludes data and adapter preparation. The ratios should not be applied to other
strategies or machines.
## 4. Synthetic stress evidence
```python
stress = (
pl.DataFrame(audit["synthetic_stress"]["records"])
.filter(pl.col("framework").is_in(FRAMEWORKS))
.with_columns(pl.col("framework").replace_strict(FRAMEWORK_NAMES).alias("engine"))
.select("engine", "intents", "fills", "trades", "terminal_value", "status")
)
display(stress)
```
Both synthetic stress rows pass against their matching ML4T profiles. Their terminal values differ
because the profiles reproduce different framework conventions. The test is pairwise: ML4T versus
Backtrader and ML4T versus Zipline. The workload tests scale and event conventions, while the
required rows above determine the real-data comparison.ماخذ کا حوالہ دیتے ہوئے مکمل متن دکھایا گیا ہے، ماخذ کے لائسنس کے تحت۔ لائسنس: MIT
یہ خلاصہ اصل ماخذ سے Stratmill کے تحقیقی ایجنٹ نے لکھا ہے؛ یہ ماخذ کی نقل نہیں۔