@Override public Map<String, Long> getDigicoinTransactionsByBroker() { Map<String, Long> rtn = new HashMap<>(); for (Map.Entry<String, List<OrderOutcome>> brokerOrderAuditEntry : inMemoryBrokerOrderAudit.entrySet()) { List<OrderOutcome> ordersForBroker = brokerOrderAuditEntry.getValue(); Long totalForBroker = 0l; for (OrderOutcome orderOutcome : ordersForBroker) { totalForBroker += Math.abs(orderOutcome.getOrder().getAmount()); } rtn.put(brokerOrderAuditEntry.getKey(), totalForBroker); } return rtn; }
@Override public Map<String, Double> getClientNetPositions() { Map<String, Double> rtn = new HashMap<>(); for (Map.Entry<String, List<OrderOutcome>> clientOrderAuditEntry : inMemoryClientOrderAudit.entrySet()) { List<OrderOutcome> ordersForClient = clientOrderAuditEntry.getValue(); Double sumOfTransactionsPerDigicoin = 0d; Double allAmounts = 0d; for (OrderOutcome orderOutcome : ordersForClient) { sumOfTransactionsPerDigicoin += orderOutcome.getPrice() / Math.abs(orderOutcome.getOrder().getAmount()); allAmounts += orderOutcome.getOrder().getAmount(); } Double average = new Double(sumOfTransactionsPerDigicoin / ordersForClient.size()) * allAmounts; rtn.put( clientOrderAuditEntry.getKey(), new BigDecimal(average).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()); } return rtn; }
@Override public void auditClientOrder(OrderOutcome orderOutcome) { doAuditOrder(inMemoryClientOrderAudit, orderOutcome.getOrder().getClient(), orderOutcome); }