Anatoly Popov
b4e82d603f
feat: support security from MOEX via MOEX api
**Justification**
My main portfolio is on MOEX, so I need a way to manage it. Ghostfolio looks
cool but there's no way to proper manage assets on MOEX. So, first I've found
`moex-iss-api` npm package. Turns out it needed some help, so couple of PR
there. After that I was ready to work on ghostfolio.
This commit implements full `DataProviderInterface` spec:
- Disabled by default, so only those who need it would enabled it.
- We `canHandle` all symbols
- We aren't premium feature
- `getQuotes`, `getHistorical` and `search` were pretty straightforward
- `getTestSymbol` return `SBER` because if something happens to `SBER` stocks
then MOEX would definetely doesn't matter anymore for sometime.
- `getAssetProfile` and `getDividends` proved to be tricky to implement, so
I'll cover them below separately.
**getAssetProfile**
**Currency**
This is main method to get info about assets. Unfortunately, due to fall of
USSR and ruble denomination in 1998, we have three currency tickers: 'RUR',
'SUR', 'RUB' For convenience we use 'RUB' instead of all of them. I don't see
practical value to differentiate between them here, but I'm open to suggestions.
Also, some of the tickers do not return currency in which they're listed on
MOEX. Assumed that it's also 'RUB'.
**Name**
Every asset can have several things to identify it. And all of them are
optional in MOEX API, except `secid` which is `Security ID`. So we use them
for name in this order of preference:
1. Latin (usually English) name.
2. Latin short name.
3. Russian name.
4. Security ID.
**Country**
I try to detect country, parsing ISIN: first two letters should be country code.
**Sectors**
MOEX supports some industry related indices, so when we first encounter some
symbol, I check whether it's in those indices and assign sectors accordingly.
**AssetClass and AssetSubClass**
At first, I was tempted to leave them empty, but finally decided to look into.
I downloaded all asset types from MOEX and tried to best of my knowledge assign
asset classes and subclasses. If I wasn't able to find proper relation, I left
the cell empty. After that I took the table (you can check it in the comments
in the code) and made `SecurityTypeMap` interface.
**getDividends**
MOEX API for dividends isn't documented at all (or probably I didn't find
proper docs) and sometimes it doesn't return the newest dividends. Surprisingly,
you can get dividends for MOEX-related assets from YAHOO, but the date can
differ. So, there is heurestic implemented: if those date are no more than two
days apart and payout is the same, then it's the exact same payout and we
merge them.
Signed-off-by: Anatoly Popov <me@aensidhe.ru>
7 months ago
Anatoly Popov
14d6f0e7c0
fix: if yahoo service returns zero quotes do not fail enhance request
Signed-off-by: Anatoly Popov <me@aensidhe.ru>
7 months ago
Anatoly Popov
6ed38814b5
fix: don't fail whole request if one of providers fails, but log it
Signed-off-by: Anatoly Popov <me@aensidhe.ru>
7 months ago
Thomas Kaul
9383fc00cb
Task/introduce interface for get account response ( #5902 )
* Introduce interface for get account response
2 months ago
Arghya Das
697ecfe9bd
Feature/add endpoint to get user by id ( #5910 )
* Add endpoint to get user by id
* Update changelog
---------
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
2 months ago
Germán Martín
1ae3519d7f
Bugfix/assign admin role to first user signing up ( #5914 )
* Assign admin role to first user signing up
* Update changelog
2 months ago
Thomas Kaul
a5f934460b
Task/introduce interface for get admin users response ( #5903 )
* Introduce interface for get admin users response
2 months ago
Thomas Kaul
a4040c3c3c
Task/remove Internet Identity as social login provider ( #5891 )
* Remove Internet Identity
* Update changelog
2 months ago
Sven Günther
96cad6ad7a
Feature/atomic data replacement during historical market data gathering ( #5858 )
* Atomic data replacement during historical market data gathering
* Update changelog
2 months ago
Thomas Kaul
5598b3780c
Feature/set up unit test for BTCEUR in base currency EUR ( #5778 )
* Set up test
2 months ago
Kenrick Tandrian
4ecfdadda4
Task/resolve @typescript-eslint/no-unsafe-function-type ESLint rule ( #5889 )
* fix(lint): remove @typescript-eslint/no-unsafe-function-type override
* fix(lint): resolve eslint errors
2 months ago
Kenrick Tandrian
b705b8f07b
Task/resolve @typescript-eslint/prefer-regexp-exec ESLint rule ( #5885 )
* fix(lint): remove @typescript-eslint/prefer-regexp-exec override
* fix(lint): resolve eslint errors
2 months ago
Thomas Kaul
7e5b2ce980
Feature/refresh cryptocurrencies list 20251031 ( #5880 )
* Update cryptocurrencies.json
* Update changelog
2 months ago
Thomas Kaul
d7f3578ef9
Task/add error logging to symbol lookup in Trackinsight data enhancer ( #5872 )
* Add error logging
* Update changelog
2 months ago
Vansh
7dc74fe681
Task/refactor column definitions in AI service ( #5834 )
* Refactor column definitions in AI service
* Update changelog
2 months ago
vitalymatyushik
31e2346101
Bugfix/market price in base currency during the portfolio snapshot calculation ( #5828 )
* Add fallback for market price in base currency
* Update changelog
2 months ago
Thomas Kaul
e03f58feff
Task/refactor Activities interface to ActivitiesResponse interface ( #5835 )
* Refactor Activities interface to ActivitiesResponse interface
2 months ago
Sven Günther
0ec9c1dd93
Bugfix/custom asset name rendering in import activities dialog ( #5787 )
* Fix custom asset name rendering in import activities dialog
* Update changelog
2 months ago
David Requeno
1f6b061ab0
Task/migrate tablemark to v4 ( #5809 )
* Migrate tablemark to v4
* Update changelog
2 months ago
Vansh
0b28da879b
Task/extend export response by performanceCalculationType ( #5816 )
* Extend export response by performanceCalculationType
* Update changelog
2 months ago
Harsh Santwani
852ed98d0f
Task/move prisma.config.ts to .config/prisma.ts ( #5821 )
* Move prisma.config.ts to .config/prisma.ts
* Update changelog
2 months ago
danielochinasa
37ab31ea72
Task/format value in Buying Power rule ( #5824 )
* Format value in Buying Power rule
* Update changelog
2 months ago
Szymon Łągiewka
2b727f867f
Bugfix/include missing dotenv packages ( #5817 )
* Include missing dotenv packages
2 months ago
Thomas Kaul
f19d9c78aa
Task/clean up unused eslint-disable-next-line directives ( #5782 )
* Clean up unused eslint-disable-next-line directives
2 months ago
Thomas Kaul
edcc140428
Task/introduce interface for create Stripe checkout session response ( #5791 )
* Introduce interface
2 months ago
Szymon Łągiewka
ceace870a8
Task/upgrade ioredis to forfeit overriding defaults ( #5813 )
* Upgrade ioredis to forfeit overriding defaults
* Update changelog
2 months ago
Harsh Santwani
9b51c2da5d
Task/improve typings of getOrderById() functionality ( #5810 )
* Improve typings of getOrderById() functionality
2 months ago
Ani07-05
7ee38d0067
Task/refactor Export interface to ExportResponse interface ( #5805 )
* Refactor Export interface to ExportResponse interface
2 months ago
Dibyendu Sahoo
b915c9554e
Task/extend rule settings interface by locale ( #5802 )
* Extend rule settings interface by locale
2 months ago
Vansh
3b4705405b
Task/improve typings of getAsset() functionality ( #5804 )
* Improve typings of getAsset() functionality
2 months ago
Thomas Kaul
be0ddd6298
Task/harmonize interfaces naming ( #5796 )
* Harmonize interfaces naming
2 months ago
vitalymatyushik
24234591c9
Task/improve typings of getInfo() functionality ( #5803 )
* Improve typings
2 months ago
David Requeno
5bfcceb959
Task/auto-pad holdings table in AI prompt using tablemark ( #5772 )
* Auto-pad holdings table in AI prompt using tablemark
* Update changelog
2 months ago
s-vamshi
a65523fd04
Feature/allow data gathering by date range ( #5762 )
* Allow data gathering by date range
* Update changelog
2 months ago
Google
71b375ea92
Task/refactor BenchmarkMarketDataDetails to BenchmarkMarketDataDetailsResponse ( #5771 )
* Refactor BenchmarkMarketDataDetails to BenchmarkMarketDataDetailsResponse
2 months ago
Aman
f940eb6725
Task/refactor PortfolioInvestments interface to PortfolioInvestmentsResponse interface ( #5774 )
* Refactor PortfolioInvestments to PortfolioInvestmentsResponse
2 months ago
Sven Günther
1daa980824
Bugfix/import of activity with MANUAL data source (CSV file) ( #5749 )
* Fix import of activity with MANUAL data source
* Update changelog
---------
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
2 months ago
Thomas Kaul
04d6d9cfa9
Bugfix/total buy and sell calculation in summary ( #5759 )
* Fix total buy and sell calculation related to activities in custom currency
* Update changelog
2 months ago
Umesh Pal
5bcc2e9648
Task/refactor PortfolioDividends interface to PortfolioDividendsResponse interface ( #5773 )
* Refactor PortfolioDividends to PortfolioDividendsResponse
2 months ago
Thomas Kaul
103c15ca31
Feature/improve portfolio calculator unit tests by loading currency from user settings ( #5765 )
* Use currency from user settings
* Update changelog
2 months ago
Dibyendu Sahoo
db2c2426c6
Task/refactor interest to interestInBaseCurrency in portfolio summary interface ( #5763 )
* Refactor interest to interestInBaseCurrency
2 months ago
Thomas Kaul
3034745e7d
Feature/improve currency validation in getAssetProfiles() functionality of data provider service ( #5747 )
* Improve currency validation
* Update changelog
3 months ago
Thomas Kaul
058d7caacd
Bugfix/respect includeIndices flag in search functionality of FMP service ( #5746 )
* Respect includeIndices in search()
* Update changelog
3 months ago
Thomas Kaul
948df81a0d
Feature/use asset profile resolutions in getQuotes() of FMP service (part 2) ( #5750 )
* Use asset profile resolutions in getQuotes()
3 months ago
Thomas Kaul
2ff02a0a9c
Feature/improve currency validation in search functionality of data provider service ( #5745 )
* Improve currency validation
* Update changelog
3 months ago
Thomas Kaul
8d6153fa52
Feature/use asset profile resolutions in getQuotes() of FMP service ( #5743 )
* Use asset profile resolutions in getQuotes()
* Update changelog
3 months ago
Lagmator22
20da95239e
Task/refactor liabilities to liabilitiesInBaseCurrency in portfolio summary interface ( #5725 )
* Refactor liabilities to liabilitiesInBaseCurrency
3 months ago
Szymon Łągiewka
fc4d5774fa
Bugfix/enable IPv6 connectivity for Redis in job queue module ( #5726 )
* Enable IPv6 connectivity for Redis in job queue module
* Update changelog
3 months ago
Thomas Kaul
a9f38aaf90
Task/remove deprecated position endpoints from portfolio controller ( #5733 )
* Remove deprecated endpoints
* GET api/v1/portfolio/position/:dataSource/:symbol
* PUT api/v1/portfolio/position/:dataSource/:symbol/tags
* Update changelog
3 months ago
Tanbir Ali
d2fe16c794
Task/refactor transactionCount to activitiesCount in portfolio holding response ( #5709 )
* Refactor transactionCount to activitiesCount in portfolio holding response
* Update changelog
3 months ago