Skip to content
All strategies

Strategies

Regularized Characteristic Portfolio on Nine US Sector ETFs

Outcome: Abandoned

RegularizedSectorCharacteristicPortfolio

Outcome Summary

The strategy tested a regularized characteristic portfolio across nine US sector ETFs, rebalanced monthly with frozen coefficients. After three iterations, Layer 4 QA identified protective stops that covered only the initial partial fill and a mismatch between modeled holdings and stop-driven execution. It was abandoned during verification, with no backtest metrics or optimization results available.

Hypothesis

Derived by the Research Lead from Lamoureux and Zhang: test whether increasing power-utility curvature when estimating characteristic-dependent portfolio weights improves subsequent portfolio performance. Use daily USEQ bars, aggregated into monthly observations, for nine established sector ETFs. This is an operationalization of the paper's portfolio-selection mechanism, not a reproduction of its CRSP/Compustat experiment. Retain its 12-month momentum excluding the latest month and 60-month market-model residual……Show moreShow less

Derived by the Research Lead from Lamoureux and Zhang: test whether increasing power-utility curvature when estimating characteristic-dependent portfolio weights improves subsequent portfolio performance. Use daily USEQ bars, aggregated into monthly observations, for nine established sector ETFs. This is an operationalization of the paper's portfolio-selection mechanism, not a reproduction of its CRSP/Compustat experiment. Retain its 12-month momentum excluding the latest month and 60-month market-model residual volatility. Omit size and book-to-market because historical capitalization and accounting inputs are unavailable; neither is replaced by a price proxy. Choose an equal-weight benchmark, SPY as the market-model reference, constrained exposures, and a shorter estimation sample. Fit coefficients exclusively from pre-evaluation warm-up history and freeze them throughout each evaluation window. Execute monthly rebalances at a completed session's close; no next-session-open execution is required. The supplied full text provides the algorithm, so this proposal does not rely solely on the abstract.

The source concerns equity portfolio construction, so retain an equity venue rather than transplanting its stock characteristics into crypto. Nine traded legs address the excess of single-instrument experiments. Signed characteristic tilts permit short positions and address the portfolio's long-only concentration. Corpus concentration is empty, so instrument-specific recent shares cannot be established. This experiment tests regularization of jointly estimated weights, rather than another indicator entry or spread-reversion signal. Exact historical-universe reproduction is unavailable; the fixed ETF universe defines a separate, explicitly limited experiment.

verification_loop: Verification failed (Layer 4 — QA review) [class=code_defect]: - [critical] Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position. (line 277) —……Show moreShow less

verification_loop: Verification failed (Layer 4 — QA review) [class=code_defect]: - [critical] Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position. (line 277) — fix: Track each leg's protective stop and update its quantity and trigger price after every entry fill using the current position quantity and average entry price. Handle partial stop fills separately so the remaining position stays protected. - [warning] The coefficient-fitting objective models uninterrupted month-to-month holdings, whereas execution liquidates a leg when its 10% intrabar stop triggers and leaves it flat until the next monthly rebalance. Training utility therefore describes a different return path from the executed portfolio. (line 161) — fix: Model the registered stop policy in the fitting return calculation, or explicitly document this approximation when interpreting the curvature comparison.

Implementation

Monthly sector-ETF portfolio with jointly estimated momentum and residual-volatility tilts, increased power-utility curvature, frozen pre-window coefficients, constrained weights, and separately booked positions with protective stops.

Minimal iteration change: an absent evaluation boundary now permits observation and monthly aggregation without fitting or trading, resolving the reported synthetic-scenario exception. With a supplied boundary, fitting still occurs before the first evaluation observation enters training, and insufficient pre-window history still raises. Imports, characteristics, solver, sizing, alignment, and execution are preserved. The evaluation runner must supply _no_entries_before_ns and the registered warm-up. Verification was left to the pipeline. The requested outbox file could not be written because this session's filesystem permissions are read-only; the complete task-bound JSON is returned here.

Verification Results

Verification failed (Layer 4 — QA review) [class=code_defect]: - [critical] Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position. (line 277) — fix: Track each……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [critical] Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position. (line 277) — fix: Track each leg's protective stop and update its quantity and trigger price after every entry fill using the current position quantity and average entry price. Handle partial stop fills separately so the remaining position stays protected. - [warning] The coefficient-fitting objective models uninterrupted month-to-month holdings, whereas execution liquidates a leg when its 10% intrabar stop triggers and leaves it flat until the next monthly rebalance. Training utility therefore describes a different return path from the executed portfolio. (line 161) — fix: Model the registered stop policy in the fitting return calculation, or explicitly document this approximation when interpreting the curvature comparison.

