/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2015 */ package vwap; import static java.math.BigDecimal.ZERO; import static java.math.MathContext.DECIMAL64; import java.math.BigDecimal; public class VWapT extends Ticker { private static final long serialVersionUID = 1L; BigDecimal minPrice; BigDecimal maxPrice; BigDecimal avgPrice = ZERO; BigDecimal vwap = ZERO; transient BigDecimal totalVolume = ZERO; transient int count; VWapT(Trade trade) { super(trade); } void newTrade(Trade trade) { BigDecimal price = trade.price; BigDecimal volume = trade.volume; if (ZERO.equals(volume)) return; minPrice = (minPrice == null) ? price : minPrice.min(price); maxPrice = (maxPrice == null) ? price : maxPrice.max(price); avgPrice = avgPrice.add(price, DECIMAL64); totalVolume = totalVolume.add(volume, DECIMAL64); vwap = vwap.add(price.multiply(volume, DECIMAL64), DECIMAL64); count++; } VWapT complete() { if (count == 0) return null; vwap = vwap.divide(totalVolume, DECIMAL64); avgPrice = avgPrice.divide(new BigDecimal(count), DECIMAL64); return this; } public String toString() { return "VWAP: " + getTicker() + " vwap=" + vwap + " avgPrice=" + avgPrice + " minPrice=" + minPrice + " maxPrice=" + maxPrice; } }