Trafalgar
Python library to make development of portfolio analysis faster and easier
🔥
Installation For the moment, Trafalgar is still in beta development. To install it you should:
- Download requirements.txt in the folder where you want to execute the trafalgar library
- Go to your folder directory with the command prompt and write :
pip install -r requirements.txt
- Download trafalgars-0.0.1-py3-none-any.whl in the same folder
- Go to your folder directory with the command prompt and write :
pip install trafalgars-0.0.1-py3-none-any.whl
📈
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
- Backtest a portfolio, see its stats and compare it to a benchmark
Here is the code of this article from a google collab, you can use it to follow along with this article: https://colab.research.google.com/drive/1qgFDDQneQP-oddbJVWWApfPKFMnbpj6I?usp=sharing
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")
Graph the returns (for each day)
#returns_graph(stock, start_date, end_date)
#this one only work for one stock
returns_graph("FB", "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)
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 cumulative returns of a stock/portfolio
#cum_returns_graph(stocks, weights, start_date, end_date)
cum_returns_graph(["FB", "AAPL", "AMD"], [0.3, 0.4, 0.3],"2020-01-01", "2021-01-01")
Get cumulative returns data of a stock/portfolio (in a dataframe format)
#cum_returns(stocks, weights, start_date, end_date)
cum_returns(["FB", "AAPL", "AMD"], [0.3, 0.4, 0.3],"2020-01-01", "2021-01-01")
Disclaimer : From there, the functions only work for portfolios, not for individual stocks. However there is a way to make it work for individual stock:
#let's say we want to calculate the annual_volatility of Apple.
#We have to have at least 2 elements in our stock list. Here these are Apple and Facebook
#In order to get the volatility of only Apple we just have to put the weights of Facebook at 0 (so no money will be allocated to this stock) and put the weights of Apple at 1 (so all our money will be allocated to this stock)
annual_volatility(["FB", "AAPL"], [1, 0],"2020-01-01", "2021-01-01")
Annual Volatility of a portfolio/stock
#annual_volatility(stocks, weights, start_date, end_date)
#for your portfolio
annual_volatility(["FB", "AAPL", "AMD"], [0.3, 0.4, 0.3],"2020-01-01", "2021-01-01")
#for one stock (FB)
annual_volatility(["FB", "AAPL"], [1, 0],"2020-01-01", "2021-01-01")
Sharpe Ratio of a portfolio/stock
#sharpe_ratio(stocks, weights, start_date, end_date)
#for your portfolio
sharpe_ratio(["FB", "AAPL", "AMD"], [0.3, 0.4, 0.3],"2020-01-01", "2021-01-01")
#for one stock (FB)
sharpe_ratio(["FB", "AAPL"], [1, 0],"2020-01-01", "2021-01-01")
Compare the returns of a portfolio/stock to a benchmark
#returns_benchmark(stocks, weights, benchmark, start_date, end_date)
#for your portfolio
returns_benchmark(["AAPL", "AMD", "MSFT"], [0.3, 0.4, 0.3], "SPY", "2020-01-01", "2021-01-01")
#for one stock(AAPL)
returns_benchmark(["AAPL", "AMD"], [1,0], "SPY", "2020-01-01", "2021-01-01")
Blue line : returns of your portfolio Red line : returns of the benchmark
Compare the cumulative returns of a portfolio/stock to a benchmark
#cum_returns_benchmark(stocks, weights, benchmark, start_date, end_date)
#for your portfolio
cum_returns_benchmark(["AAPL", "AMD", "MSFT"], [0.3, 0.4, 0.3], "SPY", "2020-01-01", "2021-01-01")
#for one stock(AAPL)
cum_returns_benchmark(["AAPL", "AMD"], [1,0], "SPY", "2020-01-01", "2021-01-01")
Blue line : cumulative returns of your portfolio Red line : cumulative returns of the benchmark
Alpha and Beta of a portfolio/stock
#alpha_beta(stocks, weights, benchmark, start_date, end_date)
#for your portfolio
alpha_beta(["AAPL", "AMD", "MSFT"], [0.3, 0.4, 0.3], "SPY", "2020-01-01", "2021-01-01")
#for one stock(AAPL)
alpha_beta(["AAPL", "AMD"], [1,0], "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", "TSLA", "BABA"], "2020-01-01", "2021-01-01", 10000)
Graph individual cumulative returns for your portfolio
#individual_cum_returns_graph(stocks, start_date, end_date)
individual_cum_returns_graph(["FB", "AAPL", "AMD"],"2020-01-01", "2021-01-01")
Individual cumulative returns datas for your portfolio (in dataframe format)
#individual_cum_returns(stocks, start_date, end_date)
individual_cum_returns(["FB", "AAPL", "AMD"],"2020-01-01", "2021-01-01")
Mean daily return of each stocks in your portfolio
#individual_mean_daily_return(stocks, start_date, end_date)
individual_mean_daily_return(["FB", "AAPL", "AMD"],"2020-01-01", "2021-01-01")
Portfolio mean daily return
#portfolio_daily_mean_return(stocks,weights, start_date, end_date)
portfolio_daily_mean_return(["FB", "AAPL", "AMD"],"2020-01-01", "2021-01-01")
Value at Risk of a stock (still in development)
#VaR(stock, start_date, end_date, confidence_level)
VaR("FB","2020-01-01", "2021-01-01", 98)
License
MIT