Skip to content

The main goal of this repository is to be equipped with necessary tools to optimize trading strategy with Backtesting.py library

Notifications You must be signed in to change notification settings

Alhomsilouay/Fx_Strategy_Optim

Repository files navigation

Repo goal:

The main goal of this repository is to be equiped with necessary tools to optimize trading strategy with Backtesting.py library

  1. Create and simulate trading strategies
  2. Run backtests on historical data
  3. Visualize performance and trades
  4. Generate metrics (e.g., Sharpe ratio, drawdowns, returns, etc.)
  5. Define optimization parameters.
  6. Define cost function to maximize
  7. Run the optimization engine with two variantes (Grid, SAMBO)
  8. Drawing multiple heatmaps in a single figure for comparing parameter interactions visually, especially with more than 2 optimization parameters

💡 Educational Value

This project demonstrates how to:

Implement a professional-grade trading strategy in Python

Run exhaustive or constrained parameter optimization

Apply custom cost metrics and performance filters

Visualize optimization results intuitively


📈 Strategy Optimization example in file '1_Risk_Sizing_py.py'

This file is a start up example with simple assumptions


📈 Strategy Optimization example in file '2_Risk_Sizing.ipynb'

This file is a Juypter Notebook version of '1_Risk_Sizing_py.py'


📈 Strategy Optimization example in file '2_Optimize.ipynb'

This file includes backtesting without optimization, it is p preparation for file '3_Optimize.ipynb'

📈 Strategy Optimization example in file '3_Optimize.ipynb'

This repository contains a complete and educational workflow for optimizing a custom trading strategy using Backtesting.py, a Python library for vectorized backtesting.

The notebook 3_Optimize.ipynb walks through:

  • Implementing a technical strategy with RSI and dynamic risk sizing
  • Running a grid search optimization over multiple parameters
  • Applying constraints and custom cost functions
  • Visualizing results using seaborn heatmaps

🔧 Strategy Overview

The strategy is based on:

  • RSI (Relative Strength Index) indicator
  • Dynamic position sizing based on account equity and user-defined risk percentage
  • Stop-loss logic derived from a percentage-based SL
  • Entry/exit triggers from RSI lower/upper bounds

⚙️ Optimization Parameters

The strategy is optimized using a multi-parameter grid search over:

Parameter Description
u_bound RSI upper bound (overbought threshold)
l_bound RSI lower bound (oversold threshold)
rsi_window RSI lookback period
sl_percent Stop-loss percentage (e.g., 0.001 = 0.1%)
equity_risk % of equity to risk per trade

✅ Custom Cost Function

The optimization uses a user-defined cost function:

def cost_function(series): if series['# Trades'] < 9: return -1 return series['Return [%]']


📈 Heatmap Visualization

The results are visualized using seaborn heatmaps to show how different parameter combinations affect the strategy's performance. A utility function is included to:

Plot a single heatmap

Plot all possible 2D heatmap combinations for n parameters


📦 Requirements

Install required libraries using pip:

pip install backtesting pandas numpy seaborn matplotlib

If using method="sambo" for advanced optimization:

pip install sambo


Refferences:

_ https://kernc.github.io/backtesting.py/

_ ChatGPT propmpting


Appendix 1

Strategy Performance Metrics

Strategy Result

Strategy Result

Strategy Result

About

The main goal of this repository is to be equipped with necessary tools to optimize trading strategy with Backtesting.py library

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published