Trafalgar makes quantitative finance and portfolio analysis faster and easier
Project description
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 :
- the contributors @rslopes, @rakeshbhat9, @Haizzz
- Quantopian and their incredible lectures (https://gist.github.com/ih2502mk/50d8f7feb614c8676383431b056f4291)
- the authors of codingfinance.com
- Quantconnect
- @mrmushfiq and his repo https://github.com/mrmushfiq/python_meets_finance
Documentation🚀
Call the library
First, you should do:
from trafalgar import *
Graph of the closing price of a stock
#graph_close(stock, start_date, end_date)
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(stock, start_date, end_date)
#for one stock
graph_volume(["FB"], "2020-01-01", "2021-01-01")
#for multiple stocks
graph_volume(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Graph the opening price
#graph_open(stock, start_date, end_date)
#for one stock
graph_open(["FB"], "2020-01-01", "2021-01-01")
#for multiple stocks
graph_open(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Graph the adjusted closing price
#graph_adj_close(stock, start_date, end_date)
#for one stock
graph_adj_close(["FB"], "2020-01-01", "2021-01-01")
#for multiple stocks
graph_adj_close(["FB", "AAPL", "TSLA"], "2020-01-01", "2021-01-01")
Get closing price data (in dataframe format)
#close(stock, start_date, end_date)
close(["AAPL"], "2020-01-01", "2021-01-01")
Get volume data (in dataframe format)
#volume(stock, start_date, end_date)
volume(["AAPL"], "2020-01-01", "2021-01-01")
Get opening price data (in dataframe format)
#open(stock, start_date, end_date)
open(["AAPL"], "2020-01-01", "2021-01-01")
Get adjusted closing price data (in dataframe format)
#adj_close(stock, start_date, end_date)
adj_close(["AAPL"], "2020-01-01", "2021-01-01")
Covariance between stocks
#covariance(stocks, start_date, end_date, days) -> usually, days = 252
covariance(["AAPL", "DIS", "AMD"], "2020-01-01", "2021-01-01", 252)
Correlation between stocks
#correlation(stocks, start_date, end_date)
correlation(["AAPL", "AMD", "TSLA", "AMZN", "DIS", "SBUX", "NFLX", "AMZN", "GOOG"], "2020-01-01", "2021-01-01")
Graph correlation between stocks
#graph_correlation(stocks, start_date, end_date)
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(stock, start_date, end_date)
ohlcv("AAPL", "2020-01-01", "2021-01-01")
Graph the returns (for each day)
#graph_returns(stock,wts, start_date, end_date)
#for one stock
graph_returns(["AAPL"],1, "2020-01-01", "2021-01-01")
#for a portfolio
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(stocks,wts, start_date, end_date)
# sum of wts(weights) should always be equal to 1, it represents the allocation of shares in your portfolio (1 = 100%)
#for one stock
returns(["AAPL"],1, "2020-01-01", "2021-01-01")
#for a portfolio
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(stock, wts, start_date, end_date)
#for one stock
graph_creturns(["TSLA"], 1, "2020-01-01", "2021-01-01")
#for a portfolio
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(stock, wts, start_date, end_date)
#for one stock
creturns(["TSLA"], 1, "2020-01-01", "2021-01-01")
#for a portfolio
creturns(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "2020-01-01", "2021-01-01")
Annual Volatility of a portfolio/stock
#annual_volatility(stocks, wts, start_date, end_date)
#for one stock
annual_volatility(["TSLA"], 1, "2020-01-01", "2021-01-01")
#for multiple stocks
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(stocks, wts, start_date, end_date)
#for one stock
sharpe_ratio(["TSLA"], 1, "2020-01-01", "2021-01-01")
#for multiple stocks
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(stocks, wts, benchmark, start_date, end_date)
#for a stock
graph_rbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
#for a portfolio
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(stocks, wts, benchmark, start_date, end_date)
#for one stock
rbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
#for a portfolio
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(stocks, wts, benchmark, start_date, end_date)
#for a stock
graph_cbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
#for a portfolio
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(stocks, wts, benchmark, start_date, end_date)
#for a stock
cbenchmark(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
#for a portfolio
cbenchmark(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Alpha of a portfolio/stock
#alpha(stocks, wts, benchmark, start_date, end_date)
#for a stock
alpha(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
#for a portfolio
alpha(["AAPL", "AMD", "TSLA"], [0.25, 0.45, 0.3], "SPY", "2020-01-01", "2021-01-01")
Beta of a portfolio/stock
#beta(stocks, wts, benchmark, start_date, end_date)
#for one stock
beta(["TSLA"], 1, "SPY", "2020-01-01", "2021-01-01")
#for multiple stocks
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(stocks, start_date, end_date, iterations) -> iterations = 10000 is a good starting point
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(stocks,wts, start_date, end_date)
#for one stock
mean_daily_return(["AAPL"], 1, "2020-01-01", "2021-01-01")
#for multiple stocks
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(value_invested, stocks, wts, alpha, start_date, end_date)
#for one stock
var(10000, ['AAPL'], 1, 0.95, "2020-01-01", "2021-01-01")
#for multiple stocks
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(stocks, start_date, end_date, noise_value)
#noise_value = 0.01 is good to get started
graph_kalman("AAPL", "2020-01-01", "2021-01-01", 0.01)
Get the smoothed closing price of a stock with Kalman Filters
#kalman(stocks, start_date, end_date, noise_value)
kalman("AAPL", "2020-01-01", "2021-01-01", 0.01)
Get the Capital Asset Pricing Model
#capm(stocks, wts, start_date, end_date)
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(stock1, stock2, start_date, end_date)
cointegration("GOOG", "MSFT", "2012-01-01", "2021-01-01")
Returns Cointegration
#return_cointegration(stock1, stock2, start_date, end_date)
return_cointegration("GOOG", "MSFT", "2012-01-01", "2021-01-01")
Stationarity
#stationarity(stock, start_date, end_date)
stationarity("GOOG", "2020-01-01", "2021-01-01")
Returns Stationarity
#return_stationarity(stock, start_date, end_date)
return_stationarity("GOOG", "2020-01-01", "2021-01-01")
Graph rolling volatility
#graph_rvolatility(stock, wts, start_date, end_date, window_time)
#for a stock
graph_rvolatility(["TSLA"], 1, "2019-01-01", "2021-01-01", 180)
#for a portfolio
graph_rvolatility(["AAPL", "AMD", "TSLA"], [0.45, 0.45, 0.1], "2019-01-01", "2021-01-01", 180)
Get rolling volatility data
#rvolatility(stock, wts, start_date, end_date, window_time)
#for a stock
rvolatility(["TSLA"], 1, "2019-01-01", "2021-01-01", 180)
#for a portfolio
rvolatility(["AAPL", "AMD", "TSLA"], [0.45, 0.45, 0.1], "2019-01-01", "2021-01-01", 180)
Graph rolling beta
#graph_rbeta(stock,wts, benchmark, start_date, end_date, window_time)
#for a stock
graph_rbeta(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
#for a portfolio
graph_rbeta(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Get rolling beta data
#rbeta(stock,wts, benchmark, start_date, end_date, window_time)
#for a stock
rbeta(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
#for a portfolio
rbeta(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Graph rolling alpha
#graph_ralpha(stock,wts, benchmark, start_date, end_date, window_time)
#for a stock
graph_ralpha(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
#for a portfolio
graph_ralpha(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Get rolling alpha data
#ralpha(stock,wts, benchmark, start_date, end_date, window_time)
#for a stock
ralpha(["TSLA"], 1, "SPY", "2019-01-01", "2021-01-01", 180)
#for a portfolio
ralpha(["AAPL", "AMD", "GOOG"], [0.45, 0.45, 0.1], "SPY", "2019-01-01", "2021-01-01", 180)
Get implied volatility
#implied_vol(option_type, option_price, stock price, strike price, risk-free rate, the time to expiration, continuous dividend rate)
#option type : "c" (call option) or "p"(put option)
implied_vol('c', 0.3, 3, 3, 0.032, 30.0/365, 0.01)
Backtest your portfolio
#backtest(stocks, wts, benchmark, start_date, end_date)
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file trafalgar.py-0.1.7.tar.gz
.
File metadata
- Download URL: trafalgar.py-0.1.7.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0506b521406a7b2c0755bee92067831d53f7528f975177729d383858a4bf796e |
|
MD5 | ae76e88b92a53d360a97cb05e723efff |
|
BLAKE2b-256 | 053cd626677e2a16edcde927c80d3692f184dce9f84a3ab61723bd98235d8457 |
File details
Details for the file trafalgar.py-0.1.7-py3-none-any.whl
.
File metadata
- Download URL: trafalgar.py-0.1.7-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 066f4c66c1e9de981113caf69caa48c54422eb339602ee474c575aac4e2b7d10 |
|
MD5 | 8d6269213e863982d46ee72011c4b34c |
|
BLAKE2b-256 | 34cfb867fe7bb79bed708ebf76abdfb39ee3ed722d0d9bf51d963eeb22a8ce3e |