Automating personal investment reports with Gitlab Pages and CI/CD pipelines

๐Ÿ‘‹ Introduction

Iโ€™ve been investing in stocks and mutual funds in the Indian stock market for a couple of years. The reports available on the trading platforms are not sufficient. Moreover, I use multiple platforms making it impossible to look at the health of my portfolio as a whole. So I set out to create my personal investment report. These were my expectations:

  • Reports should be available at my fingertips
  • Minimal cost and maintenance

You can read about my investment strategy here.

๐Ÿ’ธ Data collection

To create reports I needed two datasets:

  1. Trades (buys and sells)
  2. Latest prices

1. Trades

The trading platform I use doesnโ€™t provide APIs to fetch my trades automatically ๐Ÿ˜•. So I manually export the trade book (as CSV) end of every month and store them in a โ€œdataโ€ folder in the repository.

2. Latest prices

I wrote a python script that crawls the stock exchange sites. It collects the end of day prices which is good enough for my usecase. You can check out the code here.

๐Ÿ“ˆ Report generation

With all my trades and their latest prices, I could calculate the metrics that I was interested in:

  • Total investment
  • Current value of the portfolio
  • Returns (absolute and percentage)
  • XIRR (code to calculate XIRR)

I segregated my trades into equity and debt and calculated the same metrics for the two categories as well. With these metrics, I used Jinja templating engine to display these numbers in a simple cards design ๐Ÿ‘‡

Finally, I set up Gitlabโ€™s pipeline schedule to generate the above HTML file every day after the markets closed. And with Gitlab pages, served the same HTML by placing it inside the public folder. For private repositories, only members can access the Gitlab pages thus making it my personal investment report ๐Ÿ‘ป

Are you an investor looking to create a personal investment report just like this one? Feel free to drop your comments (or reach out to me on Twitter), I can share more details.

If you liked this article, you can subscribe to my newsletter to get new articles directly in your inbox ๐Ÿ™

26