Move buildUsdPricesPerTickUnit to ChartCalculations

This commit is contained in:
chimp1984 2021-11-01 21:07:31 +01:00
parent c51060a6d4
commit deeb912f9b
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
2 changed files with 35 additions and 28 deletions

View file

@ -27,12 +27,44 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ChartCalculations {
static final ZoneId ZONE_ID = ZoneId.systemDefault();
static void buildUsdPricesPerTickUnit(Map<TradesChartsViewModel.TickUnit, Map<Long, Long>> usdAveragePriceMapsPerTickUnit,
Set<TradeStatistics3> tradeStatisticsSet) {
if (usdAveragePriceMapsPerTickUnit.isEmpty()) {
Map<TradesChartsViewModel.TickUnit, Map<Long, List<TradeStatistics3>>> dateMapsPerTickUnit = new HashMap<>();
for (TradesChartsViewModel.TickUnit tick : TradesChartsViewModel.TickUnit.values()) {
dateMapsPerTickUnit.put(tick, new HashMap<>());
}
tradeStatisticsSet.stream()
.filter(e -> e.getCurrency().equals("USD"))
.forEach(tradeStatistics -> {
for (TradesChartsViewModel.TickUnit tick : TradesChartsViewModel.TickUnit.values()) {
long time = roundToTick(tradeStatistics.getLocalDateTime(), tick).getTime();
Map<Long, List<TradeStatistics3>> map = dateMapsPerTickUnit.get(tick);
map.putIfAbsent(time, new ArrayList<>());
map.get(time).add(tradeStatistics);
}
});
dateMapsPerTickUnit.forEach((tick, map) -> {
HashMap<Long, Long> priceMap = new HashMap<>();
map.forEach((date, tradeStatisticsList) -> priceMap.put(date, getAveragePrice(tradeStatisticsList)));
usdAveragePriceMapsPerTickUnit.put(tick, priceMap);
});
}
}
static long getAveragePrice(List<TradeStatistics3> tradeStatisticsList) {
long accumulatedAmount = 0;
long accumulatedVolume = 0;

View file

@ -153,7 +153,9 @@ class TradesChartsViewModel extends ActivatableViewModel {
}
syncPriceFeedCurrency();
setMarketPriceFeedCurrency();
buildUsdPricesPerTickUnit(usdAveragePriceMapsPerTickUnit, tradeStatisticsManager.getObservableTradeStatisticsSet());
ChartCalculations.buildUsdPricesPerTickUnit(usdAveragePriceMapsPerTickUnit, tradeStatisticsManager.getObservableTradeStatisticsSet());
updateSelectedTradeStatistics(getCurrencyCode());
updateChartData();
}
@ -248,33 +250,6 @@ class TradesChartsViewModel extends ActivatableViewModel {
priceFeedService.setCurrencyCode(selectedTradeCurrencyProperty.get().getCode());
}
private static void buildUsdPricesPerTickUnit(Map<TickUnit, Map<Long, Long>> usdAveragePriceMapsPerTickUnit,
Set<TradeStatistics3> tradeStatisticsSet) {
if (usdAveragePriceMapsPerTickUnit.isEmpty()) {
Map<TickUnit, Map<Long, List<TradeStatistics3>>> dateMapsPerTickUnit = new HashMap<>();
for (TickUnit tick : TickUnit.values()) {
dateMapsPerTickUnit.put(tick, new HashMap<>());
}
tradeStatisticsSet.stream()
.filter(e -> e.getCurrency().equals("USD"))
.forEach(tradeStatistics -> {
for (TickUnit tick : TickUnit.values()) {
long time = ChartCalculations.roundToTick(tradeStatistics.getLocalDateTime(), tick).getTime();
Map<Long, List<TradeStatistics3>> map = dateMapsPerTickUnit.get(tick);
map.putIfAbsent(time, new ArrayList<>());
map.get(time).add(tradeStatistics);
}
});
dateMapsPerTickUnit.forEach((tick, map) -> {
HashMap<Long, Long> priceMap = new HashMap<>();
map.forEach((date, tradeStatisticsList) -> priceMap.put(date, ChartCalculations.getAveragePrice(tradeStatisticsList)));
usdAveragePriceMapsPerTickUnit.put(tick, priceMap);
});
}
}
private void updateChartData() {
// Generate date range and create sets for all ticks
itemsPerInterval = new HashMap<>();