|
@ -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: |
|
|
? 0 |
|
|
marketPriceAtStartDate === 0 |
|
|
: new Big(marketDataItem.marketPrice) |
|
|
? 0 |
|
|
.div(marketPriceAtStartDate) |
|
|
: this.calculateChangeInPercentage( |
|
|
.minus(1) |
|
|
marketPriceAtStartDate, |
|
|
.toNumber() * 100 |
|
|
marketDataItem.marketPrice |
|
|
|
|
|
) * 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'; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|