Repository navigation
Track crypto held on exchanges and wallets by hand - #32
Merged
Merged
Conversation
Coins are entered on the portfolio page (coin, quantity, average buy price in EUR, location, held since, notes) and priced from public Yahoo quotes: EUR pair, else USD pair converted at the ECB rate. Each location is a read-only broker account, so portfolio, accounts, net worth and dashboards include it. Prices refresh at most every 15 minutes when the portfolio is opened and in the daily snapshot job; today's change uses yesterday's close (24/7 market). History is rebuilt from daily closes after each edit. Staking/Earn/airdrop rewards add coins at zero cost and are reported as income next to dividends.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Track crypto held on Binance, in a cold wallet or anywhere else, without connecting to any of them, the way Getquin does. On Portfolio → Add crypto you enter the coin (searchable by name or ticker), quantity, average buy price (€), where it is held (free text, with your existing locations suggested), an optional "held since" date and notes. The app fetches prices itself.
investments.manual_holdingsandholding_rewards(EF migration). Each location is a read-only finance account of kind Broker (institutionManual (crypto)). The holding is the source of truth. Its position (DataSource.Manual), one opening lot (a buy plus the money put in) and its rewards are rewritten from it on every change. Portfolio, Accounts, Net worth and dashboards pick it up with no special cases. The same coin in two locations shows as one line with one holding per location. An emptied location is archived and hidden.BTC-EUR), else the USD pair (KAS-USD), and is cached inprice_listings. USD closes are stored in EUR at the ECB rate of the day. Recent closes are re-downloaded at most every 15 minutes, when the portfolio is opened and by the 6-hourly snapshot job. Today's bar is the live price, and "Today" compares it with yesterday's close, weekends included. Price precision is widened to 12 decimals for coins worth fractions of a cent.Privacy
Only the text typed in the coin search, the coin's listing symbol (e.g.
BTC-EUR) and date ranges leave the server. Quantities, prices paid, locations and notes never do. No exchange or wallet is contacted.Test plan
dotnet build: 0 warningsManualCryptoTestscovers create, then positions, summary, net worth and rebuilt performance history with a fake price source, then edit, reward income, remove reward and delete.PortfolioTestslists the new write endpoints explicitly. Full suite: 202 passed.ImportTests.Hostile_cell_text_is_imported_as_inert_datafails when it runs afterAiGatewayTests, which creates the same text; that ordering problem is in the existing tests, not this change.npm run build,ng test(51)Limitations
MARKET_DATA_PROVIDER=none, coins can't be added at all.