Personal Finance for Newbies (or PFN) is a web app that – from buy/sell financial asset transactions – provides easy-to-use, near-real-time statistics (i.e., updated to the last closing) on your investment portfolio.
PFN allows you to analyse your portfolio from multiple perspectives: from higher-level metrics (profit & loss, asset class weights) to those allowing you to study risk and returns in depth, especially over time. To use the app, you don't need to create an account! You just need to set up your buy/sell transactions: PFN takes care of downloading historical prices from Yahoo Finance and analysing them for you!
Generated image of PFN at play amidst a vivid dawn |
Install dependencies via poetry with
poetry install
Launch the web app via
streamlit run ./src/0_🏠_Home.py
To build the app's Docker image
docker build -t personal-finance-for-newbies .
To run the Docker image and expose it on a preferred port (for example 8080)
docker run --rm -p 8080:8501 personal-finance-for-newbies
To run the Docker image using the host's network (which will make the app accessible on port 8501)
docker run --rm --network host personal-finance-for-newbies
Alternatively, on Windows you simply launch
scripts/run-web-app.ps1
To load and use your data, download and fill in the template with your accumulation plan's buy/sell transactions and upload it. Make sure you fill it in correctly. The fields to be entered are:
- Exchange: name of the market (according to Yahoo Finance) list of exchange suffixes;
- Ticker: symbol to identify a publicly traded security;
- Transaction Date: date of transaction in DD/MM/YYYY format;
- Shares: number of purchased/sold shares; please, include a minus sign to indicate selling;
- Price: price of a single share;
- Fees: transaction fees, if any.
Contributions are what make the open source community an amazing place to learn, inspire, and create. Any contribution you make is greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
- Fork the Project
- Create your Feature Branch (
git checkout -b feature_amazing_feature
) - Commit your Changes (
git commit -m 'Add some amazing stuff'
) - Push to the Branch (
git push origin feature_amazing_feature
) - Open a Pull Request
Here's an hopefully up-to-date list of things to build:
- Improve Sharpe Ratio calculation, to take into account a time-varying:
- risk-free rate
- asset allocation
- Rolling Sharpe ratio chart
- Sortino and Calmar ratios
- Docker compose, with these services:
jupyter notebook
for prototypingstreamlit
to launch the web-app