package com.activequant.backtesting.reporting; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.activequant.backtesting.OrderEventListener; import com.activequant.timeseries.DoubleColumn; import com.activequant.timeseries.TSContainer2; import com.activequant.timeseries.TSContainerMethods; /** * deprecated right from the start. Will become a persistent entity soon. * * @author GhostRider * */ public class BacktestStatistics { private String reportId; private List<String> instrumentIDs; final private Map<String, Object> statistics = new HashMap<String, Object>(); private TSContainerMethods methods = new TSContainerMethods(); public void calcPNLStats(TSContainer2 cumPnlSeries) { instrumentIDs = new ArrayList<String>(); for (int i = 0; i < cumPnlSeries.getNumColumns(); i++) { String header = cumPnlSeries.getColumnHeaders().get(i); instrumentIDs.add(header); Double maxVal = (Double) cumPnlSeries.getMax(header); String varName = header + ".MAXPNL"; statistics.put(varName, maxVal); DoubleColumn dc = (DoubleColumn) cumPnlSeries.getColumn(header); Double finalPnl = dc.get(dc.size() - 1); statistics.put(header + ".FINALPNL", finalPnl); Double[] drawDown = methods.maxDrawdown(cumPnlSeries); statistics.put(header+".MAXDRAWDOWN",drawDown[i]); } } public void setReturnStatistics(Map<String, Double> totalReturn) { for(String header : totalReturn.keySet()) { String varName = header + ".TOTALRETURN"; statistics.put(varName, totalReturn.get(header)); } } public void setStatisticsParameter(String name, Object value) { statistics.put(name, value); } public void calcPosStats(TSContainer2 positionSeries) { } public void calcRiskStats(TSContainer2 valuatedPositionSeries) { } public void populateOrderStats(OrderEventListener oel) { for (String id : instrumentIDs) { statistics.put(id + ".TOTALPLACED", oel.getPlaced().get(id)); statistics.put(id + ".TOTALFILLS", oel.getFills().get(id)); statistics.put(id + ".TOTALORDERUPDS", oel.getUpdates().get(id)); statistics.put(id + ".TOTALORDERCNCL", oel.getCancellations().get(id)); if (oel.getFills().get(id) != null) { Double finalPnl = (Double) statistics.get(id + ".FINALPNL"); statistics.put(id + ".PNLPERTRADE", finalPnl / oel.getFills().get(id)); } } } public Map<String, Object> getStatistics() { return statistics; } public String getReportId() { return reportId; } public void setReportId(String reportId) { this.reportId = reportId; } public List<String> getInstrumentIDs() { return instrumentIDs; } }