COB working excelent
This commit is contained in:
@ -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
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user