Day 28: Backtest Parameter Sweeps & Frontend Integration

~5 min read

What I Built

  • Profile-aware parameter optimization with grid search across EMA periods, RSI thresholds, and position sizing
  • Portfolio transparency API endpoints with data sanitization for public consumption
  • Real-time risk alerting system with Telegram/Email notifications
  • Fixed mypy type checking errors in parameter optimizer with proper None checks
  • Updated implementation documentation to reflect trading profiles architecture

Code Highlight

class ProfileParameterOptimizer:
    """Grid search parameter optimization integrated with trading profiles."""

    def __init__(self, profile: TradingProfile, params: OptimizationParams):
        self.profile = profile
        self.params = params

    def optimize(self, df: pd.DataFrame) -> OptimizationResult:
        """Run parameter sweep across profile-specific ranges."""
        best_result = None
        best_score = float('-inf')

        # Grid search across parameter combinations
        for ema_period in self.params.ema_range:
            for rsi_oversold in self.params.rsi_oversold_range:
                for rsi_overbought in self.params.rsi_overbought_range:
                    # Update parameters
                    test_params = self.params.copy()
                    test_params.ema_period = ema_period
                    test_params.rsi_oversold = rsi_oversold
                    test_params.rsi_overbought = rsi_overbought

                    # Run backtest with profile integration
                    result = self._run_backtest(df, test_params)

                    # Score based on Sharpe ratio with drawdown penalty
                    score = result.sharpe_ratio - (result.max_drawdown * 2)

                    if score > best_score:
                        best_score = score
                        best_result = result

        return best_result

Architecture Decision

Implemented profile-aware parameter optimization that respects each trading profile's unique characteristics while maintaining type safety. The optional Decider component in profiles required careful None checking to prevent runtime errors while preserving fallback logic for RSI-only strategies.

Testing Results

All static type checks pass with mypy, ruff linting clean, and parameter optimization generates valid trades across all profile types:

  • Mypy type checking: Success - no issues found in 55 source files
  • Ruff linting: All checks passed
  • Parameter optimization: Grid search completed across 3 trading profiles
  • Frontend integration: Portfolio API endpoints responding correctly
  • Risk alerting: Telegram notification system operational

Next Steps

Week 7 begins with live deployment preparation and canary trading implementation.


Follow @therealkamba on X for regular updates. View all posts →