التعرض للأسهم الصغيرة وسعة إشارة أسهم US
الملخص
تبحث هذه التجربة في مدى اعتماد إشارة شهرية مختارة للشراء والبيع على المكشوف في أسهم US على أسهم الشركات الصغيرة. وتطبق مرشحًا متأخرًا للقيمة السوقية للأسهم يستبعد أصغر ربع من تنبؤات التحقق، ثم تعيد تشغيل بناء المحفظة وافتراضات التكاليف نفسها دون إعادة تدريب النموذج. ويضم الكون المفلتر أصولًا أقل، بينما يبقى معدل الدوران قريبًا من نتيجة الكون الكامل.
ينخفض شارب المعلن من 4.27 إلى 2.24، ويتراجع معامل المعلومات من 0.074 إلى 0.048، ويتعمق أقصى تراجع من نحو 15% إلى 52%. وتفسر الوثيقة ذلك بوصفه دليلًا على ضعف جودة الإشارة والتنويع معًا عند استبعاد الشركات الصغيرة، ما يعزز المخاوف من أن افتراضات التكاليف لكون واسع قد تقلل من احتكاكات التنفيذ. وهذه نتائج تحقق لمرشح على مستوى الإشارة؛ ولا توضح أداء نموذج أُعيد تدريبه على الكون المقيد. كما تحد قائمة الأصول الأقصر من قوة الاستنتاجات بشأن السعة القابلة للتنفيذ.
الأفكار الرئيسية
- يؤدي استبعاد الربع الأصغر من حيث القيمة السوقية إلى خفض ملموس لشارب التحقق ومعامل المعلومات المعلنين.
- تفلتر التجربة التنبؤات الحالية ولا تعيد تدريب النموذج على الكون المقيد.
- يتفاقم أقصى تراجع بعد الفلترة، بما يتسق مع انخفاض التنويع المقطعي.
- يشير تقارب معدل الدوران قبل الفلترة وبعدها إلى أن عملية بناء المحفظة ظلت متقاربة عمومًا.
- يلزم نموذج معاد تدريبه لتحديد ما إذا كان بوسعه العثور على إشارات أقوى بين الأسهم الأكبر قيمة.
الوسوم
النص الكامل
# run_us_firm_characteristics_20260504T225521.json
```json
{
"model": "deepseek/deepseek-v4-pro",
"case_study": "us_firm_characteristics",
"sandbox": "/tmp/us_firms_operator_sandbox_20260504T225504",
"iterations": 27,
"total_in_tokens": 1870480,
"total_out_tokens": 11571,
"final_summary": "## \u00a720.9 Next Step Executed: Top-3-Quartile Market-Cap Filter\n\n### What I Did\nFiltered the validation predictions from the rank-1 model (gbm/leaves_63_binary, `fwd_class_1m`, prediction_hash=`eeadf802c9ab`) to **exclude the bottom quartile by lagged market equity (LME)** at each monthly rebalance date, then re-ran the **identical backtest spec** (`cross_sectional_percentile`, percentile=95, top_k=20, long-short, era-dependent costs at 7.5+5 bps/leg) that produced the chapter's baseline Sharpe of 4.27.\n\nThis was a **signal-level filter only** \u2014 no retraining. The LME data came from `features/financial.parquet` column `LME`.\n\n### Results\n\n| Metric | Baseline (full universe) | Top-3-Quartile Mcap | Delta |\n|--------|--------------------------|---------------------|-------|\n| **Sharpe** | 4.27 [3.51, 5.15] | **2.24 [1.55, 3.07]** | **\u22122.03 (\u221248%)** |\n| **Max Drawdown** | \u22120.149 | **\u22120.521** | \u22120.372 |\n| **Turnover** | 1.77 | 1.80 | +0.03 |\n| **IC mean (HAC)** | 0.074 [0.058, 0.091] | **0.048 [0.032, 0.064]** | \u22120.026 (\u221235%) |\n| **IC t(HAC)** | 8.73 | 5.77 | \u22122.95 |\n| **IC IR** | 1.02 | 0.63 | \u22120.39 |\n| **Assets/period** | 2,291 | 1,718 | \u221225% |\n| **IC % positive** | 88% | 73% | \u221215pp |\n\n### Interpretation\n\n1. **Sharpe does NOT survive intact.** Removing bottom-quartile small-cap stocks cuts the strategy Sharpe roughly in half (4.27 \u2192 2.24). This confirms the chapter's binding-constraint claim: the long and short legs both cluster in small-cap names, and universe-mean cost assumptions materially understate the friction floor.\n\n2. **Sharpe does survive in absolute terms.** The filtered Sharpe of 2.24 [1.55, 3.07] is still strongly positive and statistically distinguishable from zero. The strategy has genuine alpha even after a realistic capacity filter.\n\n3. **IC drop explains the Sharpe drop.** The upstream IC fell from 0.074 to 0.048 \u2014 consistent with the Fundamental Law: smaller universe = fewer independent bets = lower IR. The IC remains credible (t=5.77, CI excludes zero), but the erosion is material.\n\n4. **Max drawdown deepens dramatically** (\u221215% \u2192 \u221252%), consistent with fewer stocks providing less diversification within each leg.\n\n5. **Turnover is unchanged** (1.77 \u2192 1.80), as expected for a signal-level filter that doesn't change the portfolio construction logic.\n\n### Skills Used\n- `run-backtest` (ml4t-backtest): event-driven backtest with era-dependent costs\n- `information-coefficient` (ml4t-diagnostic): HAC-adjusted IC, IC_IR\n- `deflated-sharpe` (ml4t-diagnostic): PSR p-value via bootstrap\n- `registry-system`: content-addressed experiment tracking\n\n### Honest Recommendation\nThe rank-1 Sharpe of 4.27 is **partially a small-cap artifact**. Under realistic capacity constraints (top-3-quartile mcap only), the Sharpe lands at ~2.2 \u2014 still viable, but the chapter's \"friction floor\" analysis (\u00a720.1 binding constraint) is validated. A follow-up experiment should retrain on the filtered universe (not just signal-filter) to see if the model learns to find alpha in larger-cap names.\n",
"trace": [
{
"turn": 1,
"type": "tool_call",
"name": "read_file",
"args": {
"path": "/tmp/us_firms_operator_sandbox_20260504T225504/us_firm_characteristics/README.md"
},
"result": {
"path": "/tmp/us_firms_operator_sandbox_20260504T225504/us_firm_characteristics/README.md",
"size_bytes": 7843,
"truncated": false,
"content": "# Case Study: US Firm Characteristics\n\nThis case study uses anonymized monthly firm characteristics from NASDAQ Data Link to test the canonical factor investing question: can ML improve on traditional long-short decile sorts when point-in-time accounting lags, survivorship bias, and era-dependent transaction costs are treated as binding constraints. With 57 firm-level characteristics spanning valuation, profitability, momentum, and risk across roughly 2,500 stocks (1996\u20132016), this is the most feature-rich fundamental dataset in the book and the natural home for latent factor models.\n\nThe case study runs at monthly cadence with a 6-month accounting lag enforced for point-in-time compliance, equal-weight long-short decile portfolios, dollar-neutral construction, and an era-dependent cost grid (pre-decimalization spreads 15\u201330 bps; post-2001 spreads 5\u201315 bps). Ten CV folds with 10-year training windows and 1-year validation provide the deepest cross-validation in the book; the calendar 2016 holdout supplies 12 monthly out-of-sample observations.\n\nThe teaching arc threads four claims that must be evaluated jointly: regression-vs-classification labels move IC by an order of magnitude on the same features, GBM and the supervised autoencoder both produce credible standalone signals while linear and IPCA do not, holdout decay over 12 periods is consistent with material erosion under wide CIs rather than a precise estimate, and the long-short legs cluster in small-cap, wide-spread, high-idio-vol names so the universe-mean cost grid understates the friction the strategy actually faces.\n\n## At a Glance\n\n| Property | Value |\n|----------|-------|\n| Asset Class | US equities (fundamental characteristics, long-short) |\n| Frequency | Monthly |\n| Universe | ~2,500 stocks (price > $5, ADV > $1M) |\n| History | 1996\u20132016 |\n| Primary Label | fwd_ret_1m |\n| CV Folds | 10 (10Y train, 1Y val) |\n| Cost Model | Material (5\u201320 bps per leg, era-dependent) |\n\n## Pipeline\n\n| Stage | Notebook | Chapter | Description |\n|-------|----------|---------|-------------|\n| Setup | [`01_setup`](01_setup.ipynb) | Ch6 | Monthly decision cadence, 6-month accounting lag, long-short decile protocol |\n| Labels | [`02_labels`](02_labels.ipynb) | Ch7 | 1-month forward returns with winsorized regression and median-split classification variants |\n| Features | [`03_financial_features`](03_financial_features.ipynb) | Ch8 | 57 firm characteristics across value, quality, momentum, risk, and investment families |\n| Evaluation | [`04_evaluation`](04_evaluation.ipynb) | Ch7\u20139 | HAC-adjusted feature IC with FDR control across the characteristic panel |\n| Linear | [`05_linear`](05_linear.ipynb) | Ch11 | Ridge, LASSO, ElasticNet, and logistic baselines on the characteristic matrix |\n| GBM | [`06_gbm`](06_gbm.ipynb) | Ch12 | LightGBM testing non-linear value-quality-momentum interactions |\n| Tabular DL | [`07_tabular_dl`](07_tabular_dl.ipynb) | Ch12 | TabM rank-1 adapter MLP ensemble on the flat characteristic matrix |\n| Latent Factors | [`08_latent_factors`](08_latent_factors.ipynb) | Ch14 | IPCA, CAE, SDF, and SAE factor extraction on the characteristic panel |\n| Causal DML | [`09_causal_dml`](09_causal_dml.ipynb) | Ch15 | Does 12-month momentum cause future returns under FF5 confounder controls? |\n| Model Analysis | [`10_model_analysis`](10_model_analysis.ipynb) | n/a | Cross-family IC comparison, conformal coverage, fold-stability diagnostics |\n| Backtest | [`11_backtest`](11_backtest.ipynb) | Ch16 | Long-short decile strategy simulation across the prediction-signal sweep |\n| Portfolio | [`12_portfolio_management`](12_portfolio_management.ipynb) | Ch17 | Allocator and concentration sweep on the deep cross-section |\n| Costs | [`13_costs`](13_costs.ipynb) | Ch18 | Era-dependent cost grid spanning pre- and post-decimalization |\n| Risk | [`14_risk_management`](14_risk_management.ipynb) | Ch19 | Position-level and portfolio-level risk overlays on the monthly cadence |\n| Strategy Analysis | [`15_strategy_analysis`](15_strategy_analysis.ipynb) | Ch20 | End-to-end strategy assessment with uncertainty-aware metrics |\n\n## Key Results\n\nA high-Sharpe validation result whose holdout decay carries wide CIs by construction (12 monthly observations) and whose deployable edge is bounded by the small-cap concentration of the selected legs.\n\n**Signal direction**: The configuration with the highest validation Sharpe (gbm/leaves_63_binary on the classification variant `fwd_class_1m`) carries upstream IC +0.084 [+0.063, +0.104] (HAC t\u22488.1) on the underlying classification scores. On the regression label `fwd_ret_1m`, gbm/leaves_15_mae and the supervised autoencoder (sae) both clear HAC credibility (IC \u2248+0.080 and \u2248+0.062 with CIs that exclude zero), while linear, IPCA, and CAE straddle zero or sit on the negative side. Across families the evidence favors classification labels and supervised non-linear extractors over linear regression on raw returns.\n\n**Strategy-stage performance with CIs**: Validation Sharpe 4.27 [3.51, 5.15] (PSR p\u22480). Selection-adjusted DSR is 0.71 (p\u22480) across 60 backtests in the validation sweep, with the configuration sitting well above the expected-max Sharpe of 0.52: selection-adjusted edge is statistically distinguishable from zero on the positive side. PBO and reality-check are not registered for this lineage; DSR alone carries the per-CS selection-adjustment burden.\n\n**Holdout closure**: The retrain pairs against the validation lineage by training_hash. Within-lineage val\u2192ho Sharpe diff \u22124.03 [\u22129.82, +0.13] (p=0.0875): the upper bound just crosses zero on a 12-period truncated draw, classifying as straddles_zero, but the asymmetry and prob_challenger_wins=0.027 are consistent with material decay rather than a wide null. The strategy versus equal-weight holdout-window benchmark Sharpe diff is +0.95 [\u22123.10, +6.32] (p=0.63), statistically indistinguishable from random allocation in the holdout window (the 2016 EW Sharpe of 1.41 is unusually high).\n\n**Friction floor**: Across the protocol per-leg range (5\u201320 bps) the lineage Sharpe stays strongly positive. The extended grid (0\u2013500 bps one-way \u00d7 10\u2013100% turnover) quantifies the binding constraint: both the long and short legs cluster at small-cap (LME negative), wide-spread, and high-idio-vol names, so universe-mean spreads understate execution costs. At micro-cap-realistic spreads (200+ bps one-way) the gross profile collapses materially. This is a capacity-binding constraint and an input to Ch20's cost-survival aggregation, not a kill condition on the validation result.\n\n## Running\n\n```bash\n# From repo root\nuv run python case_studies/us_firm_characteristics/01_setup.py\nuv run python case_studies/us_firm_characteristics/02_labels.py\nuv run python case_studies/us_firm_characteristics/03_financial_features.py\nuv run python case_studies/us_firm_characteristics/04_evaluation.py\nuv run python case_studies/us_firm_characteristics/05_linear.py\nuv run python case_studies/us_firm_characteristics/06_gbm.py\nuv run python case_studies/us_firm_characteristics/07_tabular_dl.py\nuv run python case_studies/us_firm_characteristics/08_latent_factors.py\nuv run python case_studies/us_firm_characteristics/09_causal_dml.py\nuv run python case_studies/us_firm_characteristics/10_model_analysis.py\nuv run python case_studies/us_firm_characteristics/11_backtest.py\nuv run python case_studies/us_firm_characteristics/12_portfolio_management.py\nuv run python case_studies/us_firm_characteristics/13_costs.py\nuv run python case_studies/us_firm_characteristics/14_risk_management.py\nuv run python case_studies/us_firm_characteristics/15_strategy_analysis.py\n```\n\n## Run Log\n\nModel training runs, predictions, and backtest results are tracked in a content-addressed registry under `run_log/registry.db`.\n"
}
},
{
"turn": 1,
"type": "tool_call",
"name": "list_skills",
"args": {
"category": "backtest"
},
"result": {
"category": "backtest",
"n_skills": 5,
"skills": [
{
"name": "ml4t-cost-model",
"category": "backtest",
"path": "~/ml4t/skills/backtest/cost-model/SKILL.md",
"description": "Commission, slippage, and market-impact cost models for realistic strategy simulation. Use when backtesting to ensure P&L accounts for transaction costs.",
"library": "ml4t-backtest"
},
{
"name": "ml4t-rl-execution",
"category": "backtest",
"path": "~/ml4t/skills/backtest/rl-execution/SKILL.md",
"description": "Reinforcement learning for trade execution and hedging. Use when optimizing execution algorithms or dynamic hedging policies.",
"library": "ml4t-backtest"
},
{
"name": "ml4t-run-backtest",
"category": "backtest",
"path": "~/ml4t/skills/backtest/run-backtest/SKILL.md",
"description": "Event-driven backtesting with realistic order execution, position tracking, and performance measurement. Use when simulating a trading strategy on historical data.",
"library": "ml4t-backtest"
},
{
"name": "ml4t-sensitivity-analysis",
"category": "backtest",
"path": "~/ml4t/skills/backtest/sensitivity-analysis/SKILL.md",
"description": "Test strategy robustness to parameter variation and detect overfitting cliffs. Use when validating that performance is stable across parameter perturbations.",
"library": "ml4t-backtest"
},
{
"name": "ml4t-tearsheet",
"category": "backtest",
"path": "~/ml4t/skills/backtest/tearsheet/SKILL.md",
"description": "Generate comprehensive performance reports from backtest returns. Use when summarizing backtest results for review or comparison.",
"library": "ml4t-backtest"
}
]
}
},
{
"turn": 1,
"type": "tool_call",
"name": "list_skills",
"args": {
"category": "infrastructure"
},
"result": {
"category": "infrastructure",
"n_skills": 4,
"skills": [
{
"name": "ml4t-canonical-schema",
"category": "infrastructure",
"path": "~/ml4t/skills/infrastructure/canonical-schema/SKILL.md",
"description": "Standardized data schema across all financial datasets. Use when defining or enforcing column names, types, and index conventions.",
"library": "ml4t-data"
},
{
"name": "ml4t-case-study-pipeline",
"category": "infrastructure",
"path": "~/ml4t/skills/infrastructure/case-study-pipeline/SKILL.md",
"description": "Filesystem and artifact-contract pattern for reproducible case studies. Use when organizing a research project for reproducibility and collaboration.",
"library": ""
},
{
"name": "ml4t-polars-patterns",
"category": "infrastructure",
"path": "~/ml4t/skills/infrastructure/polars-patterns/SKILL.md",
"description": "Polars-first data processing patterns for financial data. Use when writing efficient grouped, windowed, or lazy-evaluated data transformations.",
"library": ""
},
{
"name": "ml4t-registry-system",
"category": "infrastructure",
"path": "~/ml4t/skills/infrastructure/registry-system/SKILL.md",
"description": "Content-addressed experiment tracking for ML trading models. Use when versioning models, features, or experiment artifacts for reproducibility.",
"library": ""
}
]
}
},
{
"turn": 2,
"type": "tool_call",
"name": "list_skills",
"args": {
"category": "concepts"
},
"result": {
"category": "concepts",
"n_skills": 10,
"skills": [
{
"name": "ml4t-backtest-overfitting",
"category": "concepts",
"path": "~/ml4t/skills/concepts/backtest-overfitting/SKILL.md",
"description": "Detect and prevent overfitting to historical data via multiple testing corrections and pre-registration. Use when evaluating strategy variants to ensure performance is not a data-mining artifact.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-causal-identification",
"category": "concepts",
"path": "~/ml4t/skills/concepts/causal-identification/SKILL.md",
"description": "Validate causal claims using DAG adjustment sets, bad-control detection, and refutation tests. Use when distinguishing genuine factor effects from confounded associations.",
"library": ""
},
{
"name": "ml4t-data-leakage",
"category": "concepts",
"path": "~/ml4t/skills/concepts/data-leakage/SKILL.md",
"description": "Prevent train-test contamination, target leakage, and temporal leakage. Use when splitting data, fitting preprocessors, or engineering features for time-series ML.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-information-coefficient",
"category": "concepts",
"path": "~/ml4t/skills/concepts/information-coefficient/SKILL.md",
"description": "Measure predictive signal quality with IC, Rank IC, and IC_IR. Use when evaluating whether a feature has predictive power for returns.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-lookahead-bias",
"category": "concepts",
"path": "~/ml4t/skills/concepts/lookahead-bias/SKILL.md",
"description": "Detect future information leaking into features, labels, or evaluation. Use when any pipeline step might expose data not yet available at prediction time.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-non-stationarity",
"category": "concepts",
"path": "~/ml4t/skills/concepts/non-stationarity/SKILL.md",
"description": "Handle changing statistical properties in financial time series. Use when features or model performance degrade over time.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-point-in-time",
"category": "concepts",
"path": "~/ml4t/skills/concepts/point-in-time/SKILL.md",
"description": "Ensure data reflects what was known at each decision point, not revised or restated values. Use when joining fundamental, macro, or alternative data to price series.",
"library": "ml4t-data"
},
{
"name": "ml4t-regime-awareness",
"category": "concepts",
"path": "~/ml4t/skills/concepts/regime-awareness/SKILL.md",
"description": "Market regimes as conditioning features for risk scaling, not timing signals. Use when incorporating regime detection into strategy logic.",
"library": "ml4t-engineer"
},
{
"name": "ml4t-survivorship-bias",
"category": "concepts",
"path": "~/ml4t/skills/concepts/survivorship-bias/SKILL.md",
"description": "Account for delisted and removed securities in historical analysis. Use when constructing universes or computing cross-sectional features to avoid survivor-only inflation.",
"library": "ml4t-data"
},
{
"name": "ml4t-transaction-costs",
"category": "concepts",
"path": "~/ml4t/skills/concepts/transaction-costs/SKILL.md",
"description": "Estimate whether a strategy can survive spread, slippage, and market impact before full simulation. Use when screening strategy feasibility early.",
"library": ""
}
]
}
},
{
"turn": 2,
"type": "tool_call",
"name": "list_skills",
"args": {
"category": "validation"
},
"result": {
"category": "validation",
"n_skills": 8,
"skills": [
{
"name": "ml4t-cpcv",
"category": "validation",
"path": "~/ml4t/skills/validation/cpcv/SKILL.md",
"description": "Combinatorial Purged CV generates a distribution of backtest paths instead of a single estimate. Use when quantifying strategy robustness and overfitting probability.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-deflated-sharpe",
"category": "validation",
"path": "~/ml4t/skills/validation/deflated-sharpe/SKILL.md",
"description": "Adjust the Sharpe ratio for multiple testing bias when selecting from many trials. Use when reporting strategy performance after parameter or model search.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-drift-detection",
"category": "validation",
"path": "~/ml4t/skills/validation/drift-detection/SKILL.md",
"description": "Detect when model inputs or predictions shift from the training distribution using PSI and statistical tests. Use when monitoring deployed models or diagnosing performance degradation.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-evaluate-factor",
"category": "validation",
"path": "~/ml4t/skills/validation/evaluate-factor/SKILL.md",
"description": "Evaluate alpha factor quality with IC analysis, quantile spreads, turnover, and decay. Use when deciding whether a signal has enough predictive power to trade.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-purging-embargo",
"category": "validation",
"path": "~/ml4t/skills/validation/purging-embargo/SKILL.md",
"description": "Remove training samples whose labels overlap the test period and add an embargo buffer. Use when performing time-series CV to prevent leakage between folds.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-shap-analysis",
"category": "validation",
"path": "~/ml4t/skills/validation/shap-analysis/SKILL.md",
"description": "Explain model predictions with SHAP values instead of biased built-in feature importance. Use when interpreting which features drive model decisions.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-stationarity-tests",
"category": "validation",
"path": "~/ml4t/skills/validation/stationarity-tests/SKILL.md",
"description": "Test whether time-series features are stationary using ADF and KPSS tests. Use when selecting or transforming features to verify stationarity assumptions for predictive models.",
"library": "ml4t-diagnostic"
},
{
"name": "ml4t-walk-forward-cv",
"category": "validation",
"path": "~/ml4t/skills/validation/walk-forward-cv/SKILL.md",
"description": "Rolling or expanding window CV that preserves temporal order. Use when evaluating ML models on time-series data where standard k-fold causes temporal leakage.",
"library": "ml4t-diagnostic"
}
]
}
},
{
"turn": 2,
"type": "tool_call",
"name": "query_registry",
"args": {
"sql": "SELECT * FROM backtest_runs ORDER BY backtest_timestamp DESC LIMIT 5"
},
"result": {
"error": "OperationalError: no such column: backtest_timestamp"
}
},
{
"turn": 3,
"type": "tool_call",
"name": "query_registry",
"args": {
"sql": "SELECT * FROM backtest_runs LIMIT 5"
},
"result": {
"columns": [
"backtest_hash",
"prediction_hash",
"spec_json",
"stage",
"created_at",
"git_commit",
"started_at",
"elapsed_s"
],
"rows": [
{
"backtest_hash": "07c72c1097f7",
"prediction_hash": "404fd35d733a",
"spec_json": "{\"_runtime_backtest_config\":\"BacktestConfig(allow_short_selling=True, allow_leverage=False, initial_margin=0.5, long_maintenance_margin=0.25, short_maintenance_margin=0.3, fixed_margin_schedule=None, short_cash_policy=<ShortCashPolicy.CREDIT: 'credit'>, execution_price=<ExecutionPrice.OPEN: 'open'>, mark_price=<ExecutionPrice.PRICE: 'price'>, execution_mode=<ExecutionMode.NEXT_BAR: 'next_bar'>, stop_fill_mode=<StopFillMode.STOP_PRICE: 'stop_price'>, stop_level_basis=<StopLevelBasis.FILL_PRICE: 'fill_price'>, trail_hwm_source=<WaterMarkSource.CLOSE: 'close'>, initial_hwm_source=<InitialHwmSource.FILL_PRICE: 'fill_price'>, trail_stop_timing=<TrailStopTiming.LAGGED: 'lagged'>, share_type=<ShareType.FRACTIONAL: 'fractional'>, commission_type=<CommissionType.PERCENTAGE: 'percentage'>, commission_rate=0.00075, commission_per_share=0.0, commission_per_trade=0.0, commission_minimum=0.0, slippage_type=<SlippageType.PERCENTAGE: 'percentage'>, slippage_rate=0.0005, slippage_fixed=0.0, stop_slippage_rate=0.0, initial_cash=1000000.0, cash_buffer_pct=0.0, settlement_delay=0, settlement_reduces_buying_power=True, reject_on_insufficient_cash=True, skip_cash_validation=False, partial_fills_allowed=False, fill_ordering=<FillOrdering.EXIT_FIRST: 'exit_first'>, entry_order_priority=<EntryOrderPriority.SUBMISSION: 'submission'>, next_bar_submission_precheck=False, next_bar_simple_cash_check=False, buying_power_reservation=False, next_bar_queue_shadow_validation=False, immediate_fill=False, rebalance_mode=<RebalanceMode.INCREMENTAL: 'incremental'>, rebalance_headroom_pct=1.0, missing_price_policy=<MissingPricePolicy.SKIP: 'skip'>, late_asset_policy=<LateAssetPolicy.ALLOW: 'allow'>, late_asset_min_bars=1, calendar='NYSE', timezone='UTC', data_frequency=<DataFrequency.DAILY: 'daily'>, enforce_sessions=False, preset_name=None)\",\"backtest_config\":{\"account\":{\"allow_leverage\":false,\"allow_short_selling\":true,\"fixed_margin_schedule\":null,\"initial_margin\":0.5,\"long_maintenance_margin\":0.25,\"short_cash_policy\":\"credit\",\"short_maintenance_margin\":0.3},\"calendar\":{\"calendar\":\"NYSE\",\"data_frequency\":\"daily\",\"enforce_sessions\":false,\"timezone\":\"UTC\"},\"cash\":{\"buffer_pct\":0.0,\"initial\":1000000.0},\"commission\":{\"minimum\":0.0,\"model\":\"percentage\",\"per_share\":0.0,\"per_trade\":0.0,\"rate\":0.00075},\"execution\":{\"execution_mode\":\"next_bar\",\"execution_price\":\"open\",\"mark_price\":\"price\"},\"feed\":{\"ask_col\":null,\"ask_size_col\":null,\"bar_type\":null,\"bid_col\":null,\"bid_size_col\":null,\"calendar\":\"NYSE\",\"close_col\":\"close\",\"data_frequency\":\"daily\",\"entity_col\":\"symbol\",\"high_col\":\"high\",\"low_col\":\"low\",\"mid_col\":null,\"open_col\":\"open\",\"price_col\":\"close\",\"session_start_time\":null,\"timestamp_col\":\"timestamp\",\"timestamp_semantics\":null,\"timezone\":\"UTC\",\"volume_col\":\"volume\"},\"metadata\":{\"cadence\":\"monthly_month_end\",\"case_study\":\"us_firm_characteristics\",\"chapter\":\"ch16\",\"fill_timing\":\"NEXT_BAR_OPEN\",\"prediction_hash\":\"404fd35d733a\",\"preset_path\":\"~/ml4t/code/case_studies/us_firm_characteristics/config/backtest/base.yaml\",\"signal_direction\":\"long_only\"},\"orders\":{\"buying_power_reservation\":false,\"entry_order_priority\":\"submission\",\"fill_ordering\":\"exit_first\",\"immediate_fill\":false,\"late_asset_min_bars\":1,\"late_asset_policy\":\"allow\",\"missing_price_policy\":\"skip\",\"next_bar_queue_shadow_validation\":false,\"next_bar_simple_cash_check\":false,\"next_bar_submission_precheck\":false,\"partial_fills_allowed\":false,\"rebalance_headroom_pct\":1.0,\"rebalance_mode\":\"incremental\",\"reject_on_insufficient_cash\":true,\"skip_cash_validation\":false},\"position_sizing\":{\"share_type\":\"fractional\"},\"settlement\":{\"delay\":0,\"reduces_buying_power\":true},\"slippage\":{\"fixed\":0.0,\"model\":\"percentage\",\"rate\":0.0005,\"stop_rate\":0.0},\"stops\":{\"initial_hwm_source\":\"fill_price\",\"stop_fill_mode\":\"stop_price\",\"stop_level_basis\":\"fill_price\",\"trail_hwm_source\":\"close\",\"trail_stop_timing\":\"lagged\"}},\"chapter\":\"ch16\",\"preset_id\":\"us_firm_characteristics:base\",\"strategy\":{\"rebalance\":{\"cadence\":\"monthly_month_end\",\"mode\":\"vectorized\"},\"signal\":{\"long_short\":true,\"method\":\"equal_weight_top_k\",\"top_k\":5}},\"version\":2}",
"stage": "signal",
"created_at": "2026-04-14T06:43:10.907320+00:00",
"git_commit": "c7fe075",
"started_at": "2026-04-14T06:43:09.601555+00:00",
"elapsed_s": 1.3009738270193338
},
{
"backtest_hash": "8d6107a8065e",
"prediction_hash": "404fd35d733a",
"spec_json": "{\"_runtime_backtest_config\":\"BacktestConfig(allow_short_selling=True, allow_leverage=False, initial_margin=0.5, long_maintenance_margin=0.25, short_maintenance_margin=0.3, fixed_margin_schedule=None, short_cash_policy=<ShortCashPolicy.CREDIT: 'credit'>, execution_price=<ExecutionPrice.OPEN: 'open'>, mark_price=<ExecutionPrice.PRICE: 'price'>, execution_mode=<ExecutionMode.NEXT_BAR: 'next_bar'>, stop_fill_mode=<StopFillMode.STOP_PRICE: 'stop_price'>, stop_level_basis=<StopLevelBasis.FILL_PRICE: 'fill_price'>, trail_hwm_source=<WaterMarkSource.CLOSE: 'close'>, initial_hwm_source=<InitialHwmSource.FILL_PRICE: 'fill_price'>, trail_stop_timing=<TrailStopTiming.LAGGED: 'lagged'>, share_type=<ShareType.FRACTIONAL: 'fractional'>, commission_type=<CommissionType.PERCENTAGE: 'percentage'>, commission_rate=0.00075, commission_per_share=0.0, commission_per_trade=0.0, commission_minimum=0.0, slippage_type=<SlippageType.PERCENTAGE: 'percentage'>, slippage_rate=0.0005, slippage_fixed=0.0, stop_slippage_rate=0.0, initial_cash=1000000.0, cash_buffer_pct=0.0, settlement_delay=0, settlement_reduces_buying_power=True, reject_on_insufficient_cash=True, skip_cash_validation=False, partial_fills_allowed=False, fill_ordering=<FillOrdering.EXIT_FIRST: 'exit_first'>, entry_order_priority=<EntryOrderPriority.SUBMISSION: 'submission'>, next_bar_submission_precheck=False, next_bar_simple_cash_check=False, buying_power_reservation=False, next_bar_queue_shadow_validation=False, immediate_fill=False, rebalance_mode=<RebalanceMode.INCREMENTAL: 'incremental'>, rebalance_headroom_pct=1.0, missing_price_policy=<MissingPricePolicy.SKIP: 'skip'>, late_asset_policy=<LateAssetPolicy.ALLOW: 'allow'>, late_asset_min_bars=1, calendar='NYSE', timezone='UTC', data_frequency=<DataFrequency.DAILY: 'daily'>, enforce_sessions=False, preset_name=None)\",\"backtest_config\":{\"account\":{\"allow_leverage\":false,\"allow_short_selling\":true,\"fixed_margin_schedule\":null,\"initial_margin\":0.5,\"long_maintenance_margin\":0.25,\"short_cash_policy\":\"credit\",\"short_maintenance_margin\":0.3},\"calendar\":{\"calendar\":\"NYSE\",\"data_frequency\":\"daily\",\"enforce_sessions\":false,\"timezone\":\"UTC\"},\"cash\":{\"buffer_pct\":0.0,\"initial\":1000000.0},\"commission\":{\"minimum\":0.0,\"model\":\"percentage\",\"per_share\":0.0,\"per_trade\":0.0,\"rate\":0.00075},\"execution\":{\"execution_mode\":\"next_bar\",\"execution_price\":\"open\",\"mark_price\":\"price\"},\"feed\":{\"ask_col\":null,\"ask_size_col\":null,\"bar_type\":null,\"bid_col\":null,\"bid_size_col\":null,\"calendar\":\"NYSE\",\"close_col\":\"close\",\"data_frequency\":\"daily\",\"entity_col\":\"symbol\",\"high_col\":\"high\",\"low_col\":\"low\",\"mid_col\":null,\"open_col\":\"open\",\"price_col\":\"close\",\"session_start_time\":null,\"timestamp_col\":\"timestamp\",\"timestamp_semantics\":null,\"timezone\":\"UTC\",\"volume_col\":\"volume\"},\"metadata\":{\"cadence\":\"monthly_month_end\",\"case_study\":\"us_firm_characteristics\",\"chapter\":\"ch16\",\"fill_timing\":\"NEXT_BAR_OPEN\",\"prediction_hash\":\"404fd35d733a\",\"preset_path\":\"~/ml4t/code/case_studies/us_firm_characteristics/config/backtest/base.yaml\",\"signal_direction\":\"long_only\"},\"orders\":{\"buying_power_reservation\":false,\"entry_order_priority\":\"submission\",\"fill_ordering\":\"exit_first\",\"immediate_fill\":false,\"late_asset_min_bars\":1,\"late_asset_policy\":\"allow\",\"missing_price_policy\":\"skip\",\"next_bar_queue_shadow_validation\":false,\"next_bar_simple_cash_check\":false,\"next_bar_submission_precheck\":false,\"partial_fills_allowed\":false,\"rebalance_headroom_pct\":1.0,\"rebalance_mode\":\"incremental\",\"reject_on_insufficient_cash\":true,\"skip_cash_validation\":false},\"position_sizing\":{\"share_type\":\"fractional\"},\"settlement\":{\"delay\":0,\"reduces_buying_power\":true},\"slippage\":{\"fixed\":0.0,\"model\":\"percentage\",\"rate\":0.0005,\"stop_rate\":0.0},\"stops\":{\"initial_hwm_source\":\"fill_price\",\"stop_fill_mode\":\"stop_price\",\"stop_level_basis\":\"fill_price\",\"trail_hwm_source\":\"close\",\"trail_stop_timing\":\"lagged\"}},\"chapter\":\"ch16\",\"preset_id\":\"us_firm_characteristics:base\",\"strategy\":{\"rebalance\":{\"cadence\":\"monthly_month_end\",\"mode\":\"vectorized\"},\"signal\":{\"long_short\":true,\"method\":\"equal_weight_top_k\",\"top_k\":10}},\"version\":2}",
"stage": "signal",
"created_at": "2026-04-14T06:43:11.037162+00:00",
"git_commit": "c7fe075",
"started_at": "2026-04-14T06:43:10.973841+00:00",
"elapsed_s": 0.05769746704027057
},
{
"backtest_hash": "47be0310f6a8",
"prediction_hash": "404fd35d733a",
"spec_json": "{\"_runtime_backtest_config\":\"BacktestConfig(allow_short_selling=True, allow_leverage=False, initial_margin=0.5, long_maintenance_margin=0.25, short_maintenance_margin=0.3, fixed_margin_schedule=None, short_cash_policy=<ShortCashPolicy.CREDIT: 'credit'>, execution_price=<ExecutionPrice.OPEN: 'open'>, mark_price=<ExecutionPrice.PRICE: 'price'>, execution_mode=<ExecutionMode.NEXT_BAR: 'next_bar'>, stop_fill_mode=<StopFillMode.STOP_PRICE: 'stop_price'>, stop_level_basis=<StopLevelBasis.FILL_PRICE: 'fill_price'>, trail_hwm_source=<WaterMarkSource.CLOSE: 'close'>, initial_hwm_source=<InitialHwmSource.FILL_PRICE: 'fill_price'>, trail_stop_timing=<TrailStopTiming.LAGGED: 'lagged'>, share_type=<ShareType.FRACTIONAL: 'fractional'>, commission_type=<CommissionType.PERCENTAGE: 'percentage'>, commission_rate=0.00075, commission_per_share=0.0, commission_per_trade=0.0, commission_minimum=0.0, slippage_type=<SlippageType.PERCENTAGE: 'percentage'>, slippage_rate=0.0005, slippage_fixed=0.0, stop_slippage_rate=0.0, initial_cash=1000000.0, cash_buffer_pct=0.0, settlement_delay=0, settlement_reduces_buying_power=True, reject_on_insufficient_cash=True, skip_cash_validation=False, partial_fills_allowed=False, fill_ordering=<FillOrdering.EXIT_FIRST: 'exit_first'>, entry_order_priority=<EntryOrderPriority.SUBMISSION: 'submission'>, next_bar_submission_precheck=False, next_bar_simple_cash_check=False, buying_power_reservation=False, next_bar_queue_shadow_validation=False, immediate_fill=False, rebalance_mode=<RebalanceMode.INCREMENTAL: 'incremental'>, rebalance_headroom_pct=1.0, missing_price_policy=<MissingPricePolicy.SKIP: 'skip'>, late_asset_policy=<LateAssetPolicy.ALLOW: 'allow'>, late_asset_min_bars=1, calendar='NYSE', timezone='UTC', data_frequency=<DataFrequency.DAILY: 'daily'>, enforce_sessions=False, preset_name=None)\",\"backtest_config\":{\"account\":{\"allow_leverage\":false,\"allow_short_selling\":true,\"fixed_margin_schedule\":null,\"initial_margin\":0.5,\"long_maintenance_margin\":0.25,\"short_cash_policy\":\"credit\",\"short_maintenance_margin\":0.3},\"calendar\":{\"calendar\":\"NYSE\",\"data_frequency\":\"daily\",\"enforce_sessions\":false,\"timezone\":\"UTC\"},\"cash\":{\"buffer_pct\":0.0,\"initial\":1000000.0},\"commission\":{\"minimum\":0.0,\"model\":\"percentage\",\"per_share\":0.0,\"per_trade\":0.0,\"rate\":0.00075},\"execution\":{\"execution_mode\":\"next_bar\",\"execution_price\":\"open\",\"mark_price\":\"price\"},\"feed\":{\"ask_col\":null,\"ask_size_col\":null,\"bar_type\":null,\"bid_col\":null,\"bid_size_col\":null,\"calendar\":\"NYSE\",\"close_col\":\"close\",\"data_frequency\":\"daily\",\"entity_col\":\"symbol\",\"high_col\":\"high\",\"low_col\":\"low\",\"mid_col\":null,\"open_col\":\"open\",\"price_col\":\"close\",\"session_start_time\":null,\"timestamp_col\":\"timestamp\",\"timestamp_semantics\":null,\"timezone\":\"UTC\",\"volume_col\":\"volume\"},\"metadata\":{\"cadence\":\"monthly_month_end\",\"case_study\":\"us_firm_characteristics\",\"chapter\":\"ch16\",\"fill_timing\":\"NEXT_BAR_OPEN\",\"prediction_hash\":\"404fd35d733a\",\"preset_path\":\"~/ml4t/code/case_studies/us_firm_characteristics/config/backtest/base.yaml\",\"signal_direction\":\"long_only\"},\"orders\":{\"buying_power_reservation\":false,\"entry_order_priority\":\"submission\",\"fill_ordering\":\"exit_first\",\"immediate_fill\":false,\"late_asset_min_bars\":1,\"late_asset_policy\":\"allow\",\"missing_price_policy\":\"skip\",\"next_bar_queue_shadow_validation\":false,\"next_bar_simple_cash_check\":false,\"next_bar_submission_precheck\":false,\"partial_fills_allowed\":false,\"rebalance_headroom_pct\":1.0,\"rebalance_mode\":\"incremental\",\"reject_on_insufficient_cash\":true,\"skip_cash_validation\":false},\"position_sizing\":{\"share_type\":\"fractional\"},\"settlement\":{\"delay\":0,\"reduces_buying_power\":true},\"slippage\":{\"fixed\":0.0,\"model\":\"percentage\",\"rate\":0.0005,\"stop_rate\":0.0},\"stops\":{\"initial_hwm_source\":\"fill_price\",\"stop_fill_mode\":\"stop_price\",\"stop_level_basis\":\"fill_price\",\"trail_hwm_source\":\"close\",\"trail_stop_timing\":\"lagged\"}},\"chapter\":\"ch16\",\"preset_id\":\"us_firm_characteristics:base\",\"strategy\":{\"rebalance\":{\"cadence\":\"monthly_month_end\",\"mode\":\"vectorized\"},\"signal\":{\"long_short\":true,\"method\":\"equal_weight_top_k\",\"top_k\":20}},\"version\":2}",
"stage": "signal",
"created_at": "2026-04-14T06:43:11.189873+00:00",
"git_commit": "c7fe075",
"started_at": "2026-04-14T06:43:11.124034+00:00",
"elapsed_s": 0.061797570902854204
},
{
"backtest_hash": "4b374e98bab3",
"prediction_hash": "404fd35d733a",
"spec_json": "{\"_runtime_backtest_config\":\"BacktestConfig(allow_short_selling=True, allow_leverage=False, initial_margin=0.5, long_maintenance_margin=0.25, short_maintenance_margin=0.3, fixed_margin_schedule=None, short_cash_policy=<ShortCashPolicy.CREDIT: 'credit'>, execution_price=<ExecutionPrice.OPEN: 'open'>, mark_price=<ExecutionPrice.PRICE: 'price'>, execution_mode=<ExecutionMode.NEXT_BAR: 'next_bar'>, stop_fill_mode=<StopFillMode.STOP_PRICE: 'stop_price'>, stop_level_basis=<StopLevelBasis.FILL_PRICE: 'fill_price'>, trail_hwm_source=<WaterMarkSource.CLOSE: 'close'>, initial_hwm_source=<InitialHwmSource.FILL_PRICE: 'fill_price'>, trail_stop_timing=<TrailStopTiming.LAGGED: 'lagged'>, share_type=<ShareType.FRACTIONAL: 'fractional'>, commission_type=<CommissionType.PERCENTAGE: 'percentage'>, commission_rate=0.00075, commission_per_share=0.0, commission_per_trade=0.0, commission_minimum=0.0, slippage_type=<SlippageType.PERCENTAGE: 'percentage'>, slippage_rate=0.0005, slippage_fixed=0.0, stop_slippage_rate=0.0, initial_cash=1000000.0, cash_buffer_pct=0.0, settlement_delay=0, settlement_reduces_buying_power=True, reject_on_insufficient_cash=True, skip_cash_validation=False, partial_fills_allowed=False, fill_ordering=<FillOrdering.EXIT_FIRST: 'exit_first'>, entry_order_priority=<EntryOrderPriority.SUBMISSION: 'submission'>, next_bar_submission_precheck=False, next_bar_simple_cash_check=False, buying_power_reservation=False, next_bar_queue_shadow_validation=False, immediate_fill=False, rebalance_mode=<RebalanceMode.INCREMENTAL: 'incremental'>, rebalance_headroom_pct=1.0, missing_price_policy=<MissingPricePolicy.SKIP: 'skip'>, late_asset_policy=<LateAssetPolicy.ALLOW: 'allow'>, late_asset_min_bars=1, calendar='NYSE', timezone='UTC', data_frequency=<DataFrequency.DAILY: 'daily'>, enforce_sessions=False, preset_name=None)\",\"backtest_config\":{\"account\":{\"allow_leverage\":false,\"allow_short_selling\":true,\"fixed_margin_schedule\":null,\"initial_margin\":0.5,\"long_maintenance_margin\":0.25,\"short_cash_policy\":\"credit\",\"short_maintenance_margin\":0.3},\"calendar\":{\"calendar\":\"NYSE\",\"data_frequency\":\"daily\",\"enforce_sessions\":false,\"timezone\":\"UTC\"},\"cash\":{\"buffer_pct\":0.0,\"initial\":1000000.0},\"commission\":{\"minimum\":0.0,\"model\":\"percentage\",\"per_share\":0.0,\"per_trade\":0.0,\"rate\":0.00075},\"execution\":{\"execution_mode\":\"next_bar\",\"execution_price\":\"open\",\"mark_price\":\"price\"},\"feed\":{\"ask_col\":null,\"ask_size_col\":null,\"bar_type\":null,\"bid_col\":null,\"bid_size_col\":null,\"calendar\":\"NYSE\",\"close_col\":\"close\",\"data_frequency\":\"daily\",\"entity_col\":\"symbol\",\"high_col\":\"high\",\"low_col\":\"low\",\"mid_col\":null,\"open_col\":\"open\",\"price_col\":\"close\",\"session_start_time\":null,\"timestamp_col\":\"timestamp\",\"timestamp_semantics\":null,\"timezone\":\"UTC\",\"volume_col\":\"volume\"},\"metadata\":{\"cadence\":\"monthly_month_end\",\"case_study\":\"us_firm_characteristics\",\"chapter\":\"ch16\",\"fill_timing\":\"NEXT_BAR_OPEN\",\"prediction_hash\":\"404fd35d733a\",\"preset_path\":\"~/ml4t/code/case_studies/us_firm_characteristics/config/backtest/base.yaml\",\"signal_direction\":\"long_only\"},\"orders\":{\"buying_power_reservation\":false,\"entry_order_priority\":\"submission\",\"fill_ordering\":\"exit_first\",\"immediate_fill\":false,\"late_asset_min_bars\":1,\"late_asset_policy\":\"allow\",\"missing_price_policy\":\"skip\",\"next_bar_queue_shadow_validation\":false,\"next_bar_simple_cash_check\":false,\"next_bar_submission_precheck\":false,\"partial_fills_allowed\":false,\"rebalance_headroom_pct\":1.0,\"rebalance_mode\":\"incremental\",\"reject_on_insufficient_cash\":true,\"skip_cash_validation\":false},\"position_sizing\":{\"share_type\":\"fractional\"},\"settlement\":{\"delay\":0,\"reduces_buying_power\":true},\"slippage\":{\"fixed\":0.0,\"model\":\"percentage\",\"rate\":0.0005,\"stop_rate\":0.0},\"stops\":{\"initial_hwm_source\":\"fill_price\",\"stop_fill_mode\":\"stop_price\",\"stop_level_basis\":\"fill_price\",\"trail_hwm_source\":\"close\",\"trail_stop_timing\":\"lagged\"}},\"chapter\":\"ch16\",\"preset_id\":\"us_firm_characteristics:base\",\"strategy\":{\"rebalance\":{\"cadence\":\"monthly_month_end\",\"mode\":\"vectorized\"},\"signal\":{\"long_short\":true,\"method\":\"score_weighted_top_k\",\"top_k\":10}},\"version\":2}",
"stage": "signal",
"created_at": "2026-04-14T06:43:11.304535+00:00",
"git_commit": "c7fe075",
"started_at": "2026-04-14T06:43:11.248613+00:00",
"elapsed_s": 0.052894855849444866
},
{
"backtest_hash": "af997ec87be5",
"prediction_hash": "404fd35d733a",
"spec_json": "{\"_runtime_backtest_config\":\"BacktestConfig(allow_short_selling=True, allow_leverage=False, initial_margin=0.5, long_maintenance_margin=0.25, short_maintenance_margin=0.3, fixed_margin_schedule=None, short_cash_policy=<ShortCashPolicy.CREDIT: 'credit'>, execution_price=<ExecutionPrice.OPEN: 'open'>, mark_price=<ExecutionPrice.PRICE: 'price'>, execution_mode=<ExecutionMode.NEXT_BAR: 'next_bar'>, stop_fill_mode=<StopFillMode.STOP_PRICE: 'stop_price'>, stop_level_basis=<StopLevelBasis.FILL_PRICE: 'fill_price'>, trail_hwm_source=<WaterMarkSource.CLOSE: 'close'>, initial_hwm_source=<InitialHwmSource.FILL_PRICE: 'fill_price'>, trail_stop_timing=<TrailStopTiming.LAGGED: 'lagged'>, share_type=<ShareType.FRACTIONAL: 'fractional'>, commission_type=<CommissionType.PERCENTAGE: 'percentage'>, commission_rate=0.00075, commission_per_share=0.0, commission_per_trade=0.0, commission_minimum=0.0, slippage_type=<SlippageType.PERCENTAGE: 'percentage'>, slippage_rate=0.0005, slippage_fixed=0.0, stop_slippage_rate=0.0, initial_cash=1000000.0, cash_buffer_pct=0.0, settlement_delay=0, settlement_reduces_buying_power=True, reject_on_insufficient_cash=True, skip_cash_validation=False, partial_fills_allowed=False, fill_ordering=<FillOrdering.EXIT_FIRST: 'exit_first'>, entry_order_priority=<EntryOrderPriority.SUBMISSION: 'submission'>, next_bar_submission_precheck=False, next_bar_simple_cash_check=False, buying_power_reservation=False, next_bar_queue_shadow_validation=False, immediate_fill=False, rebalance_mode=<RebalanceMode.INCREMENTAL: 'incremental'>, rebalance_headroom_pct=1.0, missing_price_policy=<MissingPricePolicy.SKIP: 'skip'>, late_asset_policy=<LateAssetPolicy.ALLOW: 'allow'>, late_asset_min_bars=1, calendar='NYSE', timezone='UTC', data_frequency=<DataFrequency.DAILY: 'daily'>, enforce_sessions=False, preset_name=None)\",\"backtest_config\":{\"account\":{\"allow_leverage\":false,\"allow_short_selling\":true,\"fixed_margin_schedule\":null,\"initial_margin\":0.5,\"long_maintenance_margin\":0.25,\"short_cash_policy\":\"credit\",\"short_maintenance_margin\":0.3},\"calendar\":{\"calendar\":\"NYSE\",\"data_frequency\":\"daily\",\"enforce_sessions\":false,\"timezone\":\"UTC\"},\"cash\":{\"buffer_pct\":0.0,\"initial\":1000000.0},\"commission\":{\"minimum\":0.0,\"model\":\"percentage\",\"per_share\":0.0,\"per_trade\":0.0,\"rate\":0.00075},\"execution\":{\"execution_mode\":\"next_bar\",\"execution_price\":\"open\",\"mark_price\":\"price\"},\"feed\":{\"ask_col\":null,\"ask_size_col\":null,\"bar_type\":null,\"bid_col\":null,\"bid_size_col\":null,\"calendar\":\"NYSE\",\"close_col\":\"close\",\"data_frequency\":\"daily\",\"entity_col\":\"symbol\",\"high_col\":\"high\",\"low_col\":\"low\",\"mid_col\":null,\"open_col\":\"open\",\"price_col\":\"close\",\"session_start_time\":null,\"timestamp_col\":\"timestamp\",\"timestamp_semantics\":null,\"timezone\":\"UTC\",\"volume_col\":\"volume\"},\"metadata\":{\"cadence\":\"monthly_month_end\",\"case_study\":\"us_firm_characteristics\",\"chapter\":\"ch16\",\"fill_timing\":\"NEXT_BAR_OPEN\",\"prediction_hash\":\"404fd35d733a\",\"preset_path\":\"~/ml4t/code/case_studies/us_firm_characteristics/config/backtest/base.yaml\",\"signal_direction\":\"long_only\"},\"orders\":{\"buying_power_reservation\":false,\"entry_order_priority\":\"submission\",\"fill_ordering\":\"exit_first\",\"immediate_fill\":false,\"late_asset_min_bars\":1,\"late_asset_policy\":\"allow\",\"missing_price_policy\":\"skip\",\"next_bar_queue_shadow_validation\":false,\"next_bar_simple_cash_check\":false,\"next_bar_submission_precheck\":false,\"partial_fills_allowed\":false,\"rebalance_headroom_pct\":1.0,\"rebalance_mode\":\"incremental\",\"reject_on_insufficient_cash\":true,\"skip_cash_validation\":false},\"position_sizing\":{\"share_type\":\"fractional\"},\"settlement\":{\"delay\":0,\"reduces_buying_power\":true},\"slippage\":{\"fixed\":0.0,\"model\":\"percentage\",\"rate\":0.0005,\"stop_rate\":0.0},\"stops\":{\"initial_hwm_source\":\"fill_price\",\"stop_fill_mode\":\"stop_price\",\"stop_level_basis\":\"fill_price\",\"trail_hwm_source\":\"close\",\"trail_stop_timing\":\"lagged\"}},\"chapter\":\"ch16\",\"preset_id\":\"us_firm_characteristics:base\",\"strategy\":{\"rebalance\":{\"cadence\":\"monthly_month_end\",\"mode\":\"vectorized\"},\"signal\":{\"long_short\":true,\"method\":\"score_weighted_top_k\",\"top_k\":20}},\"version\":2}",
"stage": "signal",
"created_at": "2026-04-14T06:43:11.399714+00:00",
"git_commit": "c7fe075",
"started_at": "2026-04-14T06:43:11.359453+00:00",
"elapsed_s": 0.037328646052628756
}
],
"n_rows_returned": 5,
"truncated_at_200": false
}
},
{
"turn": 3,
"type": "tool_call",
"name": "query_registry",
"args": {
"sql": "SELECT * FROM prediction_metrics LIMIT 5"
},
"result": {
"columns": [
"prediction_hash",
"computed_at",
"ic_mean",
"ic_std",
"ic_t",
"n_folds",
"pct_positive",
"task_type",
"accuracy",
"balanced_accuracy",
"auc_roc",
"auc_pr",
"log_loss",
"brier_score",
"ic_mean_daily",
"ic_std_daily",
"ic_n_days",
"ic_pct_positive",
"ic_se_naive",
"ic_naive_lo",
"ic_naive_hi",
"ic_se_hac",
"ic_ci_lo",
"ic_ci_hi",
"ic_t_hac",
"ic_p_hac",
"ic_hac_lag",
"ic_boot_lo",
"ic_boot_hi",
"ic_boot_block",
"auc_mean_daily",
"auc_std_daily",
"auc_n_days",
"auc_pct_above_null",
"auc_se_naive",
"auc_naive_lo",
"auc_naive_hi",
"auc_se_hac",
"auc_ci_lo",
"auc_ci_hi",
"auc_t_hac",
"auc_p_hac",
"auc_hac_lag",
"auc_boot_lo",
"auc_boot_hi",
"auc_boot_block"
],
"rows": [
{
"prediction_hash": "cfbe300b50da",
"computed_at": "2026-05-02T18:28:27.112361+00:00",
"ic_mean": 0.04550413096030084,
"ic_std": null,
"ic_t": null,
"n_folds": null,
"pct_positive": null,
"task_type": "regression",
"accuracy": null,
"balanced_accuracy": null,
"auc_roc": 0.5244948427460264,
"auc_pr": 0.5115529774090797,
"log_loss": null,
"brier_score": null,
"ic_mean_daily": 0.04550413096030086,
"ic_std_daily": 0.04279784510439062,
"ic_n_days": 12.0,
"ic_pct_positive": 0.75,
"ic_se_naive": 0.012354673695877918,
"ic_naive_lo": 0.018311677497899047,
"ic_naive_hi": 0.07269658442270269,
"ic_se_hac": 0.005620775678155099,
"ic_ci_lo": 0.033132887104477475,
"ic_ci_hi": 0.05787537481612425,
"ic_t_hac": 8.095703078340362,
"ic_p_hac": 5.832792262294717e-06,
"ic_hac_lag": 6.0,
"ic_boot_lo": 0.036551490554474125,
"ic_boot_hi": 0.053929513883916515,
"ic_boot_block": 21.0,
"auc_mean_daily": null,
"auc_std_daily": null,
"auc_n_days": null,
"auc_pct_above_null": null,
"auc_se_naive": null,
"auc_naive_lo": null,
"auc_naive_hi": null,
"auc_se_hac": null,
"auc_ci_lo": null,
"auc_ci_hi": null,
"auc_t_hac": null,
"auc_p_hac": null,
"auc_hac_lag": null,
"auc_boot_lo": null,
"auc_boot_hi": null,
"auc_boot_block": null
},
{
"prediction_hash": "de199d9adcc6",
"computed_at": "2026-05-02T18:52:48.384892+00:00",
"ic_mean": 0.08207902066435471,
"ic_std": 0.03634328529767654,
"ic_t": 7.141804910850517,
"n_folds": 10.0,
"pct_positive": 1.0,
"task_type": "classification",
"accuracy": 0.5299578096517236,
"balanced_accuracy": 0.5299767370403591,
"auc_roc": 0.5414936656332483,
"auc_pr": 0.5280849117981219,
"log_loss": 0.6901022139740317,
"brier_score": 0.24848500444147317,
"ic_mean_daily": 0.08207902066435474,
"ic_std_daily": 0.08309210866353278,
"ic_n_days": 110.0,
"ic_pct_positive": 0.8636363636363636,
"ic_se_naive": 0.007922521707220808,
"ic_naive_lo": 0.06637684020391152,
"ic_naive_hi": 0.09778120112479796,
"ic_se_hac": 0.010223021805283497,
"ic_ci_lo": 0.06181732379941568,
"ic_ci_hi": 0.1023407175292938,
"ic_t_hac": 8.028841396184285,
"ic_p_hac": 1.241229341530925e-12,
"ic_hac_lag": 20.0,
"ic_boot_lo": 0.06485496247206425,
"ic_boot_hi": 0.10112210738441825,
"ic_boot_block": 21.0,
"auc_mean_daily": 0.5414514435897456,
"auc_std_daily": 0.04190484978393115,
"auc_n_days": 110.0,
"auc_pct_above_null": 0.8545454545454545,
"auc_se_naive": 0.00399547065769346,
"auc_naive_lo": 0.5335325506400012,
"auc_naive_hi": 0.5493703365394901,
"auc_se_hac": 0.005064999018159313,
"auc_ci_lo": 0.5314127802002067,
"auc_ci_hi": 0.5514901069792846,
"auc_t_hac": 8.183899629818601,
"auc_p_hac": 5.60218538225854e-13,
"auc_hac_lag": 20.0,
"auc_boot_lo": 0.5327982193901875,
"auc_boot_hi": 0.5511716925993435,
"auc_boot_block": 21.0
},
{
"prediction_hash": "8081258af8c0",
"computed_at": "2026-05-02T18:52:48.559357+00:00",
"ic_mean": 0.08182063694639109,
"ic_std": 0.03963747590324104,
"ic_t": 6.52765007004807,
"n_folds": 10.0,
"pct_positive": 1.0,
"task_type": "classification",
"accuracy": 0.5305756857695864,
"balanced_accuracy": 0.5305974275063284,
"auc_roc": 0.5421883654681847,
"auc_pr": 0.5284616948355834,
"log_loss": 0.6899536725011718,
"brier_score": 0.2484111443499411,
"ic_mean_daily": 0.08182063694639109,
"ic_std_daily": 0.0923089394312961,
"ic_n_days": 110.0,
"ic_pct_positive": 0.8363636363636363,
"ic_se_naive": 0.008801312040067814,
"ic_naive_lo": 0.0643767226159504,
"ic_naive_hi": 0.09926455127683179,
"ic_se_hac": 0.011201737878059627,
"ic_ci_lo": 0.05961915664352718,
"ic_ci_hi": 0.104022117249255,
"ic_t_hac": 7.304280624763568,
"ic_p_hac": 4.8523185469662167e-11,
"ic_hac_lag": 20.0,
"ic_boot_lo": 0.06278439556210297,
"ic_boot_hi": 0.10252523824875458,
"ic_boot_block": 21.0,
"auc_mean_daily": 0.5420637572067547,
"auc_std_daily": 0.04652948372883957,
"auc_n_days": 110.0,
"auc_pct_above_null": 0.8181818181818182,
"auc_se_naive": 0.004436412203236003,
"auc_naive_lo": 0.5332709324488707,
"auc_naive_hi": 0.5508565819646387,
"auc_se_hac": 0.00543261343719075,
"auc_ci_lo": 0.5312964939899371,
"auc_ci_hi": 0.5528310204235724,
"auc_t_hac": 7.742821699551358,
"auc_p_hac": 5.334621633323877e-12,
"auc_hac_lag": 20.0,
"auc_boot_lo": 0.5327930140996576,
"auc_boot_hi": 0.5526053075966701,
"auc_boot_block": 21.0
},
{
"prediction_hash": "b92c06df7e53",
"computed_at": "2026-05-02T18:52:48.729671+00:00",
"ic_mean": 0.08391671954130364,
"ic_std": 0.03553227186778164,
"ic_t": 7.468364772945978,
"n_folds": 10.0,
"pct_positive": 1.0,
"task_type": "classification",
"accuracy": 0.5309261096529225,
"balanced_accuracy": 0.5309439509991783,
"auc_roc": 0.5426745475158804,
"auc_pr": 0.5289234134178767,
"log_loss": 0.6899304558460861,
"brier_score": 0.24840003253007098,
"ic_mean_daily": 0.08391671954130363,
"ic_std_daily": 0.08368630045488794,
"ic_n_days": 110.0,
"ic_pct_positive": 0.8727272727272727,
"ic_se_naive": 0.007979175671610205,
"ic_naive_lo": 0.06810225276527594,
"ic_naive_hi": 0.09973118631733131,
"ic_se_hac": 0.009912962869006248,
"ic_ci_lo": 0.06426954940796836,
"ic_ci_hi": 0.10356388967463889,
"ic_t_hac": 8.46535194877776,
"ic_p_hac": 1.312283615106935e-13,
"ic_hac_lag": 20.0,
"ic_boot_lo": 0.06763810245127276,
"ic_boot_hi": 0.10194484226606843,
"ic_boot_block": 21.0,
"auc_mean_daily": 0.5426094308457518,
"auc_std_daily": 0.04218623802206686,
"auc_n_days": 110.0,
"auc_pct_above_null": 0.8818181818181818,
"auc_se_naive": 0.004022299973505073,
"auc_naive_lo": 0.5346373630642968,
"auc_naive_hi": 0.5505814986272067,
"auc_se_hac": 0.004866847199538889,
"auc_ci_lo": 0.5329634979187506,
"auc_ci_hi": 0.5522553637727529,
"auc_t_hac": 8.755037727461186,
"auc_p_hac": 2.90878432451791e-14,
"auc_hac_lag": 20.0,
"auc_boot_lo": 0.5345392427559121,
"auc_boot_hi": 0.5517516242048353,
"auc_boot_block": 21.0
},
{
"prediction_hash": "d93bed836c1e",
"computed_at": "2026-05-02T18:52:48.950176+00:00",
"ic_mean": 0.08389784982168305,
"ic_std": 0.03888924341753004,
"ic_t": 6.822151137753361,
"n_folds": 10.0,
"pct_positive": 1.0,
"task_type": "classification",
"accuracy": 0.5308065099445839,
"balanced_accuracy": 0.5308270272459227,
"auc_roc": 0.5431113104052135,
"auc_pr": 0.5291238960127836,
"log_loss": 0.6898772200383483,
"brier_score": 0.24837250684108877,
"ic_mean_daily": 0.08389784982168305,
"ic_std_daily": 0.08967703846838823,
"ic_n_days": 110.0,
"ic_pct_positive": 0.8363636363636363,
"ic_se_naive": 0.008550370129394603,
"ic_naive_lo": 0.06695129420000903,
"ic_naive_hi": 0.10084440544335707,
"ic_se_hac": 0.010869383547812509,
"ic_ci_lo": 0.06235508499644207,
"ic_ci_hi": 0.10544061464692403,
"ic_t_hac": 7.718731191390123,
"ic_p_hac": 6.02806693450475e-12,
"ic_hac_lag": 20.0,
"ic_boot_lo": 0.06491903634304047,
"ic_boot_hi": 0.1043486029224617,
"ic_boot_block": 21.0,
"auc_mean_daily": 0.5429968794459019,
"auc_std_daily": 0.04479605680454285,
"auc_n_days": 110.0,
"auc_pct_above_null": 0.8363636363636363,
"auc_se_naive": 0.004271136430885206,
"auc_naive_lo": 0.5345316258956583,
"auc_naive_hi": 0.5514621329961455,
"auc_se_hac": 0.005243921611878686,
"auc_ci_lo": 0.5326035972924318,
"auc_ci_hi": 0.553390161599372,
"auc_t_hac": 8.199374938882405,
"auc_p_hac": 5.173639294753229e-13,
"auc_hac_lag": 20.0,
"auc_boot_lo": 0.5338867479187032,
"auc_boot_hi": 0.5531544666576655,
"auc_boot_block": 21.0
}
],
"n_rows_returned": 5,
"truncated_at_200": false
}
},
{
"turn": 3,
"type": "tool_call",
"name": "query_registry",
يُعرض النص كاملًا مع نسبه إلى مصدره وفقًا لترخيصه. الترخيص: MIT
أعدّ وكيل الأبحاث في Stratmill هذا الملخص استنادًا إلى المصدر الأصلي؛ وهو ليس نسخة منه.