Skip to content

Conversation

@TheTiEr
Copy link

@TheTiEr TheTiEr commented Jan 4, 2026

Summary

This PR introduces two new optimization objective functions that measure both profitability and consistency of trading strategies through linear regression
analysis of the equity curve.

New Objective Functions

CWR (Consistency Weighted Return)

  • Formula: Annualized Returns × R²
  • Combines profitability with consistency using the coefficient of determination (R²)
  • Normalized range: -0.5 to 2.0 for fitness calculation
  • Measures how well the equity curve follows a linear growth pattern

ECWR (Enhanced Consistency Weighted Return)

  • Formula: Annualized Returns × R²²
  • Applies squared R² to heavily penalize irregular equity curves
  • Normalized range: -0.5 to 1.0 for fitness calculation
  • Favors strategies with very consistent, linear growth patterns

Both metrics use linear regression without intercept to calculate R² from the equity curve, then multiply by annualized returns.

Changes

  • Added consistency_weighted_return() and enhanced_consistency_weighted_return() functions to metrics.py
  • Included both metrics in backtest output alongside existing ratios
  • Added CWR and ECWR as selectable objective functions in optimization mode
  • Updated config.py to list new options
  • Added metric mappings in Optimize.py for best candidates display

Use Cases

  • CWR: For traders who want to balance returns with consistency
  • ECWR: For traders who prioritize highly linear equity growth and want to strongly penalize volatility in returns

tier and others added 2 commits January 3, 2026 23:21
Implemented CWR metric that combines annualized returns with R² (coefficient
of determination) to measure both profitability and consistency of trading
strategies. CWR uses linear regression without intercept to calculate R² from
the equity curve, then multiplies it by annualized returns.

Changes:
- Add consistency_weighted_return() function in metrics.py
- Include CWR in backtest metrics alongside existing ratios
- Add CWR as selectable objective function in optimization mode
- Update config.py to list CWR as available optimization option
- Add CWR mapping in Optimize.py for best candidates display

CWR is normalized between -0.5 and 2.0 for optimization fitness calculation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
…tive function

Implemented ECWR metric that places stronger emphasis on linearity by squaring
the R² coefficient. While CWR uses R², ECWR uses R²² to heavily penalize
strategies with irregular equity curves, favoring only those with very
consistent, linear growth patterns.

Formula: ECWR = Annualized Returns × R²²

Changes:
- Add enhanced_consistency_weighted_return() function in metrics.py
- Include ECWR in backtest metrics alongside existing ratios
- Add ECWR as selectable objective function in optimization mode
- Update config.py to list ECWR as available optimization option
- Add ECWR mapping in Optimize.py for best candidates display

ECWR is normalized between -0.5 and 1.0 for optimization fitness calculation.
This stricter range reflects the squared R² penalty, resulting in lower
absolute values compared to CWR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant