Chuyển đến nội dung
Tất cả tài liệu trong thư viện

Kiểm toán tính tương đương LEAN giữa các chiến lược giao dịch

Notebook Machine Learning for Trading

Tóm tắt

Sổ tay này xem xét các kết quả được giữ lại từ cuộc kiểm toán chiến lược thực, so sánh bộ máy LEAN với các cấu hình Backtest ML4T tương ứng. Sổ tay xác định các khối lượng công việc theo loại tài sản được hỗ trợ bởi đầu vào đã cố định, đồng thời báo cáo bằng chứng về tính tương đương qua khớp lệnh, định giá, dấu thời gian định giá, chênh lệch vốn chủ sở hữu và giá trị cuối kỳ. Khối lượng công việc hợp đồng tương lai CME bị loại trừ vì các mức giá liên tục hiện có của mã gốc không có chuỗi hợp đồng theo ngày và ánh xạ chuyển hợp đồng cần thiết cho một gói đăng ký LEAN gốc.

Notebook cũng so sánh thời gian chỉ tính riêng công cụ, được đo quanh lời gọi công cụ và loại trừ việc tải đầu vào, suy luận, dựng mục tiêu, chuẩn bị và lập báo cáo. Các số liệu này chỉ áp dụng cho những phiên bản, đầu vào và ranh giới đo thời gian đã ghim cố định. Một dòng kiểm thử áp lực tổng hợp được trình bày như chẩn đoán quy mô và hồ sơ, tách biệt với các phép so sánh chiến lược thực tế. Notebook cung cấp kết quả kiểm toán, không đưa ra tuyên bố chung về tốc độ hay tính tương đương của khuôn khổ; phát hiện về tính tương đương chỉ giới hạn trong các bài toán được hỗ trợ và gói đầu vào đã cố định.

Ý chính

  • Cuộc kiểm toán so sánh LEAN với Backtest ML4T về khớp lệnh, định giá, dấu thời gian và kết quả cuối kỳ.
  • Đầu vào đã cố định hỗ trợ các bài toán ETF, hợp đồng vĩnh cửu tiền mã hóa, USD định giá bằng FX và cổ phiếu US.
  • Trường hợp hợp đồng tương lai CME không được hỗ trợ vì thiếu chuỗi hợp đồng có ngày tháng và bản đồ chuyển tháng cần thiết.
  • Thời gian chỉ tính riêng công cụ loại trừ chuẩn bị dữ liệu, suy luận, công việc bộ điều hợp và lập báo cáo.
  • Kết quả kiểm thử áp lực tổng hợp dùng làm chẩn đoán và cần được phân biệt với bằng chứng từ chiến lược thực tế.

Thẻ

Toàn văn
# LEAN Parity on Current Case-Study Strategies


# LEAN Parity on Current Case-Study Strategies

This notebook isolates the LEAN rows from the current real-strategy audit. It uses retained results
generated by the native LEAN engine and the matching ML4T Backtest profiles. The shared inputs are
frozen before engine execution.

**Learning objectives**

- Identify which selected asset classes are valid LEAN comparisons
- Read LEAN parity across fills, valuations, and terminal value
- Interpret LEAN engine-only timing on the measured strategies
- Keep synthetic stress evidence separate from real-strategy equivalence

**Book reference**: Chapter 16, Section 16.3

## Setup

```python
"""Current LEAN parity evidence."""

import json

import polars as pl
from IPython.display import Markdown, 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"))
lean = audit["frameworks"]["lean"]
LEAN_NAME = f"{lean['display_name']} {lean['version']}"
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",
}
```

```python
display(Markdown(f"**Pinned engine:** {LEAN_NAME} with ML4T profile `{lean['profile']}`"))
```

## 1. Supported real strategies

LEAN is required for the ETF, crypto-perpetual, USD-quoted foreign-exchange, and US equity-panel
workloads. The CME row is unsupported for this particular frozen bundle: it contains continuous
root prices but lacks the dated contract chain and roll map needed to construct a native LEAN
futures subscription.

```python
lean_results = (
    pl.DataFrame(audit["real_strategy_records"])
    .filter(pl.col("framework") == "lean")
    .with_columns(pl.col("case_study").replace_strict(CASE_NAMES).alias("strategy"))
    .select(
        "strategy",
        "status",
        "fills",
        "valuations",
        "valuation_timestamps_match",
        "equity_gap",
        "equity_raw_gap",
        "terminal_gap",
        "terminal_raw_gap",
        "negative_control_detected",
    )
)

assert lean_results.height == 4
assert lean_results["status"].to_list() == ["pass"] * 4
assert lean_results["valuation_timestamps_match"].all()
assert lean_results["negative_control_detected"].all()

display(lean_results)
```

```python
lean_unsupported = (
    pl.DataFrame(audit["unsupported_records"])
    .filter(pl.col("framework") == "lean")
    .with_columns(pl.col("case_study").replace_strict(CASE_NAMES).alias("strategy"))
    .select("strategy", "reason")
)
display(lean_unsupported)
```

The table reports the complete fill and valuation counts for each supported workload. LEAN uses
native equity, crypto-future, and foreign-exchange securities. The audit does not convert the
continuous CME roots into a different instrument merely to add a LEAN row.

## 2. Engine-only timing

The timer starts immediately before the engine call and stops when it returns. One warmup and ten
process-isolated samples are used. Input loading, model inference, target construction, adapter
preparation, result extraction, and reporting are outside the timed region.

```python
lean_timing = (
    pl.DataFrame(audit["performance_records"])
    .filter(pl.col("framework") == "lean")
    .with_columns(
        pl.col("case_study").replace_strict(CASE_NAMES).alias("strategy"),
        pl.col("framework_median_seconds").round(ROUND_SECONDS).alias("lean_seconds"),
        pl.col("ml4t_median_seconds").round(ROUND_SECONDS).alias("ml4t_seconds"),
        pl.col("framework_to_ml4t_ratio").round(2).alias("lean_div_ml4t"),
    )
    .select("strategy", "lean_seconds", "ml4t_seconds", "lean_div_ml4t")
)
display(lean_timing)
```

The timing result applies to these pinned versions, bundles, and engine boundaries. It is not a
general LEAN performance claim.

## 3. Synthetic stress remains diagnostic

```python
lean_stress = (
    pl.DataFrame(audit["synthetic_stress"]["records"])
    .filter(pl.col("framework") == "lean")
    .select("intents", "fills", "trades", "terminal_value", "status")
)
display(lean_stress)
```

The retained stress row tests scale and the calibrated LEAN profile on generated inputs. The
supported rows above provide the real-data evidence.

Hiển thị toàn văn kèm ghi nguồn theo giấy phép của tài liệu gốc. Giấy phép: MIT

Bản tóm tắt này do tác nhân nghiên cứu của Stratmill biên soạn từ tài liệu gốc; đây không phải bản sao của tài liệu.