Skip to content
All strategies

Strategies

OKX Correlation-Adjusted Yang-Zhang Time-Series Momentum

Outcome: Abandoned

OkxCorrelationAdjustedYangZhangTimeSeriesMomentum

Outcome Summary

This strategy tried to trade correlation-adjusted, volatility-targeted trend momentum across BTC, ETH and SOL perpetuals on OKX, rebalancing monthly. It never got past code verification: over 3 iterations it kept failing the 'leverage_set_but_unused' check, because the config set leverage=1.5 but position sizing did not use that leverage. The pipeline abandoned it in a verification loop, so backtesting, optimization, analyst review and risk review never ran and there are no performance metrics.

Hypothesis

A monthly-rebalanced long-short portfolio of BTCUSDT.OKX, ETHUSDT.OKX, and SOLUSDT.OKX perpetuals using continuous t-statistic trend signals, 21-day Yang-Zhang volatility, and signed-correlation exposure adjustment. Each leg may be long, short, or flat. Target 12% annualized portfolio volatility, cap gross leverage at 1.5x and each leg at 0.5x, risk at most 1.5% of equity per leg, and maintain a 20% liquidity buffer.

Corrected the invalid future-import syntax while preserving the existing implementation and its passed strategy logic. The strategy records all three OKX legs, computes trend t-statistics, Yang-Zhang volatility, signed correlation adjustments, and monthly portfolio rebalancing under the configured gross, leg, volatility, and liquidity constraints.

verification_loop: Verification failed (leverage_set_but_unused): config sets leverage=1.5 but the strategy never references leverage in sizing. Size positions on it — notional = equity * fraction * leverage / price (read self.config.leverage) — or set leverage=1.0. As written the leverage is inert and the backtest is identical to 1x.

Implementation

Monthly-rebalanced long-short OKX perpetual portfolio using continuous Yang-Zhang volatility-scaled time-series momentum with signed-correlation exposure adjustment.

Verification Results

Verification failed (leverage_set_but_unused): config sets leverage=1.5 but the strategy never references leverage in sizing. Size positions on it — notional = equity * fraction * leverage / price (read self.config.leverage) — or set leverage=1.0. As written the leverage is inert and the backtest is identical to 1x.

Iteration History

Verification failed (Layer 1 — static analysis): - `self.stop = ...` binds a value over nautilus_trader Strategy member — every later call raises "'<type>' object is not callable" (or the framework loses the member). Use a different attribute name. (line 19)

Verification failed (Layer 1 — static analysis): - Syntax error: invalid syntax (<unknown>, line 1) (line 1)

Outcome Summary

When the config sets leverage above 1.0, apply self.config.leverage directly in the notional calculation (equity * fraction * leverage / price) so the verifier can see it; otherwise set leverage=1.0.

After 3 iterations it was abandoned in a verification loop. The check 'leverage_set_but_unused' flagged that the config set leverage=1.5 but position sizing never used the leverage, so the backtest would have been identical to 1x.

A monthly-rebalanced long/short/flat time-series momentum portfolio on BTC, ETH and SOL OKX perpetuals. It used t-statistic trend signals, 21-day Yang-Zhang volatility and a signed-correlation exposure adjustment, targeting 12% annualized volatility with a 1.5x gross and 0.5x per-leg leverage cap.

No performance data exists: the backtest report is empty and no optimization report was produced, so there are no return, Sharpe or trade-count figures.

Analysis

Improved Momentum Strategy on Commodities Futures

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