COB working excelent

This commit is contained in:
Dobromir Popov
2025-06-18 18:11:53 +03:00
parent 8d80fb3bbe
commit f1ef2702d7

View File

@ -655,7 +655,7 @@
// Use wider price range for higher resolution multipliers to maintain depth // Use wider price range for higher resolution multipliers to maintain depth
const baseRange = 0.02; // 2% base range const baseRange = 0.02; // 2% base range
const expandedRange = baseRange * Math.max(1, resolutionMultiplier * 0.5); // Expand range for higher multipliers const expandedRange = baseRange * Math.max(1, resolutionMultiplier * 2.5); // Very aggressive expansion
const priceRange = midPrice * expandedRange; const priceRange = midPrice * expandedRange;
const minPrice = midPrice - priceRange; const minPrice = midPrice - priceRange;
const maxPrice = midPrice + priceRange; const maxPrice = midPrice + priceRange;
@ -664,23 +664,56 @@
function aggregateOrders(orders, isAsk = false) { function aggregateOrders(orders, isAsk = false) {
const buckets = new Map(); const buckets = new Map();
orders.forEach(order => { // First, filter orders within the expanded price range
const filteredOrders = orders.filter(order => {
return order.price >= minPrice && order.price <= maxPrice &&
(isAsk ? order.price >= midPrice : order.price <= midPrice);
});
// Aggregate into buckets
filteredOrders.forEach(order => {
const bucketPrice = resolutionFunc(order.price); const bucketPrice = resolutionFunc(order.price);
if (!buckets.has(bucketPrice)) { if (!buckets.has(bucketPrice)) {
buckets.set(bucketPrice, { buckets.set(bucketPrice, {
price: bucketPrice, price: bucketPrice,
volume: 0, volume: 0,
value: 0 value: 0,
orderCount: 0
}); });
} }
const bucket = buckets.get(bucketPrice); const bucket = buckets.get(bucketPrice);
bucket.volume += order.volume || 0; bucket.volume += order.volume || 0;
bucket.value += (order.volume || 0) * order.price; bucket.value += (order.volume || 0) * order.price;
bucket.orderCount += 1;
}); });
return Array.from(buckets.values()) // Convert to array and ensure minimum buckets
.filter(bucket => bucket.price >= minPrice && bucket.price <= maxPrice) let result = Array.from(buckets.values());
.filter(bucket => isAsk ? bucket.price >= midPrice : bucket.price <= midPrice);
// If we have very few buckets, create additional empty ones
if (result.length > 0 && result.length < 5) {
const bucketSize = resolutionMultiplier * (prefix === 'btc' ? 10 : 1);
const baseBucket = result[isAsk ? 0 : result.length - 1];
for (let i = 0; i < 8; i++) { // Create up to 8 additional buckets
const newPrice = isAsk
? baseBucket.price + (bucketSize * (i + 1))
: baseBucket.price - (bucketSize * (i + 1));
if (newPrice > 0 &&
newPrice >= minPrice && newPrice <= maxPrice &&
(isAsk ? newPrice >= midPrice : newPrice <= midPrice)) {
result.push({
price: newPrice,
volume: 0,
value: 0,
orderCount: 0
});
}
}
}
return result;
} }
// Aggregate or use raw data based on resolution multiplier // Aggregate or use raw data based on resolution multiplier
@ -732,7 +765,7 @@
allOrders.push({ allOrders.push({
...ask, ...ask,
side: 'ASK', side: 'ASK',
showPrice: index % 10 === 0, // Show every 10th price for readability showPrice: resolutionMultiplier > 1 ? true : (index % 10 === 0), // Show every price when using multiplier
volumePercent: (ask.volume / maxVolume) * 100 volumePercent: (ask.volume / maxVolume) * 100
}); });
}); });
@ -753,7 +786,7 @@
allOrders.push({ allOrders.push({
...bid, ...bid,
side: 'BID', side: 'BID',
showPrice: index % 10 === 0, // Show every 10th price for readability showPrice: resolutionMultiplier > 1 ? true : (index % 10 === 0), // Show every price when using multiplier
volumePercent: (bid.volume / maxVolume) * 100 volumePercent: (bid.volume / maxVolume) * 100
}); });
}); });