Awesome
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
Page 2 - Volatility rolling percentiles
Page 3 - Volatility rolling min and max
Page 4 - Volatility rolling mean, standard deviation and zscore
Page 5 - Volatility distribution
Page 6 - Volatility, benchmark volatility and ratio###
Page 7 - Volatility rolling correlation with benchmark
Page 3 - Volatility OLS results
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