|
|
@ -27,6 +27,10 @@ export class BenchmarkService {
|
|
|
|
private readonly symbolProfileService: SymbolProfileService
|
|
|
|
private readonly symbolProfileService: SymbolProfileService
|
|
|
|
) {}
|
|
|
|
) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public calculateChangeInPercentage(baseValue: number, currentValue: number) {
|
|
|
|
|
|
|
|
return new Big(currentValue).div(baseValue).minus(1).toNumber();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async getBenchmarks({ useCache = true } = {}): Promise<
|
|
|
|
public async getBenchmarks({ useCache = true } = {}): Promise<
|
|
|
|
BenchmarkResponse['benchmarks']
|
|
|
|
BenchmarkResponse['benchmarks']
|
|
|
|
> {
|
|
|
|
> {
|
|
|
@ -64,12 +68,13 @@ export class BenchmarkService {
|
|
|
|
benchmarks = allTimeHighs.map((allTimeHigh, index) => {
|
|
|
|
benchmarks = allTimeHighs.map((allTimeHigh, index) => {
|
|
|
|
const { marketPrice } = quotes[benchmarkAssets[index].symbol] ?? {};
|
|
|
|
const { marketPrice } = quotes[benchmarkAssets[index].symbol] ?? {};
|
|
|
|
|
|
|
|
|
|
|
|
let performancePercentFromAllTimeHigh = new Big(0);
|
|
|
|
let performancePercentFromAllTimeHigh = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (allTimeHigh && marketPrice) {
|
|
|
|
if (allTimeHigh && marketPrice) {
|
|
|
|
performancePercentFromAllTimeHigh = new Big(marketPrice)
|
|
|
|
performancePercentFromAllTimeHigh = this.calculateChangeInPercentage(
|
|
|
|
.div(allTimeHigh)
|
|
|
|
allTimeHigh,
|
|
|
|
.minus(1);
|
|
|
|
marketPrice
|
|
|
|
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
return {
|
|
|
@ -84,7 +89,7 @@ export class BenchmarkService {
|
|
|
|
})?.name,
|
|
|
|
})?.name,
|
|
|
|
performances: {
|
|
|
|
performances: {
|
|
|
|
allTimeHigh: {
|
|
|
|
allTimeHigh: {
|
|
|
|
performancePercent: performancePercentFromAllTimeHigh.toNumber()
|
|
|
|
performancePercent: performancePercentFromAllTimeHigh
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -135,26 +140,24 @@ export class BenchmarkService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const marketPriceAtStartDate = new Big(
|
|
|
|
const marketPriceAtStartDate = marketDataItems?.[0]?.marketPrice ?? 0;
|
|
|
|
marketDataItems?.[0]?.marketPrice ?? 0
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
marketData: marketDataItems.map((marketDataItem) => {
|
|
|
|
marketData: marketDataItems.map((marketDataItem) => {
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
date: format(marketDataItem.date, DATE_FORMAT),
|
|
|
|
date: format(marketDataItem.date, DATE_FORMAT),
|
|
|
|
value: marketPriceAtStartDate.eq(0)
|
|
|
|
value:
|
|
|
|
|
|
|
|
marketPriceAtStartDate === 0
|
|
|
|
? 0
|
|
|
|
? 0
|
|
|
|
: new Big(marketDataItem.marketPrice)
|
|
|
|
: this.calculateChangeInPercentage(
|
|
|
|
.div(marketPriceAtStartDate)
|
|
|
|
marketPriceAtStartDate,
|
|
|
|
.minus(1)
|
|
|
|
marketDataItem.marketPrice
|
|
|
|
.toNumber() * 100
|
|
|
|
) * 100
|
|
|
|
};
|
|
|
|
};
|
|
|
|
})
|
|
|
|
})
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private getMarketCondition(aPerformanceInPercent: Big) {
|
|
|
|
private getMarketCondition(aPerformanceInPercent: number) {
|
|
|
|
return aPerformanceInPercent.lte(-0.2) ? 'BEAR_MARKET' : 'NEUTRAL_MARKET';
|
|
|
|
return aPerformanceInPercent <= -0.2 ? 'BEAR_MARKET' : 'NEUTRAL_MARKET';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|