001/* 002# Licensed Materials - Property of IBM 003# Copyright IBM Corp. 2015 004 */ 005package vwap; 006 007import static java.math.BigDecimal.ZERO; 008import static java.math.MathContext.DECIMAL64; 009 010import java.math.BigDecimal; 011 012public class VWapT extends Ticker { 013 private static final long serialVersionUID = 1L; 014 BigDecimal minPrice; 015 BigDecimal maxPrice; 016 BigDecimal avgPrice = ZERO; 017 BigDecimal vwap = ZERO; 018 019 transient BigDecimal totalVolume = ZERO; 020 transient int count; 021 022 VWapT(Trade trade) { 023 super(trade); 024 } 025 026 void newTrade(Trade trade) { 027 028 BigDecimal price = trade.price; 029 BigDecimal volume = trade.volume; 030 031 if (ZERO.equals(volume)) 032 return; 033 034 minPrice = (minPrice == null) ? price : minPrice.min(price); 035 maxPrice = (maxPrice == null) ? price : maxPrice.max(price); 036 avgPrice = avgPrice.add(price, DECIMAL64); 037 totalVolume = totalVolume.add(volume, DECIMAL64); 038 vwap = vwap.add(price.multiply(volume, DECIMAL64), DECIMAL64); 039 count++; 040 } 041 042 VWapT complete() { 043 if (count == 0) 044 return null; 045 vwap = vwap.divide(totalVolume, DECIMAL64); 046 avgPrice = avgPrice.divide(new BigDecimal(count), DECIMAL64); 047 return this; 048 } 049 050 public String toString() { 051 return "VWAP: " + getTicker() + " vwap=" + vwap + " avgPrice=" 052 + avgPrice + " minPrice=" + minPrice + " maxPrice=" + maxPrice; 053 } 054}