73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
export class CacheKeyGenerator {
|
|
/**
|
|
* Generate cache key for market data
|
|
*/
|
|
static marketData(symbol: string, timeframe: string, date?: Date): string {
|
|
const dateStr = date ? date.toISOString().split('T')[0] : 'latest';
|
|
return `market:${symbol.toLowerCase()}:${timeframe}:${dateStr}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for technical indicators
|
|
*/
|
|
static indicator(symbol: string, indicator: string, period: number, dataHash: string): string {
|
|
return `indicator:${symbol.toLowerCase()}:${indicator}:${period}:${dataHash}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for backtest results
|
|
*/
|
|
static backtest(strategyName: string, params: Record<string, unknown>): string {
|
|
const paramHash = this.hashObject(params);
|
|
return `backtest:${strategyName}:${paramHash}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for strategy results
|
|
*/
|
|
static strategy(strategyName: string, symbol: string, timeframe: string): string {
|
|
return `strategy:${strategyName}:${symbol.toLowerCase()}:${timeframe}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for user sessions
|
|
*/
|
|
static userSession(userId: string): string {
|
|
return `session:${userId}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for portfolio data
|
|
*/
|
|
static portfolio(userId: string, portfolioId: string): string {
|
|
return `portfolio:${userId}:${portfolioId}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for real-time prices
|
|
*/
|
|
static realtimePrice(symbol: string): string {
|
|
return `price:realtime:${symbol.toLowerCase()}`;
|
|
}
|
|
|
|
/**
|
|
* Generate cache key for order book data
|
|
*/
|
|
static orderBook(symbol: string, depth: number = 10): string {
|
|
return `orderbook:${symbol.toLowerCase()}:${depth}`;
|
|
}
|
|
|
|
/**
|
|
* Create a simple hash from object for cache keys
|
|
*/
|
|
private static hashObject(obj: Record<string, unknown>): string {
|
|
const str = JSON.stringify(obj, Object.keys(obj).sort());
|
|
let hash = 0;
|
|
for (let i = 0; i < str.length; i++) {
|
|
const char = str.charCodeAt(i);
|
|
hash = (hash << 5) - hash + char;
|
|
hash = hash & hash; // Convert to 32-bit integer
|
|
}
|
|
return Math.abs(hash).toString(36);
|
|
}
|
|
}
|