Casset (C++ Asset management) allows the tracking, comparison, and analysis of a portfolio of stocks. This is a mini project designed to practice project management and using various technologies, such as CMake, Conan, catch2 (unit testing), CI, and more.
The current license was provided as part of the simple cpp project boilerplate upon which this project was started.
The correct license for this project should be chosen
Calls to the IEX API have stopped working. We need to investigate if IEX have stopped the service entirely or if it's merely a question of verification.
spdlog logging library and CLI11 command line interface library are very useful tools to know about. Both have conan packages: CLI11/1.7.1@cliutils/stable (remote: https://api.bintray.com/conan/cliutils/CLI11) spdlog/1.3.1@bincrafters/stable
As a user, I want my portfolios to evolve over time. E.g. I should be able to by 10 shares of Apple on Monday, sell 3 on Tuesday, and buy 4 on Wednesday.
Acceptance criteria:
The gui should allow a user to enter a stock, number of shares, and the date of the transaction.
Adding/removing shares for a certain company on multiple days will add multiple entries to the csv.
If no date is selected, it should be assumed to be the current day.
Entering the date of a current entry will amend that position. E.g. If you buy 5 shares and sell 3 on one day, the entry for that day will just be +2 shares
The gui should display only currently held positions.
A user should not be able to sell more shares than they currently have (shorting not supported at this point)
If you search for a valid stock symbol with a slow internet connection, you will receive a timeout. Currently, the presenter interprets this to mean the stock was not found and displays a message to tell you so.
A check should be made for timeouts, and a relevant message should be displayed if that is the case
As a user I want clear divisions between the different functions of the app. Therefore, portfolio handling should be on a separate tab of the gui to the button/line edit where you can grab the latest information on a particular stock.
Acceptance criteria
The gui has a main tab, which contains stock information functionality
The gui contains a second tab, which contains portfolio information functionality
When an API call comes back with an error, the check for an error code currently takes place at IEX::getParsedJson. If the reponse code is not 200, the returned object is an empty json.
Casset then tries to turn this (empty) json into a string, which throws nlohhman:detail:type_error exception.
The status of the reponse must be checked in the presenter as well, before attempting to convert to a string
Windows builds of Casset using VisualStudio have errors caused by current Conan set-up.
conanfile needs to be changed and docs updated to describe how to get the build to work on windows
Allow the user to add and remove stocks to a portfolio. They should be able to specify when this event occurred, which stock was involved, and how much (either price or number of shares)
Unit test the functionality in the IEX class. We should mock out calls to the API, but test that 1. we can find a valid ticker in a json containing ticker information 2. We can extract valid data from the full stock information json