add 4h and 1D intervals (#534)

This commit is contained in:
Bob van der Helm 2023-10-11 12:45:59 +02:00 committed by GitHub
parent 7fac73b4dd
commit b175ee3e0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 11 deletions

View File

@ -40,10 +40,19 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
'15': '15m', '15': '15m',
'30': '30m', '30': '30m',
'60': '1h', '60': '1h',
'240': '4h',
'1D': '1d',
}
minutesPerInterval: { [key: string]: number } = {
'15': 15,
'30': 30,
'60': 60,
'240': 60 * 4,
'1D': 60 * 24,
} }
supportedPools: string[] = [] supportedPools: string[] = []
supportedResolutions = ['15', '30', '60'] as ResolutionString[] supportedResolutions = ['15', '30', '60', '4h', 'D'] as ResolutionString[]
constructor(debug = false, baseDecimals: number, baseDenom: string) { constructor(debug = false, baseDecimals: number, baseDenom: string) {
if (debug) console.log('Start TheGraph charting library datafeed') if (debug) console.log('Start TheGraph charting library datafeed')
@ -113,19 +122,22 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
}) })
} }
async resolveSymbol(pairName: string, onResolve: ResolveCallback, onError: ErrorCallback) { resolveSymbol(pairName: string, onResolve: ResolveCallback, onError: ErrorCallback) {
setTimeout(() => pairName = this.getPairName(pairName)
onResolve({ setTimeout(() => {
const info: LibrarySymbolInfo = {
...defaultSymbolInfo, ...defaultSymbolInfo,
name: this.getDescription(pairName), name: this.getDescription(pairName),
full_name: pairName, full_name: this.getDescription(pairName),
description: this.getDescription(pairName), description: this.getDescription(pairName),
ticker: this.getDescription(pairName), ticker: this.getDescription(pairName),
exchange: this.exchangeName, exchange: this.exchangeName,
listed_exchange: this.exchangeName, listed_exchange: this.exchangeName,
supported_resolutions: this.supportedResolutions, supported_resolutions: this.supportedResolutions,
}), base_name: [this.getDescription(pairName)],
) } as LibrarySymbolInfo
onResolve(info)
})
} }
async getBars( async getBars(
@ -136,7 +148,7 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
): Promise<void> { ): Promise<void> {
const interval = this.intervals[resolution] const interval = this.intervals[resolution]
let pair1 = symbolInfo.full_name let pair1 = this.getPairName(symbolInfo.full_name)
let pair2: string = '' let pair2: string = ''
let pair3: string = '' let pair3: string = ''
@ -198,13 +210,29 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
await Promise.all([pair1Bars, pair2Bars, pair3Bars]).then( await Promise.all([pair1Bars, pair2Bars, pair3Bars]).then(
([pair1Bars, pair2Bars, pair3Bars]) => { ([pair1Bars, pair2Bars, pair3Bars]) => {
let bars = pair1Bars let bars = pair1Bars
if (!bars.length) {
onResult([], { noData: true })
return
}
if (pair2Bars) { if (pair2Bars) {
bars = this.combineBars(pair1Bars, pair2Bars) bars = this.combineBars(pair1Bars, pair2Bars)
} }
if (pair3Bars) { if (pair3Bars) {
bars = this.combineBars(bars, pair3Bars) bars = this.combineBars(bars, pair3Bars)
} }
onResult(bars)
const filler = Array.from({ length: this.batchSize - bars.length }).map((_, index) => ({
time: (bars[0]?.time || new Date().getTime()) - index * this.minutesPerInterval[resolution],
close: 0,
open: 0,
high: 0,
low: 0,
volume: 0,
}))
onResult([...filler, ...bars])
}, },
) )
} }
@ -282,6 +310,16 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
return bars return bars
} }
getPairName(name: string) {
if (name.includes(PAIR_SEPARATOR)) return name
const [symbol1, symbol2] = name.split('/')
const asset1 = ASSETS.find((asset) => asset.symbol === symbol1)
const asset2 = ASSETS.find((asset) => asset.symbol === symbol2)
return `${asset1?.denom}${PAIR_SEPARATOR}${asset2?.denom}`
}
searchSymbols(): void { searchSymbols(): void {
// Don't allow to search for symbols // Don't allow to search for symbols
} }

View File

@ -1,5 +1,6 @@
import { import {
ChartingLibraryFeatureset, ChartingLibraryFeatureset,
LibrarySymbolInfo,
ResolutionString, ResolutionString,
SeriesFormat, SeriesFormat,
Timezone, Timezone,
@ -26,7 +27,7 @@ export const overrides = {
'linetooltrendline.linewidth': 2, 'linetooltrendline.linewidth': 2,
} }
export const defaultSymbolInfo = { export const defaultSymbolInfo: Partial<LibrarySymbolInfo> = {
listed_exchange: 'Osmosis', listed_exchange: 'Osmosis',
type: 'AMM', type: 'AMM',
session: '24x7', session: '24x7',
@ -35,7 +36,7 @@ export const defaultSymbolInfo = {
timezone: 'Etc/UTC' as Timezone, timezone: 'Etc/UTC' as Timezone,
has_intraday: true, has_intraday: true,
has_daily: true, has_daily: true,
has_weekly_and_monthly: true, has_weekly_and_monthly: false,
format: 'price' as SeriesFormat, format: 'price' as SeriesFormat,
supported_resolutions: ['15'] as ResolutionString[], supported_resolutions: ['15'] as ResolutionString[],
} }