|
|
@ -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(() => { |
|
|
|