custom indicators fixed
This commit is contained in:
@@ -40,7 +40,8 @@ interface SymbolDenominators {
|
||||
export class WebSocketDatafeed implements IBasicDataFeed {
|
||||
private pendingRequests: Map<string, PendingRequest> = new Map()
|
||||
private subscriptions: Map<string, Subscription> = new Map()
|
||||
private requestTimeout = 10000 // 10 seconds
|
||||
private requestTimeout = 10000 // 10 seconds (used for all requests except getBars)
|
||||
private barsRequestTimeout = 60000 // 60 seconds (cold-cache pipeline may take a while)
|
||||
private configuration: DatafeedConfiguration | null = null
|
||||
private messageHandler: MessageHandler
|
||||
private symbolDenominators: Map<string, SymbolDenominators> = new Map() // Track denominators per symbol
|
||||
@@ -56,7 +57,7 @@ export class WebSocketDatafeed implements IBasicDataFeed {
|
||||
return `tv_${Date.now()}_${Math.random().toString(36).substring(7)}`
|
||||
}
|
||||
|
||||
private sendRequest<T>(message: any): Promise<T> {
|
||||
private sendRequest<T>(message: any, timeoutMs?: number): Promise<T> {
|
||||
const requestId = message.request_id || this.generateRequestId()
|
||||
message.request_id = requestId
|
||||
|
||||
@@ -67,7 +68,7 @@ export class WebSocketDatafeed implements IBasicDataFeed {
|
||||
console.error('[TradingView Datafeed] Request timeout:', requestId, message.type)
|
||||
this.pendingRequests.delete(requestId)
|
||||
reject(new Error('Request timeout'))
|
||||
}, this.requestTimeout)
|
||||
}, timeoutMs ?? this.requestTimeout)
|
||||
|
||||
this.pendingRequests.set(requestId, { resolve, reject, timeout })
|
||||
|
||||
@@ -244,14 +245,23 @@ export class WebSocketDatafeed implements IBasicDataFeed {
|
||||
const symbolKey = symbolInfo.ticker || symbolInfo.name
|
||||
const denoms = this.symbolDenominators.get(symbolKey) || { tick: 1, base: 1 }
|
||||
|
||||
this.sendRequest<any>({
|
||||
const doRequest = () => this.sendRequest<any>({
|
||||
type: 'get_bars',
|
||||
symbol: symbolKey,
|
||||
period_seconds: intervalToSeconds(resolution),
|
||||
from_time: periodParams.from,
|
||||
to_time: periodParams.to,
|
||||
countback: periodParams.countBack
|
||||
})
|
||||
}, this.barsRequestTimeout)
|
||||
|
||||
doRequest()
|
||||
.catch((err: Error) => {
|
||||
if (err.message === 'Request timeout') {
|
||||
console.warn('[TradingView Datafeed] getBars timed out, retrying once (data may now be in cache)...')
|
||||
return doRequest()
|
||||
}
|
||||
throw err
|
||||
})
|
||||
.then((response) => {
|
||||
if (response.history) {
|
||||
console.log('[TradingView Datafeed] Raw bar sample:', response.history.bars?.[0])
|
||||
|
||||
Reference in New Issue
Block a user