TECHQUANT
Complete Beginner-to-Pro Course
Quantitative Finance · Algorithmic Trading · Python Programming Financial Mathematics ·
Risk Management · Machine Learning in Finance
2025 Edition · Version 1.0
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
TABLE OF CONTENTS
Ch. 1 Introduction to TechQuant
· What is TechQuant?
· Why TechQuant Matters Today
· How This Course is Structured
· Tools You Will Need
Ch. 2 Python Fundamentals for Finance
· Setting Up Python & Jupyter
· Core Python Syntax
· Working With Numbers & Math
· Lists, Dicts & DataFrames
Ch. 3 Financial Markets 101
· How Markets Work
· Asset Classes Explained
· Reading Price Data
· Market Participants
Ch. 4 Financial Mathematics
· Time Value of Money
· Returns & Compounding
· Statistics for Finance
· Probability Basics
Ch. 5 Getting & Processing Financial Data
· Free Data Sources
· Using yfinance & pandas-datareader
· Cleaning & Transforming Data
· Exploratory Data Analysis
Ch. 6 Technical Analysis & Indicators
· Price Charts & Candlesticks
· Moving Averages
· RSI, MACD & Bollinger Bands
· Building Custom Indicators
Ch. 7 Quantitative Strategy Development
· What is a Quant Strategy?
© 2025 TechQuant Institute — All Rights Reserved Page 2 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
· Mean Reversion Strategies
· Momentum Strategies
· Pairs Trading
Ch. 8 Backtesting — Testing Your Strategy
· What is Backtesting?
· Building a Backtester in Python
· Performance Metrics
· Common Pitfalls (Overfitting etc.)
Ch. 9 Risk Management
· Why Risk Management is #1
· Value at Risk (VaR)
· Position Sizing
· Drawdown & Sharpe Ratio
Ch. 10 Machine Learning in Finance
· ML Concepts Made Simple
· Supervised Learning for Price Prediction
· Feature Engineering
· Model Evaluation & Validation
Ch. 11 Building a Live Trading Bot
· Paper Trading vs Live Trading
· Connecting to a Broker API
· Order Types & Execution
· A Simple Live Bot in Python
Ch. 12 Portfolio & Career Roadmap
· Building Your Portfolio
· Quant Career Paths
· Recommended Resources
· Next Steps
© 2025 TechQuant Institute — All Rights Reserved Page 3 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 1
Introduction to TechQuant
1.1 What is TechQuant?
TechQuant is the exciting intersection of technology and quantitative finance. Think of it as
using the power of computers, mathematics, and data to understand, predict, and profit from
financial markets. The word itself is a fusion of two worlds: Tech (technology, programming, data
science) and Quant (quantitative analysis, mathematical modeling, statistics).
Traditionally, finance was done by humans manually — reading reports, calling brokers, using gut
feelings. TechQuant flips this on its head. Instead of guessing, you build models, run experiments
on data, and let the math guide your decisions. Big hedge funds like Renaissance Technologies,
Two Sigma, and D.E. Shaw have made billions using exactly these techniques.
Quantitative Analyst (Quant) — A professional who uses mathematics, statistics, and programming
to solve financial problems — from pricing options to building trading robots.
Algorithmic Trading — Trading financial assets (stocks, bonds, crypto, etc.) using computer
programs that follow pre-set rules — no human emotions involved.
Alpha — The holy grail of quant finance — a return that is better than the overall market, generated by
your strategy. If everyone makes 10% and you make 15%, your alpha is 5%.
1.2 Why TechQuant Matters Today
We are living in a golden age for TechQuant. Here is why:
• Data Explosion: More financial data is available than ever — tick-by-tick prices, news
sentiment, satellite imagery of car parks, credit card spending. Those who can process it win.
• Cheap Computing: Cloud computing means you can run simulations that would have cost
millions in 2000 for just a few dollars today.
• Open-Source Tools: Python, along with libraries like pandas, NumPy, and scikit-learn, are
free and incredibly powerful.
• Democratization: Retail traders now have access to broker APIs, enabling the same tools
that big hedge funds use.
• High Demand: Quant roles are among the highest-paid in finance and technology — starting
salaries often exceed $150,000 USD.
© 2025 TechQuant Institute — All Rights Reserved Page 4 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
■ TIP: You do NOT need a PhD to start. Many successful quant traders are self-taught. Consistency
and curiosity are more important than credentials.
1.3 How This Course is Structured
This course is designed as a complete journey from absolute beginner to confident practitioner.
Each chapter builds on the previous one. Here is the overall flow:
Phase Chapters What You Learn
Foundation 1–3 Core concepts, Python setup, how markets work
Mathematics 4 Returns, statistics, time value of money
Data Skills 5–6 Fetching data, technical indicators
Strategy 7–8 Building and backtesting quant strategies
Risk & ML 9 – 10 Risk management, machine learning in finance
Production 11 – 12 Live trading, career roadmap
1.4 Tools You Will Need
Before we dive in, let's make sure you have the right tools. Everything listed below is completely
free.
Tool Purpose Where to Get It
Python 3.10+ Main programming language [Link]
Jupyter Notebook Interactive coding environment [Link]
Anaconda (optional) Bundles Python + all key [Link]
libraries
VS Code Code editor (alternative to [Link]
Jupyter)
Git Version control for your code [Link]
To install all required Python libraries at once, open your terminal and run:
CODE
pip install numpy pandas matplotlib seaborn yfinance
pip install scipy statsmodels scikit-learn
pip install ta-lib backtrader alpaca-trade-api
pip install plotly jupyterlab
© 2025 TechQuant Institute — All Rights Reserved Page 5 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
■■ NOTE: If you are on Windows and ta-lib fails to install, download the prebuilt wheel from:
[Link]
© 2025 TechQuant Institute — All Rights Reserved Page 6 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 2
Python Fundamentals for Finance
2.1 Setting Up Python & Jupyter
Python is the language of choice for TechQuant. It is readable, powerful, and has the richest
ecosystem of financial libraries in the world. Jupyter Notebook lets you write code in cells and see
results instantly — perfect for data exploration.
To launch Jupyter, open your terminal and type:
CODE
jupyter lab
Your browser will open automatically. Click New Notebook → Python 3 to start.
2.2 Core Python Syntax
Variables & Data Types
Variables store data. Python is dynamically typed — you don't need to declare types.
CODE
# Basic variable assignment
stock_price = 150.75 # float (decimal number)
company_name = 'Apple Inc' # string (text)
shares_owned = 100 # integer (whole number)
is_profitable = True # boolean (True/False)
# Calculate portfolio value
portfolio_value = stock_price * shares_owned
print(f'Portfolio value: ${portfolio_value:,.2f}')
# Output: Portfolio value: $15,075.00
Control Flow — If Statements & Loops
CODE
# If statement — make decisions
price = 155.0
if price > 150:
print('Stock is above our buy target')
elif price == 150:
© 2025 TechQuant Institute — All Rights Reserved Page 7 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
print('Stock is at buy target')
else:
print('Stock is below buy target')
# For loop — repeat actions
prices = [148, 150, 153, 149, 155]
for p in prices:
if p > 152:
print(f'High price detected: {p}')
Functions — Reusable Code Blocks
CODE
def calculate_return(buy_price, sell_price):
'''Calculate simple percentage return'''
return_pct = ((sell_price - buy_price) / buy_price) * 100
return return_pct
# Use the function
my_return = calculate_return(100, 115)
print(f'Return: {my_return:.2f}%') # Output: Return: 15.00%
2.3 Working With Numbers & Math (NumPy)
NumPy is the backbone of numerical computing in Python. It provides arrays — like supercharged
lists that support lightning-fast math operations.
CODE
import numpy as np
# Create an array of daily returns (%)
daily_returns = [Link]([0.5, -1.2, 0.8, 2.1, -0.3, 1.5])
# Key statistics
print('Mean return: ', [Link](daily_returns))
print('Std deviation:', [Link](daily_returns)) # volatility!
print('Max return: ', [Link](daily_returns))
print('Min return: ', [Link](daily_returns))
# Cumulative product — growing $1000
growth = 1000 * [Link](1 + daily_returns/100)
print(f'Final value: ${growth:.2f}')
2.4 Lists, Dicts & DataFrames (pandas)
pandas is the most important library for financial data. Its core structure, the DataFrame, is like a
spreadsheet inside Python — rows of data with named columns.
CODE
import pandas as pd
© 2025 TechQuant Institute — All Rights Reserved Page 8 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
# Create a simple DataFrame of stock data
data = {
'Date' : ['2024-01-01','2024-01-02','2024-01-03'],
'Open' : [150.0, 152.5, 149.8],
'Close' : [152.5, 149.8, 153.2],
'Volume' : [1200000, 980000, 1450000]
}
df = [Link](data)
# Calculate daily return
df['Return_%'] = ((df['Close'] - df['Open']) / df['Open']) * 100
print(df)
# Filter: only days with positive returns
positive_days = df[df['Return_%'] > 0]
print(positive_days)
■ TIP: pandas DataFrames are your best friend. Master them and you can handle any financial
dataset with ease. Practice every day!
© 2025 TechQuant Institute — All Rights Reserved Page 9 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 3
Financial Markets 101
3.1 How Markets Work
A financial market is simply a place — physical or electronic — where buyers and sellers agree
on a price for a financial asset. The stock exchange is the most famous example, but markets exist
for bonds, currencies (Forex), commodities (gold, oil), and cryptocurrencies.
The price of any asset is determined by supply and demand. If more people want to buy Apple
stock than sell it, the price goes up. If panic sets in and everyone sells, the price drops. Simple —
but the reasons behind these shifts can be extremely complex.
Order Book — A live list of all pending buy (bid) and sell (ask) orders for an asset. When a buy order
matches a sell order, a trade happens.
Bid-Ask Spread — The difference between the highest price a buyer will pay (bid) and the lowest
price a seller will accept (ask). This is a transaction cost you pay every trade.
Liquidity — How easily you can buy or sell an asset without affecting its price. Apple stock is highly
liquid. A tiny micro-cap stock is not.
3.2 Asset Classes Explained
Asset Class What It Is Example Risk Level
Equities (Stocks) Ownership in a company Apple (AAPL) Medium-High
Bonds / Fixed Loans to companies or US Treasury 10Y Low-Medium
Income governments
Commodities Physical goods Gold, Crude Oil Medium-High
Forex Currency pairs EUR/USD Medium-High
Derivatives Contracts based on other Options, Futures High-Very
assets High
Cryptocurrencies Digital assets on blockchain Bitcoin, Ethereum Very High
REITs Real estate investment VNQ ETF Medium
trusts
© 2025 TechQuant Institute — All Rights Reserved Page 10 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
3.3 Reading Price Data
Financial price data is usually provided in OHLCV format. Each row represents one time period
(e.g. one day, one hour, one minute):
Field Meaning Example
O — Open Price at the start of the period $150.00
H — High Highest price during the period $153.50
L — Low Lowest price during the period $148.75
C — Close Price at the end of the period $152.30
V — Volume Number of shares/units traded 1,200,000
3.4 Market Participants
Understanding who else is in the market helps you understand price movements:
• Retail Traders: Individual people trading from home. Small position sizes, often emotional
decision-making. This is where most beginners start.
• Institutional Investors: Mutual funds, pension funds, insurance companies. They move large
amounts of money and move prices.
• Hedge Funds: Sophisticated funds that can go long (buy) and short (sell borrowed assets).
Many are quant-driven.
• Market Makers: Provide liquidity by always being willing to buy and sell. They profit from the
bid-ask spread.
• High-Frequency Traders (HFT): Use ultra-fast computers and co-location to execute
thousands of trades per second.
■■ NOTE: As a retail quant trader, you cannot compete with HFT on speed. Your edge comes from
better strategy and risk management, not faster hardware.
© 2025 TechQuant Institute — All Rights Reserved Page 11 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 4
Financial Mathematics
4.1 Time Value of Money
This is the single most important concept in all of finance: a dollar today is worth more than a
dollar tomorrow. Why? Because you can invest today's dollar and earn returns on it. This idea
underpins everything — from stock valuation to option pricing.
Future Value (FV): What your money grows to after n years at interest rate r:
CODE
def future_value(present_value, rate, years):
return present_value * (1 + rate) ** years
# $1,000 invested at 8% for 10 years
fv = future_value(1000, 0.08, 10)
print(f'Future Value: ${fv:.2f}') # $2,158.93
Present Value (PV): What a future amount is worth today:
CODE
def present_value(future_value, rate, years):
return future_value / (1 + rate) ** years
# What is $5,000 in 5 years worth today at 6% discount rate?
pv = present_value(5000, 0.06, 5)
print(f'Present Value: ${pv:.2f}') # $3,736.29
4.2 Returns & Compounding
There are two main ways to calculate returns — make sure you use the right one!
Simple Returns
CODE
simple_return = (price_end - price_start) / price_start
# e.g. (110 - 100) / 100 = 0.10 = 10%
Log Returns (used in quant finance)
Log returns are additive over time and more mathematically convenient:
CODE
© 2025 TechQuant Institute — All Rights Reserved Page 12 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
import numpy as np
log_return = [Link](price_end / price_start)
# e.g. log(110/100) = log(1.1) = 0.0953 = ~9.53%
# Converting a series of prices to log returns with pandas:
df['Log_Return'] = [Link](df['Close'] / df['Close'].shift(1))
4.3 Statistics for Finance
These five statistical concepts are used in almost every quant strategy:
CODE
import numpy as np, pandas as pd
returns = [Link]([0.01, -0.02, 0.03, -0.01, 0.015, 0.008, -0.005])
mean = [Link](returns) # Average return
std = [Link](returns) # Volatility (standard deviation)
skew = [Link](returns).skew()# Skewness: asymmetry of distribution
kurt = [Link](returns).kurt()# Kurtosis: fat tails
sharpe = mean / std * [Link](252)# Annualised Sharpe ratio
print(f'Mean: {mean:.4f}')
print(f'Std Dev: {std:.4f}')
print(f'Sharpe: {sharpe:.2f}')
Sharpe Ratio — Return per unit of risk. A Sharpe above 1.0 is good, above 2.0 is excellent. This is the
#1 metric hedge funds use to evaluate strategies.
Standard Deviation — How much returns vary from the average. Higher = more volatile = more risk.
Also called 'volatility' in finance.
4.4 Probability Basics
Quant trading is fundamentally about probabilities. You don't need to be right every time — you
need your wins to be bigger than your losses on average. This is called having positive expected
value (EV).
CODE
# Expected Value = P(win) * profit_per_win - P(loss) * loss_per_loss
p_win = 0.45 # Win 45% of trades
profit_win = 200 # $200 profit per win
p_loss = 0.55 # Lose 55% of trades
loss_loss = 100 # $100 loss per loss
EV = p_win * profit_win - p_loss * loss_loss
print(f'Expected Value per trade: ${EV:.2f}') # $35.00
# Positive EV => profitable strategy over many trades
© 2025 TechQuant Institute — All Rights Reserved Page 13 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 5
Getting & Processing Financial Data
5.1 Free Data Sources
Source What You Get Library / URL
Yahoo Finance Stocks, ETFs, Forex, Crypto yfinance
OHLCV data
Alpha Vantage Stocks, forex, crypto, fundamentals alpha_vantage
(API key needed)
Quandl / Nasdaq Economic & financial datasets nasdaqdatalink
Data Link
FRED (Federal Macroeconomic data (interest fredapi
Reserve) rates, CPI, etc.)
Binance / Coinbase Cryptocurrency tick data ccxt library
APIs
WRDS (Academic) Professional-grade datasets [Link]
(university access)
5.2 Using yfinance
yfinance is the easiest way to get stock data for free. Here is how to download years of historical
data in just a few lines:
CODE
import yfinance as yf
import pandas as pd
# Download Apple stock data
aapl = [Link]('AAPL', start='2020-01-01', end='2024-12-31')
print([Link]()) # First 5 rows
print([Link]) # (rows, columns)
# Download multiple stocks at once
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN']
data = [Link](tickers, start='2022-01-01', end='2024-12-31')
# Get just closing prices
closes = data['Close']
print([Link]())
© 2025 TechQuant Institute — All Rights Reserved Page 14 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
# Get company info
ticker = [Link]('AAPL')
info = [Link]
print(info['longName'], info['marketCap'])
5.3 Cleaning & Transforming Data
Real-world data is messy. It has missing values, weird outliers, and incorrect formats. Always clean
your data before using it:
CODE
import pandas as pd, numpy as np
import yfinance as yf
df = [Link]('SPY', start='2020-01-01', end='2024-12-31')
# 1. Check for missing values
print([Link]().sum())
# 2. Fill missing values (forward fill is common)
df = [Link]()
# 3. Remove duplicate dates
df = df[~[Link]()]
# 4. Add useful calculated columns
df['Return'] = df['Close'].pct_change() # daily % return
df['Log_Ret'] = [Link](df['Close']/df['Close'].shift(1))
df['Volatility']= df['Return'].rolling(20).std() * [Link](252) # 20-day vol
# 5. Drop NaN rows (from calculations)
[Link](inplace=True)
print([Link]())
5.4 Exploratory Data Analysis
CODE
import [Link] as plt
fig, axes = [Link](2, 2, figsize=(14, 8))
# Price chart
axes[0,0].plot(df['Close'], color='steelblue', linewidth=1)
axes[0,0].set_title('SPY Closing Price')
axes[0,0].set_xlabel('Date')
# Daily returns histogram
axes[0,1].hist(df['Return'].dropna(), bins=80, color='steelblue', alpha=0.7)
axes[0,1].set_title('Distribution of Daily Returns')
# Rolling volatility
axes[1,0].plot(df['Volatility'], color='tomato', linewidth=1)
axes[1,0].set_title('20-Day Rolling Volatility (Annualised)')
# Volume bar chart
© 2025 TechQuant Institute — All Rights Reserved Page 15 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
axes[1,1].bar([Link], df['Volume'], color='grey', alpha=0.5, width=1)
axes[1,1].set_title('Daily Trading Volume')
plt.tight_layout()
[Link]('eda_plots.png', dpi=150)
[Link]()
© 2025 TechQuant Institute — All Rights Reserved Page 16 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 6
Technical Analysis & Indicators
6.1 Price Charts & Candlesticks
A candlestick chart is the most popular way to visualize price data. Each candle represents one
time period and shows the open, high, low, and close price. Green (or white) candles mean price
went UP. Red (or black) candles mean price went DOWN.
Bullish Candle — Close > Open. Price moved up during the period.
Bearish Candle — Close < Open. Price moved down during the period.
Wick / Shadow — The thin lines above/below the body showing the high and low.
CODE
import plotly.graph_objects as go
import yfinance as yf
df = [Link]('AAPL', start='2024-01-01', end='2024-06-30')
fig = [Link](data=[[Link](
x=[Link],
open=df['Open'], high=df['High'],
low=df['Low'], close=df['Close']
)])
fig.update_layout(title='AAPL Candlestick Chart', xaxis_rangeslider_visible=False)
[Link]()
6.2 Moving Averages
Moving averages smooth out price data to help identify trends. They are calculated by averaging
the closing price over n periods.
Simple Moving Average (SMA)
CODE
# SMA: equal weight to all periods
df['SMA_20'] = df['Close'].rolling(window=20).mean() # 20-day SMA
df['SMA_50'] = df['Close'].rolling(window=50).mean() # 50-day SMA
# Golden Cross signal: SMA_20 crosses above SMA_50 => bullish
df['Signal'] = 0
© 2025 TechQuant Institute — All Rights Reserved Page 17 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
[Link][df['SMA_20'] > df['SMA_50'], 'Signal'] = 1 # Buy
[Link][df['SMA_20'] < df['SMA_50'], 'Signal'] = -1 # Sell
Exponential Moving Average (EMA)
EMA gives more weight to recent prices, making it more responsive to new information:
CODE
# EMA: more weight to recent prices
df['EMA_12'] = df['Close'].ewm(span=12, adjust=False).mean()
df['EMA_26'] = df['Close'].ewm(span=26, adjust=False).mean()
6.3 RSI, MACD & Bollinger Bands
RSI — Relative Strength Index (0–100)
RSI measures momentum. Above 70 = overbought (may fall). Below 30 = oversold (may rise).
CODE
def calculate_rsi(series, period=14):
delta = [Link]()
gain = [Link](delta > 0, 0).rolling(period).mean()
loss = (-[Link](delta < 0, 0)).rolling(period).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi
df['RSI'] = calculate_rsi(df['Close'])
MACD — Moving Average Convergence Divergence
CODE
# MACD = EMA(12) - EMA(26)
df['MACD'] = df['EMA_12'] - df['EMA_26']
df['Signal_Line'] = df['MACD'].ewm(span=9, adjust=False).mean()
df['Histogram'] = df['MACD'] - df['Signal_Line']
# Buy when MACD crosses above Signal Line
Bollinger Bands
CODE
period = 20
df['BB_Middle'] = df['Close'].rolling(period).mean()
df['BB_Std'] = df['Close'].rolling(period).std()
df['BB_Upper'] = df['BB_Middle'] + 2 * df['BB_Std']
df['BB_Lower'] = df['BB_Middle'] - 2 * df['BB_Std']
# Price touching lower band = possible buy signal (mean reversion)
© 2025 TechQuant Institute — All Rights Reserved Page 18 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
# Price touching upper band = possible sell signal
■ TIP: Technical indicators are tools, not magic. Always combine them with risk management and
backtesting. No single indicator is consistently profitable alone.
© 2025 TechQuant Institute — All Rights Reserved Page 19 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 7
Quantitative Strategy Development
7.1 What is a Quant Strategy?
A quant strategy is a set of rules that tells you when to buy, when to sell, how much to buy, and
how to manage risk — all defined mathematically so a computer can execute it without human
emotion. Great quant strategies have:
• An Edge: A reason why it should work (statistical, behavioral, structural)
• Clear Entry Rules: Precise conditions for opening a position
• Clear Exit Rules: When to take profit or cut losses
• Position Sizing: How much capital to allocate per trade
• Risk Controls: Max drawdown limits, stop-losses
7.2 Mean Reversion Strategy
Mean reversion is based on the idea that prices tend to return to their historical average over time.
When a stock deviates too far from its mean, you bet it will come back.
CODE
import pandas as pd, numpy as np
import yfinance as yf
df = [Link]('SPY', start='2018-01-01', end='2024-01-01')
# Z-score: how many std devs is price from its 20-day mean?
window = 20
df['MA'] = df['Close'].rolling(window).mean()
df['STD'] = df['Close'].rolling(window).std()
df['Z_Score']= (df['Close'] - df['MA']) / df['STD']
# Strategy: Buy when Z < -1.5 (oversold), Sell when Z > 1.5 (overbought)
df['Position'] = 0
[Link][df['Z_Score'] < -1.5, 'Position'] = 1 # Long
[Link][df['Z_Score'] > 1.5, 'Position'] = -1 # Short
# Forward fill positions (hold until signal changes)
df['Position'] = df['Position'].replace(0, [Link]).ffill().fillna(0)
7.3 Momentum Strategy
© 2025 TechQuant Institute — All Rights Reserved Page 20 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
Momentum is the opposite of mean reversion — assets that have performed well recently tend to
keep performing well (and vice versa). This is one of the most well-documented anomalies in
finance.
CODE
# 12-1 Momentum: return over last 12 months, skip most recent month
# (Jegadeesh & Titman 1993 — classic academic paper)
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'META', 'TSLA', 'NVDA', 'JPM']
data = [Link](tickers, start='2019-01-01', end='2024-01-01')['Close']
# Calculate 12-month return, skipping last month
momentum = data.pct_change(252).shift(21) # 252 trading days, skip 21
# Rank stocks by momentum each month — go long top 3, short bottom 3
ranks = [Link](axis=1, ascending=False)
long = (ranks <= 3).astype(int) # Top 3
short = (ranks >= 6).astype(int) # Bottom 3
weights = (long - short) / 3 # Equal weight
7.4 Pairs Trading (Statistical Arbitrage)
Pairs trading finds two assets that historically move together. When they diverge, you buy the
underperformer and short the overperformer, betting they will converge.
CODE
from [Link] import coint
# Test if two assets are cointegrated
data = [Link](['KO', 'PEP'], start='2018-01-01', end='2024-01-01')['Close']
score, pvalue, _ = coint(data['KO'], data['PEP'])
print(f'Cointegration p-value: {pvalue:.4f}')
# p-value < 0.05 => cointegrated => pairs trade candidate!
# Calculate spread
import [Link] as sm
X = sm.add_constant(data['PEP'])
model = [Link](data['KO'], X).fit()
hedge_ratio = [Link]['PEP']
data['Spread'] = data['KO'] - hedge_ratio * data['PEP']
data['Z_Score']= (data['Spread'] - data['Spread'].mean()) / data['Spread'].std()
© 2025 TechQuant Institute — All Rights Reserved Page 21 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 8
Backtesting — Testing Your Strategy
8.1 What is Backtesting?
Backtesting is the process of simulating your strategy on historical data to see how it would
have performed. It is the most important step before risking real money. Think of it as a flight
simulator for trading — you practice without crashing a real plane.
■ The Golden Rule: A strategy that worked in the past does not guarantee future profits. But a
strategy that FAILED in the past will almost certainly fail in the future.
8.2 Building a Simple Backtester in Python
CODE
import pandas as pd, numpy as np, yfinance as yf
# --- 1. Get data ---
df = [Link]('SPY', start='2015-01-01', end='2024-01-01')
# --- 2. Define strategy signals (SMA Crossover) ---
df['SMA_20'] = df['Close'].rolling(20).mean()
df['SMA_50'] = df['Close'].rolling(50).mean()
df['Signal'] = [Link](df['SMA_20'] > df['SMA_50'], 1, 0)
df['Position']= df['Signal'].shift(1) # act on yesterday's signal
# --- 3. Calculate returns ---
df['Market_Return'] = df['Close'].pct_change()
df['Strategy_Return'] = df['Market_Return'] * df['Position']
# --- 4. Cumulative performance ---
df['Market_Cumulative'] = (1 + df['Market_Return']).cumprod()
df['Strategy_Cumulative'] = (1 + df['Strategy_Return']).cumprod()
# --- 5. Print results ---
total_return = df['Strategy_Cumulative'].iloc[-1] - 1
print(f'Strategy Total Return: {total_return:.2%}')
8.3 Performance Metrics
CODE
def performance_report(returns, risk_free=0.02, periods=252):
'''Full performance report for a strategy'''
© 2025 TechQuant Institute — All Rights Reserved Page 22 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
total_ret = (1 + returns).prod() - 1
years = len(returns) / periods
cagr = (1 + total_ret) ** (1 / years) - 1
ann_vol = [Link]() * [Link](periods)
sharpe = ([Link]()*periods - risk_free) / ann_vol
# Max Drawdown
cum_ret = (1 + returns).cumprod()
rolling_max = cum_ret.cummax()
drawdown = (cum_ret - rolling_max) / rolling_max
max_dd = [Link]()
win_rate = (returns > 0).mean()
print(f'Total Return : {total_ret:>10.2%}')
print(f'CAGR : {cagr:>10.2%}')
print(f'Volatility : {ann_vol:>10.2%}')
print(f'Sharpe Ratio : {sharpe:>10.2f}')
print(f'Max Drawdown : {max_dd:>10.2%}')
print(f'Win Rate : {win_rate:>10.2%}')
performance_report(df['Strategy_Return'].dropna())
8.4 Common Pitfalls in Backtesting
Pitfall What It Is How to Avoid
Overfitting Tuning params to fit historical Use out-of-sample testing;
data perfectly — won't work in keep params simple
future
Look-Ahead Bias Accidentally using future data in Always shift signals by 1
your signals period before calculating
returns
Survivorship Bias Testing only on stocks that still Use a point-in-time index
exist today that includes delisted stocks
Transaction Costs Ignoring commissions and Subtract realistic costs
slippage (0.1% per trade minimum)
Data Snooping Testing dozens of strategies Set aside a holdout test
and cherry-picking the best period; use Bonferroni
correction
© 2025 TechQuant Institute — All Rights Reserved Page 23 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 9
Risk Management
9.1 Why Risk Management is #1
Every professional quant will tell you: strategy is secondary to risk management. Even a
mediocre strategy can be profitable with excellent risk management. Conversely, the best strategy
in the world will blow up without it. The primary goal is always to survive — to stay in the game long
enough for your edge to play out.
■ The Ruin Formula: If you lose 50% of your capital, you need a 100% gain just to get back to even.
Lose 90% and you need a 900% gain. Never let a drawdown get catastrophic.
9.2 Value at Risk (VaR)
VaR answers the question: 'How much could I lose on a bad day?' For example, '1-day 95% VaR
of $10,000' means there is a 5% chance of losing more than $10,000 in a single day.
CODE
import numpy as np, pandas as pd, yfinance as yf
df = [Link]('SPY', start='2018-01-01', end='2024-01-01')
returns = df['Close'].pct_change().dropna()
portfolio = 100_000 # $100,000 portfolio
# Historical VaR
var_95 = [Link](returns, 5) * portfolio
var_99 = [Link](returns, 1) * portfolio
print(f'1-Day 95% VaR: ${var_95:,.0f}')
print(f'1-Day 99% VaR: ${var_99:,.0f}')
# Parametric (Normal Distribution) VaR
from scipy import stats
mean, std = [Link](), [Link]()
var_95_param = [Link](0.05, mean, std) * portfolio
print(f'Parametric 95% VaR: ${var_95_param:,.0f}')
9.3 Position Sizing — The Kelly Criterion
The Kelly Criterion tells you the optimal fraction of capital to bet on each trade to maximize
long-run growth without going broke:
© 2025 TechQuant Institute — All Rights Reserved Page 24 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CODE
def kelly_fraction(win_prob, win_ratio):
'''
win_prob : probability of winning (e.g. 0.55 = 55%)
win_ratio : ratio of avg win to avg loss (e.g. 1.5 = wins are 1.5x losses)
'''
q = 1 - win_prob
f = win_prob - (q / win_ratio)
return f
f = kelly_fraction(0.55, 1.5)
print(f'Kelly fraction: {f:.2%}') # e.g. 21.67%
# In practice, use HALF-KELLY (f/2) to be conservative:
half_kelly = f / 2
print(f'Half-Kelly (recommended): {half_kelly:.2%}')
9.4 Drawdown & Sharpe Ratio
CODE
def max_drawdown(returns):
cum = (1 + returns).cumprod()
peak = [Link]()
dd = (cum - peak) / peak
return [Link]()
def calmar_ratio(returns, periods=252):
'''CAGR / Max Drawdown — another key risk metric'''
cagr = (1 + returns).prod() ** (periods/len(returns)) - 1
mdd = abs(max_drawdown(returns))
return cagr / mdd if mdd > 0 else [Link]
print(f'Max Drawdown: {max_drawdown(returns):.2%}')
print(f'Calmar Ratio: {calmar_ratio(returns):.2f}')
# Calmar > 0.5 is acceptable, > 1.0 is good
Maximum Drawdown — The largest peak-to-trough decline in portfolio value. If your portfolio went
from $100k to $60k, your max drawdown is -40%.
Calmar Ratio — CAGR divided by Max Drawdown. Higher is better. A ratio above 1.0 means your
annual return is bigger than your worst drawdown.
© 2025 TechQuant Institute — All Rights Reserved Page 25 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 10
Machine Learning in Finance
10.1 ML Concepts Made Simple
Machine learning lets computers learn patterns from data without being explicitly programmed.
Instead of writing rules like 'if RSI > 70, sell', you show the model thousands of examples and let it
figure out the rules itself.
ML Type What It Does Finance Use Case
Supervised Learning Learns from labelled examples Predict next-day return as
(input → output) Up/Down
Unsupervised Finds hidden patterns in Clustering stocks by
Learning unlabelled data behavior
Reinforcement Agent learns by trial & error with Optimize order execution
Learning rewards
Time Series Models Specifically designed for ARIMA, LSTM for price
sequential data forecasting
10.2 Supervised Learning for Price Prediction
CODE
import pandas as pd, numpy as np, yfinance as yf
from [Link] import RandomForestClassifier
from [Link] import accuracy_score
from sklearn.model_selection import TimeSeriesSplit
df = [Link]('SPY', start='2015-01-01', end='2024-01-01')
# --- Feature Engineering ---
df['Return_1d'] = df['Close'].pct_change(1)
df['Return_5d'] = df['Close'].pct_change(5)
df['Return_20d'] = df['Close'].pct_change(20)
df['Vol_20'] = df['Return_1d'].rolling(20).std()
df['SMA_ratio'] = df['Close'] / df['Close'].rolling(50).mean()
# --- Target: will next-day return be positive? ---
df['Target'] = (df['Return_1d'].shift(-1) > 0).astype(int)
[Link](inplace=True)
features = ['Return_1d','Return_5d','Return_20d','Vol_20','SMA_ratio']
X, y = df[features], df['Target']
© 2025 TechQuant Institute — All Rights Reserved Page 26 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
# --- Walk-Forward Validation (proper for time series!) ---
tscv = TimeSeriesSplit(n_splits=5)
scores = []
for train_idx, test_idx in [Link](X):
X_train, X_test = [Link][train_idx], [Link][test_idx]
y_train, y_test = [Link][train_idx], [Link][test_idx]
model = RandomForestClassifier(n_estimators=100, random_state=42)
[Link](X_train, y_train)
[Link](accuracy_score(y_test, [Link](X_test)))
print(f'Mean Accuracy: {[Link](scores):.2%}')
10.3 Feature Engineering
Features are the inputs to your ML model. Good feature engineering is often more important than
choosing the right algorithm. Here are powerful features for finance:
CODE
# Price-based features
df['Distance_52w_High'] = df['Close'] / df['High'].rolling(252).max() - 1
df['Distance_52w_Low'] = df['Close'] / df['Low'].rolling(252).min() - 1
# Volume features
df['Volume_Ratio'] = df['Volume'] / df['Volume'].rolling(20).mean()
# Volatility regimes
df['High_Vol'] = (df['Vol_20'] > df['Vol_20'].rolling(60).mean()).astype(int)
# Calendar features (seasonal patterns)
df['Month'] = [Link]
df['Weekday'] = [Link]
df['Is_MonFri'] = df['Weekday'].isin([0,4]).astype(int)
10.4 Model Evaluation & Validation
■■ NOTE: NEVER use train_test_split for financial time series! It causes look-ahead bias. Always use
TimeSeriesSplit or a walk-forward approach where training data always comes BEFORE test data in
time.
■ TIP: An accuracy of 52-55% can be enough for a profitable strategy if combined with good risk
management and position sizing. You don't need to be right 80% of the time!
© 2025 TechQuant Institute — All Rights Reserved Page 27 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 11
Building a Live Trading Bot
11.1 Paper Trading vs Live Trading
Paper trading means simulating trades with fake money but using real market prices in real time.
It is an essential step before risking actual capital. Most brokers offer paper trading environments.
Use them for at least 3–6 months before going live.
Stage What It Is Duration
1. Backtesting Test on historical data Until metrics are good
2. Paper Live market, fake money 3–6 months minimum
Trading
3. Small Live Real money, small size (1-5% of 3–6 months
Account intended capital)
4. Full Intended position size Ongoing with monitoring
Deployment
11.2 Connecting to a Broker API (Alpaca)
Alpaca is a popular commission-free broker with an excellent Python API. It offers both paper and
live trading accounts and is perfect for beginners.
CODE
# pip install alpaca-trade-api
import alpaca_trade_api as tradeapi
# Use paper trading URL for testing
BASE_URL = '[Link]
API_KEY = 'your_api_key_here' # Get from [Link]
SECRET_KEY = 'your_secret_key_here'
api = [Link](API_KEY, SECRET_KEY, BASE_URL)
# Check account
account = api.get_account()
print(f'Cash: ${[Link]}')
print(f'Portfolio Value: ${account.portfolio_value}')
# Get positions
positions = api.list_positions()
for pos in positions:
© 2025 TechQuant Institute — All Rights Reserved Page 28 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
print(f'{[Link]}: {[Link]} shares @ ${pos.current_price}')
11.3 Order Types & Execution
CODE
# Market Order — execute immediately at current price
api.submit_order(
symbol='AAPL', qty=10,
side='buy', type='market', time_in_force='gtc'
)
# Limit Order — only execute at specific price or better
api.submit_order(
symbol='AAPL', qty=10,
side='buy', type='limit', limit_price=148.50,
time_in_force='gtc'
)
# Stop-Loss Order — automatically exit if price falls
api.submit_order(
symbol='AAPL', qty=10,
side='sell', type='stop', stop_price=140.00,
time_in_force='gtc'
)
11.4 A Simple Live Trading Bot
CODE
import time, datetime
import alpaca_trade_api as tradeapi
import yfinance as yf, numpy as np
api = [Link](API_KEY, SECRET_KEY, BASE_URL)
def get_signal(symbol):
df = [Link](symbol, period='3mo', interval='1d', progress=False)
df['SMA_20'] = df['Close'].rolling(20).mean()
df['SMA_50'] = df['Close'].rolling(50).mean()
last = [Link][-1]
return 'buy' if last['SMA_20'] > last['SMA_50'] else 'sell'
def run_bot(symbol='SPY', qty=5):
print(f'Bot starting for {symbol}...')
while True:
clock = api.get_clock()
if clock.is_open: # Only trade when market is open
signal = get_signal(symbol)
positions = {[Link]: p for p in api.list_positions()}
if signal == 'buy' and symbol not in positions:
© 2025 TechQuant Institute — All Rights Reserved Page 29 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
api.submit_order(symbol=symbol, qty=qty,
side='buy', type='market', time_in_force='day')
print(f'BUY order placed for {qty} {symbol}')
elif signal == 'sell' and symbol in positions:
api.submit_order(symbol=symbol, qty=qty,
side='sell', type='market', time_in_force='day')
print(f'SELL order placed for {qty} {symbol}')
[Link](3600) # Check every hour
run_bot() # Start the bot (paper account!)
■■ NOTE: ALWAYS start with paper trading. Never run a live bot unattended. Set hard stop-loss limits
and monitor daily. Technology failures can cause large losses.
© 2025 TechQuant Institute — All Rights Reserved Page 30 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
CHAPTER 12
Portfolio & Career Roadmap
12.1 Building Your TechQuant Portfolio
To land a quant role or attract investors, you need to demonstrate your skills with real projects.
Here is what a strong TechQuant portfolio looks like:
Project What to Show Difficulty
Backtesting Custom backtester from scratch — shows ■■■
Framework deep understanding
Strategy Research Document a strategy: hypothesis, data, ■■■
Paper results, conclusions
ML Price Classifier Full pipeline: data → features → model → ■■■■
evaluation
Live Paper Trading Automated bot running on paper account with ■■■■
Bot logs
Risk Dashboard Interactive dashboard (Plotly/Dash) showing ■■■
portfolio metrics
Options Pricing Implement Black-Scholes from scratch ■■■■■
Model
12.2 Quant Career Paths
Role Main Skill Typical Salary (USD)
Quantitative Researcher Statistical modelling, strategy $150k–$500k+
research
Quantitative Developer Systems, Python/C++, $130k–$300k
execution infrastructure
Quantitative Trader Market intuition + models + risk $150k–$1M+
Risk Quant VaR, stress testing, regulatory $100k–$200k
models
Data Scientist (Finance) ML/AI for financial applications $100k–$180k
Retail Algo Trader Self-funded, self-directed Variable
© 2025 TechQuant Institute — All Rights Reserved Page 31 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
12.3 Recommended Resources
Books
• Quantitative Trading — Ernie Chan (best beginner quant book)
• Algorithmic Trading — Ernie Chan (follow-up, more advanced)
• Python for Finance — Yves Hilpisch
• Options, Futures and Other Derivatives — John Hull (the bible)
• Advances in Financial Machine Learning — Marcos Lopez de Prado
• The Man from the Future — Ananyo Bhattacharya (Von Neumann biography, inspirational)
Online Platforms
• QuantConnect ([Link]) — Free backtesting platform with data
• Quantopian Archive / Zipline — Open-source backtesting framework
• Kaggle — Financial ML competitions and free datasets
• arXiv (q-fin section) — Latest academic research in quant finance
• QuantLib — Powerful open-source library for derivatives pricing
Communities
• r/algotrading — Reddit community for algorithmic traders
• r/quant — More academic/professional quant discussions
• QuantStack Discord — Active community of quant practitioners
12.4 Your 6-Month Learning Roadmap
Month Focus Area Milestone
Month 1 Python + pandas + NumPy Comfortable with DataFrames, can clean
any dataset
Month 2 Financial data + EDA + Can download, visualize and analyze
technical indicators stock data
Month 3 First strategy + backtesting Have a working backtested strategy with
Sharpe > 0.5
Month 4 Risk management + Full performance report, realistic
strategy refinement transaction costs
Month 5 Machine learning models ML classifier with walk-forward validation
Month 6 Live paper trading bot Bot running on paper account,
documented results
© 2025 TechQuant Institute — All Rights Reserved Page 32 of 33
TECHQUANT COMPLETE COURSE Beginner to Pro — Quantitative Finance & Technology
■ Final Message: The journey to becoming a TechQuant is a marathon, not a sprint. Be consistent —
even 1 hour of focused practice per day compounds into mastery. Build things. Break things. Learn
from the data. The markets will teach you humility, but they will also reward persistence and
intellectual rigor. Good luck!
© 2025 TechQuant Institute · Complete Beginner-to-Pro Course · Version 1.0
© 2025 TechQuant Institute — All Rights Reserved Page 33 of 33