From b383503b95f0b309bd14caa78439dde0d24ad7f8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:34:36 +0100 Subject: [PATCH] Improve handling of derived currencies --- .../data-provider/data-provider.service.ts | 26 +++--- .../eod-historical-data.service.ts | 6 +- .../yahoo-finance/yahoo-finance.service.ts | 85 +------------------ 3 files changed, 19 insertions(+), 98 deletions(-) diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 8397f7902..0e7788edb 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -263,6 +263,19 @@ export class DataProviderService { } = {}; const startTimeTotal = performance.now(); + if ( + items.some(({ symbol }) => { + return symbol === `${DEFAULT_CURRENCY}USX`; + }) + ) { + response[`${DEFAULT_CURRENCY}USX`] = { + currency: 'USX', + dataSource: this.getDataSourceForExchangeRates(), + marketPrice: 100, + marketState: 'open' + }; + } + // Get items from cache const itemsToFetch: UniqueAsset[] = []; @@ -333,18 +346,11 @@ export class DataProviderService { promises.push( promise.then(async (result) => { for (let [symbol, dataProviderResponse] of Object.entries(result)) { - if (symbol === `${DEFAULT_CURRENCY}USX`) { - dataProviderResponse = { - ...dataProviderResponse, - marketPrice: new Big(1).mul(100).toNumber(), - marketState: 'open' - }; - } - if ( [ `${DEFAULT_CURRENCY}GBp`, `${DEFAULT_CURRENCY}ILA`, + `${DEFAULT_CURRENCY}USX`, `${DEFAULT_CURRENCY}ZAc` ].includes(symbol) ) { @@ -423,10 +429,10 @@ export class DataProviderService { this.configurationService.get('CACHE_QUOTES_TTL') ); } - - console.log({ response }); } + console.log({ response }); + Logger.debug( `Fetched ${symbolsChunk.length} quote${ symbolsChunk.length > 1 ? 's' : '' diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 797389a6c..6b8b8f04b 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -20,7 +20,6 @@ import { DataSource, SymbolProfile } from '@prisma/client'; -import Big from 'big.js'; import { format, isToday } from 'date-fns'; import got from 'got'; @@ -93,10 +92,7 @@ export class EodHistoricalDataService implements DataProviderInterface { return response.reduce( (result, historicalItem, index, array) => { result[this.convertFromEodSymbol(symbol)][historicalItem.date] = { - marketPrice: this.getConvertedValue({ - symbol: symbol, - value: historicalItem.close - }) + marketPrice: historicalItem.close }; return result; 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 04c3934cf..47869d3e8 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 @@ -1,5 +1,3 @@ -// TODO - import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface'; import { CryptocurrencyService } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.service'; import { YahooFinanceDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service'; @@ -18,7 +16,6 @@ import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; -import Big from 'big.js'; import { addDays, format, isSameDay } from 'date-fns'; import yahooFinance from 'yahoo-finance2'; import { Quote } from 'yahoo-finance2/dist/esm/src/modules/quote'; @@ -79,10 +76,7 @@ export class YahooFinanceService implements DataProviderInterface { for (const historicalItem of historicalResult) { response[format(historicalItem.date, DATE_FORMAT)] = { - marketPrice: this.getConvertedValue({ - symbol, - value: historicalItem.dividends - }) + marketPrice: historicalItem.dividends }; } @@ -131,10 +125,7 @@ export class YahooFinanceService implements DataProviderInterface { for (const historicalItem of historicalResult) { response[symbol][format(historicalItem.date, DATE_FORMAT)] = { - marketPrice: this.getConvertedValue({ - symbol: symbol, - value: historicalItem.close - }) + marketPrice: historicalItem.close }; } @@ -206,57 +197,6 @@ export class YahooFinanceService implements DataProviderInterface { : 'closed', marketPrice: quote.regularMarketPrice || 0 }; - - if ( - symbol === `${DEFAULT_CURRENCY}GBP` && - yahooFinanceSymbols.includes(`${DEFAULT_CURRENCY}GBp=X`) - ) { - // Convert GPB to GBp (pence) - response[`${DEFAULT_CURRENCY}GBp`] = { - ...response[symbol], - currency: 'GBp', - marketPrice: this.getConvertedValue({ - symbol: `${DEFAULT_CURRENCY}GBp`, - value: response[symbol].marketPrice - }) - }; - } else if ( - symbol === `${DEFAULT_CURRENCY}ILS` && - yahooFinanceSymbols.includes(`${DEFAULT_CURRENCY}ILA=X`) - ) { - // Convert ILS to ILA - response[`${DEFAULT_CURRENCY}ILA`] = { - ...response[symbol], - currency: 'ILA', - marketPrice: this.getConvertedValue({ - symbol: `${DEFAULT_CURRENCY}ILA`, - value: response[symbol].marketPrice - }) - }; - } else if ( - symbol === `${DEFAULT_CURRENCY}ZAR` && - yahooFinanceSymbols.includes(`${DEFAULT_CURRENCY}ZAc=X`) - ) { - // Convert ZAR to ZAc (cents) - response[`${DEFAULT_CURRENCY}ZAc`] = { - ...response[symbol], - currency: 'ZAc', - marketPrice: this.getConvertedValue({ - symbol: `${DEFAULT_CURRENCY}ZAc`, - value: response[symbol].marketPrice - }) - }; - } - } - - if (yahooFinanceSymbols.includes(`${DEFAULT_CURRENCY}USX=X`)) { - // Convert USD to USX (cent) - response[`${DEFAULT_CURRENCY}USX`] = { - currency: 'USX', - dataSource: this.getName(), - marketPrice: new Big(1).mul(100).toNumber(), - marketState: 'open' - }; } return response; @@ -359,27 +299,6 @@ export class YahooFinanceService implements DataProviderInterface { return { items }; } - private getConvertedValue({ - symbol, - value - }: { - symbol: string; - value: number; - }) { - if (symbol === `${DEFAULT_CURRENCY}GBp`) { - // Convert GPB to GBp (pence) - return new Big(value).mul(100).toNumber(); - } else if (symbol === `${DEFAULT_CURRENCY}ILA`) { - // Convert ILS to ILA - return new Big(value).mul(100).toNumber(); - } else if (symbol === `${DEFAULT_CURRENCY}ZAc`) { - // Convert ZAR to ZAc (cents) - return new Big(value).mul(100).toNumber(); - } - - return value; - } - private async getQuotesWithQuoteSummary(aYahooFinanceSymbols: string[]) { const quoteSummaryPromises = aYahooFinanceSymbols.map((symbol) => { return yahooFinance.quoteSummary(symbol).catch(() => {