Giter Site home page Giter Site logo

investd's Introduction

investd

Tool for generating financial reports. Download statements from your broker or investment accounts, ingest them using investd and generate nice reports.

Check out the sample report generated from sample data at: https://adri0.github.io/investd

investd's People

Contributors

adri0 avatar mkopec87 avatar dependabot[bot] avatar

Stargazers

 avatar Reinier Koops avatar  avatar Vinicius Pietscher avatar

Watchers

 avatar  avatar

Forkers

mkopec87

investd's Issues

Report

Include some basic metrics, such as:

  • Total invested
  • Plot investments
  • Assets:
    • Quantity
    • Invested
    • Currency

Unable to run from commandline after 'pip install .'

Shouldn't we get 'investd' command added to the path in such case?

I'm not sure what this part does:

    entry_points={"investd.__main__": {"main = investd.__main__:cli"}},

Is it for running it like:

python -m investd

?

Maybe we can also add sth like:

setup(
    ...
    entry_points = {
        'console_scripts': ['investd=investd.__main__:cli'],
    }
    ...
)

?

Configurable symbol mapping to yfinance

Currently symbol mapping for fetching quotes from yfinance is a hardcoded dictionary in quotes.py. Would be nice to have that configurable via some text file.

"Database is locked" error when running download-quotes

    When I ran this for the first time, I noticed a weird messsage:
 python -m investd download-quotes
2023-01-07 01:14:07,519 - investd.config - INFO - PERSIST_PATH: data/persist - REF_CURRENCY: PLN - REPORTS_PATH: data/reports - SOURCE_BASE_PATH: data/source
[*********************100%***********************]  2 of 2 completed

1 Failed download:
- IBC5.DE: OperationalError('database is locked')

Originally posted by @mkopec87 in #38 (comment)

Config file

Add a config file for configuring:

  • data paths

Add versioning

Currently, the package is always in version 0.0.1.

Require and automate versioning of the tool upon merging pull requests in main.

Quotes for Polish retail bonds

It would be nice to be able to get current value of Polish retail bonds in the portfolio.

Some web scraping could do, I already started the research in the topic to find out that:

Avoid running notebook when importing it in reports.__init__

When the reports command runs, the code of the report notebook is executed by the main application upon importing:

nb_module = load_module(f"{__package__}.{notebook_name}")

Find another way to find the notebook path without importing it.

Current portfolio value

Add information about current portfolio value in the overview.

For that it is needed:

  • Quotes for all assets at current date.
  • Exchange rate for all asset currencies at current date.

Exchange rates

It is necessary to know exchange rates at a certain date for calculating portfolio value.

Quotes module

Reports for the portfolio net worth require quotes of each owned asset. For that it is need to query external APIs for obtaining the price of assets.

Some remarks:

  • Depending on the source of each asset, obtaining a quote might require access to different APIs.
  • Nice to have: persist quotes locally to avoid hitting rate limits.

Invested amount portfolio metrics

  • Total invested amount: all buys minus sells in the reference currency. (float)
  • Invested amount in reference currency grouped by (data frame):
    • Symbol
    • Asset type
    • Currency
    • Source
    • Year
    • Month (last 12)
  • Tests

.test.env doesn't work for tests

It would be nice to avoid using sample_data directory in the unit tests. Instead, it would be ideal in the tests to use only data inside tests/resources, but I didn't manage to load config variables form .test.env in the tests.

Update yfinance

For me, communication with yfinance is only working if I update yfinance to latest version.

Ingesting sources should merge newly ingested tx into existing ones

Currently ingest-sources generates a new transactions CSV each time it is run containing only transactions found in the sources being ingested. It would be best if we could keep the existing transactions in place as we ingest source files that might not contain existing ones.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.