1
Table of Contents
1
Chapter 1: Introduction – Why Python & Backtrader? 4
What is Algorithmic Trading? 4
Why Python? 4
Why Backtrader? 4
What You’ll Be Able to Do After This Mini eBook 5
Who Is This Mini eBook For? 5
What Do You Need? 5
Chapter 2: Getting Ready—Python, Backtrader, and Data in 15 Minutes 6
1. Install Python (If You Don’t Have It) 6
2. Create a Project Folder 6
3. Set Up a Virtual Environment (Recommended) 6
4. Install Required Packages 6
5. Check That Everything Works 7
6. Get Some Data: Yahoo Finance Example 7
7. (Optional) Download This Book’s Requirements in One Go 7
8. A Minimal IDE/Editor? 7
You’re Ready! 8
Chapter 3: Backtrader in Action – Anatomy of a Simple Strategy 9
How Backtrader Works (The Essentials) 9
A Minimal Example – SMA Crossover 9
What’s Happening Here? 10
3
Try It Out! 10
You’re Now Running Backtests! 11
Chapter 4: Build, Tweak, and Experiment – Your First Real Strategy 12
1. Loading Historical Data 12
2. Writing Your Strategy Class 12
3. Running the Backtest 13
4. Visualizing Results 13
5. Tweaking Parameters 14
6. Adding Commission and Slippage 14
7. Common Debugging Tips 14
What Next? 14
Chapter 5: Next Steps & Your Quick Reference Cheatsheet 16
Try New Indicators & Strategies 16
Where to Get More Data 16
Optimizing Strategies 16
Joining the Community & Learning More 16
Cheatsheet: Most Useful Backtrader Snippets 17
What Now? 17
Congratulations! 18
Chapter 1: Introduction – Why Python & Backtrader? 4
Chapter 1: Introduction – Why Python & Backtrader?
What is Algorithmic Trading?
Algorithmic trading—“algo trading” for short—means using computer code to automate
trading decisions.
Instead of staring at charts all day, you write rules (like: “Buy if the price crosses above the
20-day average”) and let your computer run them, 24/7, fast, and without emotion.
Why bother?
• No emotion: Algorithms don’t get scared or greedy.
• Backtesting: You can see how your idea worked in the past—before risking real
money.
• Speed and consistency: Code follows your rules, every single time.
• Experimentation: Try hundreds of ideas quickly.
Why Python?
• Beginner-friendly: The code is readable, and there are tons of tutorials.
• Popular for finance: Used by banks, hedge funds, quants, and students alike.
• Libraries galore: For trading, statistics, plotting, and machine learning (like pandas,
numpy, matplotlib, scikit-learn, and more).
• Strong community: It’s easy to find help and working code examples.
Why Backtrader?
Backtrader is a free, open-source Python framework designed to make strategy
development, backtesting, and even live trading as easy as possible.
What makes Backtrader awesome?
• Simple and powerful: You can get started with just a few lines, but it’s powerful
enough for pros.
• Flexible data sources: Works with CSVs, Yahoo Finance, live brokers, and more.
• Great visualization: Makes it easy to see your trades and performance.
Chapter 1: Introduction – Why Python & Backtrader? 5
• Big community: Tons of sample strategies and answers online.
What You’ll Be Able to Do After This Mini eBook
• Set up your Python environment in minutes
• Load and analyze historical price data
• Code your first trading strategy (e.g., a simple moving average crossover)
• Run backtests—see your signals and P&L on real charts
• Customize indicators, parameters, and add your own logic
• Know where to go next for deeper research
Who Is This Mini eBook For?
• Total beginners to algo trading and/or Python
• Anyone who wants a quick, practical introduction (not theory-heavy)
• Readers with 2-3 hours to invest in learning something new
What Do You Need?
• A computer (Windows, Mac, or Linux)
• Basic Python installed (we’ll cover this in the next chapter)
• No prior finance or trading experience needed
Chapter 2: Getting Ready—Python, Backtrader, and Data in 15 Minutes 6
Chapter 2: Getting Ready—Python, Backtrader, and
Data in 15 Minutes
1. Install Python (If You Don’t Have It)
• Already have Python 3.8+? Skip to the next step.
• Install Python:
o Download here
o During installation, check the box that says “Add Python to PATH”
2. Create a Project Folder
Pick a folder to keep your scripts and data organized. For example: algo-trading-
quickstart
3. Set Up a Virtual Environment (Recommended)
Keeps your packages isolated and avoids conflicts.
cd algo-trading-quickstart
python -m venv venv
• Activate it:
o Windows: venv\Scripts\activate
o Mac/Linux: source venv/bin/activate
4. Install Required Packages
Open a terminal/command prompt in your project folder, and run:
pip install backtrader yfinance matplotlib pandas
• backtrader: The trading/backtesting engine
• yfinance: Free historical data from Yahoo Finance
• matplotlib/pandas: For data manipulation and plotting
Chapter 2: Getting Ready—Python, Backtrader, and Data in 15 Minutes 7
5. Check That Everything Works
Start Python in your terminal and try:
import backtrader as bt
import yfinance as yf
print("All set!")
If you see no errors and “All set!” prints, you’re good.
6. Get Some Data: Yahoo Finance Example
We’ll grab historical price data for a popular stock (e.g., Apple - AAPL) as a CSV. Run this
script in your project folder:
import yfinance as yf
data = yf.download('AAPL', start='2020-01-01', end='2023-01-01',
auto_adjust=False)
data = data.droplevel(axis=1, level=1)
data.to_csv('AAPL.csv')
print("Data downloaded and saved as AAPL.csv")
• Change the ticker or date range as needed.
7. (Optional) Download This Book’s Requirements in One Go
Create a file called requirements.txt and paste:
backtrader
yfinance
matplotlib
pandas
Then install everything at once:
pip install -r requirements.txt
8. A Minimal IDE/Editor?
• Best for beginners:
o VS Code
o Thonny
o Jupyter Notebook for interactive coding
Chapter 2: Getting Ready—Python, Backtrader, and Data in 15 Minutes 8
All are free. Use whatever you’re comfortable with.
You’re Ready!
• You’ve installed Python and Backtrader
• You have sample data ready
• You’re set up to code and test your first strategy
Next up: We’ll walk you through the anatomy of a Backtrader script—and code your first
trading strategy.
Chapter 3: Backtrader in Action – Anatomy of a Simple Strategy 9
Chapter 3: Backtrader in Action – Anatomy of a Simple
Strategy
How Backtrader Works (The Essentials)
Every Backtrader script has just a few key parts:
• Cerebro: The “brain” that runs everything.
• Data Feed: Your market data (CSV, Yahoo, etc.).
• Strategy: The logic for your buy/sell decisions (your custom class).
• Broker Settings: How much cash, commission, etc.
• Analyzers (Optional): For performance stats and reports.
A Minimal Example – SMA Crossover
Let’s look at the simplest real strategy: Buy when the price goes above the 20-day
average, sell when it falls below.
Copy and run this entire script:
import backtrader as bt
# 1. Define your strategy
class SmaCross(bt.Strategy):
def __init__(self):
self.sma = bt.ind.SMA(period=20)
def next(self):
# If not in the market, buy if price > SMA
if not self.position and self.data.close[0] > self.sma[0]:
self.buy()
# If in the market, sell if price < SMA
elif self.position and self.data.close[0] < self.sma[0]:
self.sell()
# 2. Create a Cerebro engine
cerebro = bt.Cerebro()
# 3. Load data (use your CSV from last chapter)
data = bt.feeds.YahooFinanceCSVData(
dataname='AAPL.csv'
)
Chapter 3: Backtrader in Action – Anatomy of a Simple Strategy 10
# 4. Add everything to Cerebro
cerebro.addstrategy(SmaCross)
cerebro.adddata(data)
cerebro.broker.set_cash(10000) # Starting capital
# 5. Run backtest and plot results
results = cerebro.run()
cerebro.plot()
What’s Happening Here?
• Strategy: You subclass bt.Strategy and put your trading logic in next().
o self.sma is a 20-day Simple Moving Average.
o If you’re not in a position and price is above the SMA, you buy.
o If you’re in a position and price is below the SMA, you sell.
• Cerebro: Sets everything up—data, strategy, broker, and runs your backtest.
• Data Feed: Uses the AAPL.csv file you downloaded. (You can swap in other stocks
or assets—just download a new CSV!)
• Plot: After the backtest, it automatically pops up a chart showing price, SMA, and
your trades.
Try It Out!
• Change the period=20 to 10, 50, etc. See how it affects trading.
Chapter 3: Backtrader in Action – Anatomy of a Simple Strategy 11
• Try with another ticker (download a new CSV, change the filename).
• Adjust starting capital (set_cash) or add a commission (see next chapter).
You’re Now Running Backtests!
That’s the core loop of algorithmic trading:
• Load data
• Define your rules
• See how it would have worked
• Repeat and improve
You can check out chapter 1 of “Backtrader Essentials” for to learn more about: -
Importing necessary libraries. - Downloading historical data using yfinance. - Converting
the data into a backtrader feed using bt.feeds.PandasData. - Initializing the Cerebro
engine and configuring the broker (cash, commission). - Defining and adding a minimal
bt.Strategy. - Running the backtest with cerebro.run(). - Visualizing the results with
cerebro.plot().
Next up: We’ll show you how to customize, add indicators, and tweak your strategy for
better control.
Chapter 4: Build, Tweak, and Experiment – Your First Real Strategy 12
Chapter 4: Build, Tweak, and Experiment – Your First
Real Strategy
Now that you’ve seen a working SMA crossover, let’s step-by-step build your own trading
strategy and explore how to customize it.
1. Loading Historical Data
You’ve already used a CSV file, but here’s how to swap data sources:
a) Load another CSV: Just change the filename when you create the data feed.
data = bt.feeds.YahooFinanceCSVData(dataname='MSFT.csv')
b) Use Yahoo Finance directly (no CSV):
data = bt.feeds.PandasData(dataname=yf.download('MSFT', start='2021-01-01',
end='2023-01-01').droplevel(1, 1))
(Don’t forget to import yfinance as yf at the top!)
2. Writing Your Strategy Class
Let’s build a strategy that uses both a short and long moving average (a classic technique).
import backtrader as bt
class SmaCrossMulti(bt.Strategy):
params = (('fast_period', 10), ('slow_period', 30))
def __init__(self):
self.fast_sma = bt.ind.SMA(period=self.p.fast_period)
self.slow_sma = bt.ind.SMA(period=self.p.slow_period)
def next(self):
# Buy: fast SMA crosses above slow SMA
if not self.position and self.fast_sma[0] > self.slow_sma[0] and
self.fast_sma[-1] <= self.slow_sma[-1]:
self.buy()
# Sell: fast SMA crosses below slow SMA
elif self.position and self.fast_sma[0] < self.slow_sma[0] and
self.fast_sma[-1] >= self.slow_sma[-1]:
self.sell()
Chapter 4: Build, Tweak, and Experiment – Your First Real Strategy 13
• Change fast_period and slow_period to experiment.
• The “crosses above/below” logic checks both today and yesterday.
3. Running the Backtest
Full script:
import backtrader as bt
from datetime import datetime
class SmaCrossMulti(bt.Strategy):
params = (('fast_period', 10), ('slow_period', 30))
def __init__(self):
self.fast_sma = bt.ind.SMA(period=self.p.fast_period)
self.slow_sma = bt.ind.SMA(period=self.p.slow_period)
def next(self):
if not self.position and self.fast_sma[0] > self.slow_sma[0] and
self.fast_sma[-1] <= self.slow_sma[-1]:
self.buy()
elif self.position and self.fast_sma[0] < self.slow_sma[0] and
self.fast_sma[-1] >= self.slow_sma[-1]:
self.sell()
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceCSVData(dataname='AAPL.csv') # or use
YahooFinanceData as above
cerebro.adddata(data)
cerebro.addstrategy(SmaCrossMulti, fast_period=10, slow_period=30)
cerebro.broker.set_cash(10000)
cerebro.run()
cerebro.plot()
4. Visualizing Results
• The cerebro.plot() line gives you an interactive chart.
• Buy/sell arrows will appear—mouse over them for details.
Chapter 4: Build, Tweak, and Experiment – Your First Real Strategy 14
5. Tweaking Parameters
Change fast_period, slow_period, or even the ticker symbol. Try running multiple
strategies with different parameters by calling addstrategy multiple times (advanced).
6. Adding Commission and Slippage
Backtrader can simulate costs:
cerebro.broker.setcommission(commission=0.001) # 0.1% per trade
7. Common Debugging Tips
• Add print(self.datetime.date(0), self.position, self.fast_sma[0],
self.slow_sma[0]) in next() to debug signals.
• If your plot is empty, check the data file’s date range and column format.
What Next?
You’ve now:
• Loaded real data
Chapter 4: Build, Tweak, and Experiment – Your First Real Strategy 15
• Built a classic crossover strategy
• Customized indicators and parameters
• Simulated trading costs
Chapters 2 to 7 of “Backtrader Essentials” cover in detail how to use built-in indicators,
momentum and mean-reversion strategies, how to define and use custom indicators, and
how to design and develop an advanced enhanced strategy step by step by combining
signals and filters, You will learn how to turn a losing strategy into a profitable one by
learning how to design, test, and analyze your strategies step by step and add conditions to
filter out false signals and increase the success rate of your strategy and also limit your
losses by proper risk management techniques.
Next: We’ll show how to try new indicators and share resources for deeper learning!
Chapter 5: Next Steps & Your Quick Reference Cheatsheet 16
Chapter 5: Next Steps & Your Quick Reference
Cheatsheet
Try New Indicators & Strategies
Backtrader has dozens of built-in indicators—RSI, EMA, Bollinger Bands, ATR, and more.
Swap them into your strategy and experiment!
Example: Adding RSI for overbought/oversold signals
class RsiStrategy(bt.Strategy):
def __init__(self):
self.rsi = bt.indicators.RSI_SMA(self.data.close, period=14)
def next(self):
if not self.position and self.rsi < 30:
self.buy() # Oversold, go long
elif self.position and self.rsi > 70:
self.sell() # Overbought, exit
• Find more indicators: Backtrader Indicator Reference
Where to Get More Data
• yfinance (for stocks, ETFs, Crypto, etc): Download via code as you’ve seen.
• Cryptocurrency: Use ccxt or direct exchange APIs (advanced).
• Custom data: Load your own CSVs or pandas DataFrames.
Optimizing Strategies
• Parameter sweeps: Backtrader lets you optimize easily:
cerebro.optstrategy(SmaCrossMulti, fast_period=range(5, 21),
slow_period=range(20, 51))
• Performance analyzers: Add analyzers for drawdown, Sharpe ratio, and more:
cerebro.addanalyzer(bt.analyzers.SharpeRatio)
Joining the Community & Learning More
• Backtrader Docs & Community: https://www.backtrader.com/docu/
Chapter 5: Next Steps & Your Quick Reference Cheatsheet 17
• Quantitative Finance StackExchange: Ask specific questions and get answers
from pros.
• GitHub: Tons of open-source strategy code: backtrader/backtrader
• Books & Blogs:
o PyQuantLab articles: Many of PyQuantLab articles are about backtesting
trading strategies with Python and Backtrader. You can check them out here:
https://www.pyquantlab.com/#articles
o Backtrader Essentials book: To learn how to develop and backtest
advanced strategies with thorough examples and source codes:
https://www.pyquantlab.com/books/Backtrader%20Essentials.html
o Moving Average Convergence book: Discover why understanding MAs is
essential for any trader. Explore their versatility in trend identification,
support/resistance, signal generation, and momentum gauging. Master the
core concepts that form the foundation for advanced indicators like MACD
and Bollinger Bands. This book covers key MA types including SMA, EMA,
DEMA, TEMA, and the Guppy Multiple Moving Average (GMMA). Practical
Python examples using Backtrader illustrate the strategies in action:
https://www.pyquantlab.com/books/Moving%20Average%20Convergence.h
tml
Cheatsheet: Most Useful Backtrader Snippets
# Add a simple moving average
self.sma = bt.indicators.SMA(self.data.close, period=20)
# Place a buy order
self.buy()
# Place a sell order
self.sell()
# Set commission
cerebro.broker.setcommission(commission=0.001)
# Load Yahoo data directly
data = bt.feeds.YahooFinanceData(dataname='AAPL',
fromdate=datetime(2022,1,1), todate=datetime(2023,1,1))
What Now?
You’re already ahead of most beginners!
Chapter 5: Next Steps & Your Quick Reference Cheatsheet 18
• Keep tweaking your strategies.
• Try new indicators.
• Read code and share with others.
• When ready, experiment with live paper trading (see the Backtrader docs for
brokers).
Most of all—keep it simple, keep learning, and have fun.
Congratulations!
You’ve just completed your first algorithmic trading mini bootcamp, in record time.