MCPcopy
hub / github.com/jasonstrimpel/volatility-trading

github.com/jasonstrimpel/volatility-trading @main sqlite

repository ↗ · DeepWiki ↗
25 symbols 71 edges 14 files 11 documented · 44%
README

volest

Learn how to apply this code to your own options trading

Getting Started With Python for Quant Finance is the cohort-based course and community that will take you from complete beginner to up and running with Python for quant finance in 30 days.

A complete set of volatility estimators based on Euan Sinclair's Volatility Trading

The original version incorporated network data acquisition from Yahoo!Finance from pandas_datareader. Yahoo! changed their API and broke pandas_datareader.

The changes allow you to specify your own data so you're not tied into equity data from Yahoo! finance. If you're still using equity data, just download a CSV from finance.yahoo.com and use the data.yahoo_data_helper method to form the data properly.

Volatility estimators include:

  • Garman Klass
  • Hodges Tompkins
  • Parkinson
  • Rogers Satchell
  • Yang Zhang
  • Standard Deviation

Also includes

  • Skew
  • Kurtosis
  • Correlation

For each of the estimators, plot:

  • Probability cones
  • Rolling quantiles
  • Rolling extremes
  • Rolling descriptive statistics
  • Histogram
  • Comparison against arbirary comparable
  • Correlation against arbirary comparable
  • Regression against arbirary comparable

Create a term sheet with all the metrics printed to a PDF.

Page 1 - Volatility cones

Capture-1

Page 2 - Volatility rolling percentiles

Capture-2

Page 3 - Volatility rolling min and max

Capture-3

Page 4 - Volatility rolling mean, standard deviation and zscore

Capture-4

Page 5 - Volatility distribution

Capture-5

Page 6 - Volatility, benchmark volatility and ratio

Capture-6

Page 7 - Volatility rolling correlation with benchmark

Capture-7

Page 3 - Volatility OLS results

Capture-8

Example usage:


from volatility import volest
import yfinance as yf

# data
symbol = 'JPM'
bench = 'SPY'
estimator = 'GarmanKlass'

# estimator windows
window = 30
windows = [30, 60, 90, 120]
quantiles = [0.25, 0.75]
bins = 100
normed = True

# use the yahoo helper to correctly format data from finance.yahoo.com
jpm_price_data = yf.Ticker(symbol).history(period="5y")
jpm_price_data.symbol = symbol
spx_price_data = yf.Ticker(bench).history(period="5y")
spx_price_data.symbol = bench

# initialize class
vol = volest.VolatilityEstimator(
    price_data=jpm_price_data,
    estimator=estimator,
    bench_data=spx_price_data
)

# call plt.show() on any of the below...
_, plt = vol.cones(windows=windows, quantiles=quantiles)
_, plt = vol.rolling_quantiles(window=window, quantiles=quantiles)
_, plt = vol.rolling_extremes(window=window)
_, plt = vol.rolling_descriptives(window=window)
_, plt = vol.histogram(window=window, bins=bins, normed=normed)

_, plt = vol.benchmark_compare(window=window)
_, plt = vol.benchmark_correlation(window=window)

# ... or create a pdf term sheet with all metrics in term-sheets/
vol.term_sheet(
    window,
    windows,
    quantiles,
    bins,
    normed
)

Hit me on twitter with comments, questions, issues @jasonstrimpel

Core symbols most depended-on inside this repo

_get_estimator
called by 11
volatility/volest.py
array_to_dataframe
called by 2
volatility/volest.py
cones
called by 1
volatility/volest.py
rolling_quantiles
called by 1
volatility/volest.py
rolling_extremes
called by 1
volatility/volest.py
rolling_descriptives
called by 1
volatility/volest.py
histogram
called by 1
volatility/volest.py
benchmark_compare
called by 1
volatility/volest.py

Shape

Function 13
Method 11
Class 1

Languages

Python100%

Modules by API surface

volatility/volest.py13 symbols
volatility/models/RogersSatchell.py2 symbols
volatility/models/Parkinson.py2 symbols
volatility/models/GarmanKlass.py2 symbols
volatility/models/YangZhang.py1 symbols
volatility/models/Skew.py1 symbols
volatility/models/Raw.py1 symbols
volatility/models/Kurtosis.py1 symbols
volatility/models/HodgesTompkins.py1 symbols
volatility/data.py1 symbols

For agents

$ claude mcp add volatility-trading \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact