Skip to content

haydenfowler/backtesting.py

Repository files navigation

Trading Strategy Backtesting Framework

A comprehensive Python framework for backtesting various trading strategies using historical market data. Built with the backtesting library and featuring a command-line interface for easy strategy testing and parameter optimization.

Features

  • πŸ”„ Multiple built-in trading strategies (SMA, RSI, MACD, FVG, ChatGPT)
  • πŸ“Š Interactive plots and performance metrics
  • βš™οΈ Parameter optimization capabilities
  • 🎯 Flexible data loading (symbols, date ranges, intervals)
  • πŸ–₯️ Command-line interface for easy execution
  • πŸ“ˆ Support for stocks, ETFs, and cryptocurrencies via Yahoo Finance

Setup

1. Create and activate virtual environment

python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

2. Install dependencies

pip install -r requirements.txt

3. (Optional) Set up OpenAI API for ChatGPT strategy

export OPENAI_API_KEY='your-api-key-here'

Quick Start

List available strategies

python src/main.py --list-strategies

Run a basic backtest

python src/main.py --strategy sma --symbol AAPL --period 1y

Custom parameters example

python src/main.py --strategy rsi --symbol TSLA --period 6mo --rsi-period 21 --rsi-overbought 75

Available Strategies

Strategy Key Description
Simple Moving Average sma, smacross Classic SMA crossover strategy
RSI rsi Relative Strength Index overbought/oversold
SMA + MACD smamacd, sma_macd Combined SMA and MACD signals
Fair Value Gap fvg, fairvaluegap Price gap trading strategy
ChatGPT chatgpt AI-powered trading decisions (requires OpenAI API)

Command Line Arguments

Basic Usage

python src/main.py --strategy STRATEGY --symbol SYMBOL [OPTIONS]

Core Arguments

Argument Description Example
--strategy, -s Strategy to use --strategy sma
--symbol Stock/crypto symbol --symbol AAPL
--list-strategies Show all available strategies

Data Parameters

Argument Description Example
--period Time period --period 1y, --period 6mo
--interval Data interval --interval 1d, --interval 1h
--start Start date (YYYY-MM-DD) --start 2023-01-01
--end End date (YYYY-MM-DD) --end 2023-12-31

Backtest Parameters

Argument Description Default Example
--cash Initial cash amount 100000 --cash 50000
--commission Commission rate 0.002 (0.2%) --commission 0.001
--exclusive-orders Use exclusive orders True

Analysis Options

Argument Description Example
--optimize Run parameter optimization (strategy-specific) --optimize
--plot Show backtest plot (default) --plot
--no-plot Disable plotting --no-plot
--plot-volume Include volume in plots --plot-volume

Strategy-Specific Parameters

SMA Strategy

Argument Description Default
--n1 Short period 10
--n2 Long period 20

RSI Strategy

Argument Description Default
--rsi-period RSI calculation period 14
--rsi-overbought Overbought threshold 70
--rsi-oversold Oversold threshold 30

SMA MACD Strategy

Argument Description Default
--sma-period SMA period 10
--macd-fast MACD fast period 12
--macd-slow MACD slow period 26
--macd-signal MACD signal period 9

Usage Examples

Basic Examples

# Simple SMA strategy on Apple stock
python src/main.py --strategy sma --symbol AAPL

# RSI strategy on Tesla with custom parameters
python src/main.py --strategy rsi --symbol TSLA --rsi-period 21 --rsi-overbought 75

# Bitcoin trading with FVG strategy
python src/main.py --strategy fvg --symbol BTC-USD --period 1y

Advanced Examples

# Optimize strategy parameters (each strategy defines its own optimization ranges)
python src/main.py --strategy sma --symbol SPY --period 2y --optimize
python src/main.py --strategy rsi --symbol AAPL --period 1y --optimize
python src/main.py --strategy fvg --symbol BTC-USD --period 6mo --optimize

# High-frequency trading simulation
python src/main.py --strategy sma --symbol AAPL --period 5d --interval 5m --cash 10000

# Custom date range with specific commission
python src/main.py --strategy rsi --symbol MSFT --start 2023-01-01 --end 2023-12-31 --commission 0.001

# Multiple parameter customization
python src/main.py --strategy smamacd --symbol QQQ --period 1y --sma-period 20 --macd-fast 10 --macd-slow 30

ChatGPT Strategy (Requires OpenAI API)

# Set API key first
export OPENAI_API_KEY='your-api-key-here'

# Run ChatGPT strategy
python src/main.py --strategy chatgpt --symbol AAPL --period 3mo

# Bitcoin example with higher cash for expensive asset
python src/main.py --strategy chatgpt --symbol BTC-USD --start 2024-01-01 --cash 1000000

Performance Metrics

The framework provides comprehensive performance metrics including:

  • Returns: Strategy vs Buy & Hold comparison
  • Risk Metrics: Sharpe Ratio, Sortino Ratio, Maximum Drawdown
  • Trade Analysis: Win Rate, Average Trade, Profit Factor
  • Timing: Exposure Time, Trade Duration
  • Visualization: Equity curves, drawdown plots, trade markers

Adding Custom Strategies

  1. Create your strategy file in src/strategies/
  2. Inherit from backtesting.Strategy
  3. Add import and registry entry in src/strategies/__init__.py
  4. (Optional) Add CLI parameters in src/main.py

Example:

# src/strategies/my_strategy.py
from backtesting import Strategy

class MyStrategy(Strategy):
    param1 = 10
    
    def init(self):
        # Initialize indicators
        pass
    
    def next(self):
        # Trading logic
        pass

Troubleshooting

Common Issues

  1. "Module not found" errors: Ensure virtual environment is activated
  2. "No data loaded": Check symbol name and date ranges
  3. ChatGPT API errors: Verify API key is set and has credits
  4. Plot not showing: Use --plot flag or check display settings

Getting Help

python src/main.py --help

Dependencies

  • backtesting - Core backtesting engine
  • yfinance - Market data provider
  • pandas - Data manipulation
  • numpy - Numerical computing
  • talib - Technical analysis (for MACD strategy)
  • openai - ChatGPT integration (optional)

License

Open source - feel free to modify and extend for your trading research!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published