async function getTradeMapGroupedByTimeAndPrice(){
let mapByPrice = new Map();
let prevVwap=0
tradeMap.forEach((tradeArray, unixTimestamp) => {
console.log(toDateNum(unixTimestamp),'forEach tradeMap',tradeArray);
const groupedMap = new Map();
let innerPrevVwap=0
for(let tradeObj of tradeArray) {
let priceArr = groupedMap.get(tradeObj.price)? groupedMap.get(tradeObj.price).trades : []
priceArr.push(tradeObj)
const thisVwap=weightedMean(priceArr.map(prObj=>prObj.price),priceArr.map(prObj=>prObj.volume))
const tick= thisVwap-innerPrevVwap >= 0 ? 'u' : 'd'
groupedMap.set(tradeObj.price,{
trades: priceArr,
tradeCount: priceArr.length,
tradeVolume: _.sumBy(priceArr,'volume'),
vwap: thisVwap,
tick,
avgPrice: _.sumBy(priceArr,'price') / priceArr.length,
minPrice: _.minBy(priceArr,'price').price,
maxPrice: _.maxBy(priceArr,'price').price,
})
innerPrevVwap=thisVwap
}
const thisVwap=weightedMean(tradeArray.map(prObj=>prObj.price),tradeArray.map(prObj=>prObj.volume))
const tick= thisVwap-prevVwap >= 0 ? 'u' : 'd'
mapByPrice.set(unixTimestamp, {
date: toDateNum(unixTimestamp),
trades: tradeArray,
tradeCount: tradeArray.length,
tradeVolume: _.sumBy(tradeArray,'volume'),
tick,
vwap: weightedMean(tradeArray.map(prObj=>prObj.price),tradeArray.map(prObj=>prObj.volume)),
avgPrice: _.sumBy(tradeArray,'price') / tradeArray.length,
minPrice: _.minBy(tradeArray,'price').price,
maxPrice: _.maxBy(tradeArray,'price').price,
tradesByPrice: {
trades:groupedMap,
},
})
prevVwap=thisVwap
})
return mapByPrice
}