Trafalgar🃏
Python library to make development of portfolio analysis faster and easier
Installation 🔥
To install Trafalgar, you should do:
pip install trafalgar.py
(https://pypi.org/project/trafalgars/0.0.2/#description)
For Anaconda setup you can simply run below to install all dependencies with env name trafalgar.
conda env create --file environment.yaml
Note : Step 1 and 2 are not always necessary, just make sure the libraries required by trafalgar are installed in you project env.
Features include 📈
- Get close price, open price, adj close, volume and graphs of these in one line of code!
- Build a efficient frontier programm in 3 lines of code
- Make quantitative analysis on stocks/portfolios (alpha, beta, skew, kurtosis, rolling volatility...)
- Build a Capital Asset Pricing Model of a portfolio
- Backtest a portfolio, see its stats and compare it to a benchmark
- many other thnigs...
Here is the code from a google collab, you can use it to follow along with the code: https://colab.research.google.com/drive/1qgFDDQneQP-oddbJVWWApfPKFMnbpj6I?usp=sharing
Credits ✌️
This library would not exist without the existence of Github and :
Documentation🚀
Call the library
First, you should do:
from trafalgar import *
Graph of the closing price of a stock
graph_close(["FB"], "2020-01-01", "2021-01-01")
Graph of the closing price of multiple stocks
graph_close(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Graph the volume
graph_volume(["FB"], "2020-01-01", "2021-01-01")
graph_volume(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Graph the opening price
graph_open(["FB"], "2020-01-01", "2021-01-01")
graph_open(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Graph the adjusted closing price
graph_adj_close(["FB"], "2020-01-01", "2021-01-01")
graph_adj_close(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Get closing price data (in dataframe format)
close(["AAPL"], "2020-01-01", "2021-01-01")
Get volume data (in dataframe format)
volume(["AAPL"], "2020-01-01", "2021-01-01")
Get opening price data (in dataframe format)
open(["AAPL"], "2020-01-01", "2021-01-01")
Get adjusted closing price data (in dataframe format)
adj_close(["AAPL"], "2020-01-01", "2021-01-01")
Covariance between stocks
covariance(["AAPL", "DIS", "AMD"], "2020-01-01", "2021-01-01", 252)
Correlation between stocks
correlation(["AAPL", "AMD", "TSLA", "AMZN", "DIS", "SBUX", "NFLX", "AMZN", "GOOG"], "2020-01-01", "2021-01-01")
Graph correlation between stocks
graph_correlation(["AAPL", "AMD", "TSLA", "AMZN", "DIS", "SBUX", "NFLX", "AMZN", "GOOG"], "2020-01-01", "2021-01-01")
Get data from a stock in OHLCV format directly
ohlcv("AAPL", "2020-01-01", "2021-01-01")
Graph the returns (for each day)
graph_returns(["AAPL"],1, "2020-01-01", "2021-01-01")
graph_returns(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Get returns data of a stock/portfolio (in a dataframe format)
returns(["AAPL"],1, "2020-01-01", "2021-01-01")
returns(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Graph the cumulative returns of a stock/portfolio
graph_creturns(["TSLA"], 1, "2020-01-01", "2021-01-01")
graph_creturns(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Get cumulative returns data of a stock/portfolio (in a dataframe format)
creturns(["TSLA"], 1, "2020-01-01", "2021-01-01")
creturns(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Annual Volatility of a portfolio/stock
annual_volatility(["TSLA"], 1, "2020-01-01", "2021-01-01")
annual_volatility(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Sharpe Ratio of a portfolio/stock
sharpe_ratio(["TSLA"], 1, "2020-01-01", "2021-01-01")
sharpe_ratio(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Graph the returns of a portfolio/stock to a benchmark
graph_rbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
graph_rbenchmark(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Get the data of the returns of a portfolio/stock to a benchmark
rbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
rbenchmark(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Graph the cumulative returns of a portfolio/stock to a benchmark
graph_cbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
graph_cbenchmark(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Get the data of the cumulative returns of a portfolio/stock to a benchmark
cbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
cbenchmark(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Alpha of a portfolio/stock
alpha(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
alpha(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Beta of a portfolio/stock
beta(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
beta(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Efficient frontier to optimize allocation of shares in your portfolio
efficient_frontier(["AAPL", "FB", "MSFT", "AMD", "AIR", "AAL", "NFLX", "SBUX", "GOOG", "BABA"], "2020-01-01", "2021-01-01", 10000)
Get daily mean return of a stock/portfolio
mean_daily_return(["AAPL"], 1, "2020-01-01", "2021-01-01")
mean_daily_return(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Value at risk of a stock/portfolio
var(10000, ['AAPL'], 1, 0.95, "2020-01-01", "2021-01-01")
var(10000, ['AAPL', 'TSLA', 'AMD'], [0.4, 0.2, 0.4], 0.95, "2020-01-01", "2021-01-01")
Graph closing price of stock smoothly with Kalman Filters
graph_kalman("AAPL", "2020-01-01", "2021-01-01", 0.01)
Get the smoothed closing price of a stock with Kalman Filters
kalman("AAPL", "2020-01-01", "2021-01-01", 0.01)
Get the Capital Asset Pricing Model
stocks = ["AAPL", "AMD", "TSLA", "MSFT"]
wts = [0.3, 0.2, 0.2, 0.3]
capm(stocks, wts, "2020-01-01", "2021-01-01")
Cointegration
cointegration("GOOG", "MSFT", "2012-01-01", "2021-01-01")
Returns Cointegration
return_cointegration("GOOG", "MSFT", "2012-01-01", "2021-01-01")
Stationarity
stationarity("GOOG", "2020-01-01", "2021-01-01")
Returns Stationarity
return_stationarity("GOOG", "2020-01-01", "2021-01-01")
Graph rolling volatility
graph_rvolatility(["TSLA"], 1, "2019-01-01", "2021-01-01", 180)
graph_rvolatility(["AAPL", "AMD", "TSLA"], [0.45, 0.45, 0.1], "2019-01-01", "2021-01-01", 180)
Get rolling volatility data
rvolatility(["TSLA"], 1, "2019-01-01", "2021-01-01", 180)
rvolatility(["AAPL", "AMD", "TSLA"], [0.45, 0.45, 0.1], "2019-01-01", "2021-01-01", 180)
Graph rolling beta
graph_rbeta(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
graph_rbeta(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Get rolling beta data
rbeta(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
rbeta(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Graph rolling alpha
graph_ralpha(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
graph_ralpha(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Get rolling alpha data
ralpha(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
ralpha(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Get implied volatility
implied_vol('c', 0.3, 3, 3, 0.032, 30.0/365, 0.01)
Backtest your portfolio
stocks = ["GOOG", "AMZN", "FB", "AAPL"]
wts = [0.25, 0.25, 0.25, 0.25]
backtest(stocks, wts, "SPY", "2019-01-01", "2021-01-01")
License
MIT