package com.activequant.backtesting; import java.util.Map; import com.activequant.archive.MultiValueTimeSeriesIterator; import com.activequant.domainmodel.TimeStamp; import com.activequant.domainmodel.Tuple; import com.activequant.domainmodel.streaming.MarketDataEvent; import com.activequant.domainmodel.streaming.MarketDataSnapshot; import com.activequant.domainmodel.streaming.StreamEventIterator; import com.activequant.interfaces.archive.IArchiveReader; /** * * @author GhostRider * */ public class ArchiveStreamToMarketDataIterator extends StreamEventIterator<MarketDataEvent> { private String mdiId, tdiId; private MultiValueTimeSeriesIterator streamIterator; private double[] bid, ask, bidQ, askQ; private double quantityOverride = 0.0; private String bidQuantityKey = "BIDQUANTITY"; private String askQuantityKey = "ASKQUANTITY"; MarketDataSnapshot mds = new MarketDataSnapshot(); public ArchiveStreamToMarketDataIterator(String mdiId, TimeStamp startTime, TimeStamp endTime, IArchiveReader archiveReader) throws Exception { this.mdiId = mdiId; this.tdiId = mdiId; this.streamIterator = archiveReader.getMultiValueStream(mdiId, startTime, endTime); bid = new double[1]; ask = new double[1]; bidQ = new double[1]; askQ = new double[1]; } public ArchiveStreamToMarketDataIterator(String mdiId, String tdiId, TimeStamp startTime, TimeStamp endTime, IArchiveReader archiveReader) throws Exception { this.mdiId = mdiId; this.streamIterator = archiveReader.getMultiValueStream(mdiId, startTime, endTime); bid = new double[1]; ask = new double[1]; bidQ = new double[1]; askQ = new double[1]; this.tdiId = tdiId; } @Override public boolean hasNext() { return streamIterator.hasNext(); } @Override public MarketDataEvent next() { Tuple<TimeStamp, Map<String, Double>> valueMap = streamIterator.next(); if (valueMap.getB().containsKey("BID")) bid[0] = valueMap.getB().get("BID"); if (valueMap.getB().containsKey("ASK")) ask[0] = valueMap.getB().get("ASK"); if (valueMap.getB().containsKey(bidQuantityKey)) bidQ[0] = valueMap.getB().get(bidQuantityKey); if (valueMap.getB().containsKey(askQuantityKey)) askQ[0] = valueMap.getB().get(askQuantityKey); // if (quantityOverride != 0.0) { bidQ[0] = askQ[0] = quantityOverride; } mds.setMdiId(this.mdiId); mds.setTdiId(this.tdiId); mds.setAskPrices(ask); mds.setBidPrices(bid); mds.setAskSizes(askQ); mds.setBidSizes(bidQ); mds.setTimeStamp(valueMap.getA()); return mds; } public double getQuantityOverride() { return quantityOverride; } public void setQuantityOverride(double quantityOverride) { this.quantityOverride = quantityOverride; } public String getBidQuantityKey() { return bidQuantityKey; } public void setBidQuantityKey(String bidQuantityKey) { this.bidQuantityKey = bidQuantityKey; } public String getAskQuantityKey() { return askQuantityKey; } public void setAskQuantityKey(String askQuantityKey) { this.askQuantityKey = askQuantityKey; } }