From d8008789543fcbece79dd005bbbfeac219ba9279 Mon Sep 17 00:00:00 2001 From: Valentin Zickner Date: Fri, 19 Nov 2021 22:35:59 +0100 Subject: [PATCH] add support for euro cryptocurrencies, ALGO and remove unknown cryptocurrencies from list --- .../custom-cryptocurrencies.json | 1 + .../yahoo-finance/yahoo-finance.service.ts | 22 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/api/src/services/cryptocurrency/custom-cryptocurrencies.json b/apps/api/src/services/cryptocurrency/custom-cryptocurrencies.json index 3e181c6a7..949b455db 100644 --- a/apps/api/src/services/cryptocurrency/custom-cryptocurrencies.json +++ b/apps/api/src/services/cryptocurrency/custom-cryptocurrencies.json @@ -1,5 +1,6 @@ { "1INCH": "1inch", + "ALGO": "Algorand", "AVAX": "Avalanche", "MATIC": "Polygon", "SHIB": "Shiba Inu" diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index 2fac41b47..97289dd01 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -197,16 +197,17 @@ export class YahooFinanceService implements DataProviderInterface { // filter out undefined symbols return quote.symbol; }) - .filter(({ quoteType }) => { + .filter(({ quoteType, symbol }) => { return ( - quoteType === 'CRYPTOCURRENCY' || + (quoteType === 'CRYPTOCURRENCY' && this.isCryptoCurrency(symbol)) || quoteType === 'EQUITY' || quoteType === 'ETF' ); }) .filter(({ quoteType, symbol }) => { if (quoteType === 'CRYPTOCURRENCY') { - // Only allow cryptocurrencies in USD + // Only allow cryptocurrencies in USD to avoid having redundancy in the database. + // Trades need to be converted manually before to USD (or a UI converter needs to be developed) return symbol.includes('USD'); } @@ -253,21 +254,26 @@ export class YahooFinanceService implements DataProviderInterface { ) { if (isCurrency(aSymbol.substring(0, aSymbol.length - 3))) { return `${aSymbol}=X`; - } else if ( - this.cryptocurrencyService.isCrypto(aSymbol) || - this.cryptocurrencyService.isCrypto(aSymbol.replace('1', '')) - ) { + } else if (this.isCryptoCurrency(aSymbol)) { // Add a dash before the last three characters // BTCUSD -> BTC-USD // DOGEUSD -> DOGE-USD // SOL1USD -> SOL1-USD - return aSymbol.replace('USD', '-USD'); + return aSymbol.replace(new RegExp('-?USD$'), '-USD'); } } return aSymbol; } + private isCryptoCurrency(aSymbol: string) { + const symbol = aSymbol.replace(new RegExp('-USD$'), 'USD'); + return ( + this.cryptocurrencyService.isCrypto(symbol) || + this.cryptocurrencyService.isCrypto(symbol.replace('1', '')) + ); + } + private parseAssetClass(aPrice: IYahooFinancePrice): { assetClass: AssetClass; assetSubClass: AssetSubClass;