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