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
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 minPrice = midPrice - priceRange;
const maxPrice = midPrice + priceRange;
@ -664,23 +664,56 @@
function aggregateOrders(orders, isAsk = false) {
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);
if (!buckets.has(bucketPrice)) {
buckets.set(bucketPrice, {
price: bucketPrice,
volume: 0,
value: 0
value: 0,
orderCount: 0
});
}
const bucket = buckets.get(bucketPrice);
bucket.volume += order.volume || 0;
bucket.value += (order.volume || 0) * order.price;
bucket.orderCount += 1;
});
return Array.from(buckets.values())
.filter(bucket => bucket.price >= minPrice && bucket.price <= maxPrice)
.filter(bucket => isAsk ? bucket.price >= midPrice : bucket.price <= midPrice);
// Convert to array and ensure minimum buckets
let result = Array.from(buckets.values());
// 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
@ -732,7 +765,7 @@
allOrders.push({
...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
});
});
@ -753,7 +786,7 @@
allOrders.push({
...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
});
});