Track each leg's protective stop and update its quantity and trigger price after every entry fill using the current position quantity and average entry price. Handle partial stop fills separately so the remaining position stays protected.

Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position.

Model the registered stop policy in the fitting return calculation, or explicitly document this approximation when interpreting the curvature comparison.

The coefficient-fitting objective models uninterrupted month-to-month holdings, whereas execution liquidates a leg when its 10% intrabar stop triggers and leaves it flat until the next monthly rebalance. Training utility therefore describes a different return path from the executed portfolio.

Iteration History

Verification failed (Layer 1 — static analysis): - Banned import: src.data.market_calendar — strategies may only import the framework bases and helpers (src.strategies.base_template, src.strategies.rolling_options_template, src.strategies.polymarket_series_template, src.strategies.helpers); collectors, the database, the backtest engine and the registry are outside the sandbox. (line 10)

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['fit_months', 'net_weight', 'bar_interval', 'sector_names', 'stop_loss_pct', 'investor_gamma', 'max_abs_weight', 'momentum_months', 'benchmark_weight', 'market_reference', 'max_gross_weight', 'rebalance_months', 'solver_tolerance', '_optimization_plan', 'curvature_increment', 'residual_vol_months', 'momentum_skip_months', 'risk_per_position_pct', 'solver_max_iterations', 'coefficient_update_policy', 'coefficient_initialization',……Show moreShow less

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['fit_months', 'net_weight', 'bar_interval', 'sector_names', 'stop_loss_pct', 'investor_gamma', 'max_abs_weight', 'momentum_months', 'benchmark_weight', 'market_reference', 'max_gross_weight', 'rebalance_months', 'solver_tolerance', '_optimization_plan', 'curvature_increment', 'residual_vol_months', 'momentum_skip_months', 'risk_per_position_pct', 'solver_max_iterations', 'coefficient_update_policy', 'coefficient_initialization', 'fit_cost_per_dollar_traded'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: ValueError: evaluation_boundary_required: registered frozen warm-up must be supplied (bar timestamp: 1735689600000) - steady_downtrend: ValueError: evaluation_boundary_required: registered frozen warm-up must be supplied (bar timestamp: 1735689600000) - flat_ranging: ValueError: evaluation_boundary_required: registered frozen warm-up must be supplied (bar timestamp: 1735689600000) - volatility_spike: ValueError: evaluation_boundary_required: registered frozen warm-up must be supplied (bar timestamp: 1735689600000) - zero_volume: ValueError: evaluation_boundary_required: registered frozen warm-up must be supplied (bar timestamp: 1735689600000) - price_gap: ValueError: evaluation_boundary_required: registered frozen warm-up must be supplied (bar timestamp: 1735689600000)

Outcome Summary

Update protective stops after every entry fill and align the fitting objective with the executed stop policy, or explicitly document the approximation.

After three iterations, the strategy was abandoned following Layer 4 QA failure because protective stops did not expand after additional partial entry fills, leaving shares unprotected. QA also warned that the fitting objective assumed uninterrupted holdings while execution could stop out positions until the next monthly rebalance.

Test whether higher power-utility curvature improves a monthly portfolio of nine US sector ETFs using momentum and residual-volatility characteristics, with coefficients fitted on warm-up history and frozen during evaluation.

No backtest metrics were available, and optimization and later reviews were not reached.

Abandon Reason

verification_loop: Verification failed (Layer 4 — QA review) [class=code_defect]: - [critical] Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position. (line 277) —……Show moreShow less

verification_loop: Verification failed (Layer 4 — QA review) [class=code_defect]: - [critical] Protective stops do not track partial entry fills. The first fill creates a stop for the position quantity then present. On subsequent fills, the existing reduce-only order causes an immediate return, leaving the additional shares unprotected. For example, a 100-share entry filled as 40 then 60 shares retains a stop for only 40 shares. The configured 10% stop therefore does not protect the entire position. (line 277) — fix: Track each leg's protective stop and update its quantity and trigger price after every entry fill using the current position quantity and average entry price. Handle partial stop fills separately so the remaining position stays protected. - [warning] The coefficient-fitting objective models uninterrupted month-to-month holdings, whereas execution liquidates a leg when its 10% intrabar stop triggers and leaves it flat until the next monthly rebalance. Training utility therefore describes a different return path from the executed portfolio. (line 161) — fix: Model the registered stop policy in the fitting return calculation, or explicitly document this approximation when interpreting the curvature comparison.

Analysis

An Empirical Assessment of Characteristics and Optimal Portfolios

Backtest and paper results are hypothetical. Trading involves risk of loss.