Skip to content

Add CWR and ECWR optimization objective functions#548

Closed
TheTiEr wants to merge 2 commits intojesse-ai:masterfrom
TheTiEr:master
Closed

Add CWR and ECWR optimization objective functions#548
TheTiEr wants to merge 2 commits intojesse-ai:masterfrom
TheTiEr:master

Conversation

@TheTiEr
Copy link
Copy Markdown

@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 <noreply@anthropic.com>
…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 <noreply@anthropic.com>
@stale
Copy link
Copy Markdown

stale Bot commented Mar 6, 2026

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale Bot added the stale No recent activity. label Mar 6, 2026
@stale stale Bot closed this Mar 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale No recent activity.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant