@Override public void actionPerformed(ActionEvent e) { try { stop(); } catch (Exception ex) { ex.printStackTrace(); } } });
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 void generateReport(String localTargetFolder, String localTemplateFolder) throws IOException { HTMLReportGen h = new HTMLReportGen(localTargetFolder, localTemplateFolder); if(oelistener.getFillEvents().size()>0){ h.genReport(algoConfigs, oelistener, pnlMonitor, btConfig); } else{ log.warn("No trades were generated!"); System.out.println("No trades were generated."); } }
public SimulationReport generateReport(String targetFolder) throws IOException { SimulationReport sr = new SimulationReport(); TSContainerMethods tcm = new TSContainerMethods(); TSContainer2 pnlContainer = pnlMonitor.getCumulatedTSContainer(); tcm.overwriteNull(pnlContainer); tcm.overwriteNull(pnlContainer, 0.0); sr.setPnlSeries(pnlContainer); // HTMLReportGen h = new HTMLReportGen(targetFolder, templateFolder); if(oelistener.getFillEvents().size()>0){ h.genReport(algoConfigs, oelistener, pnlMonitor, btConfig); } else{ log.warn("No trades were generated!"); System.out.println("No trades were generated."); } // fill the sr return sr; }
pnlMonitor = new PNLMonitor(transportFactory); super.setPnlMonitor(pnlMonitor); fs = new FastStreamer(streamIters); jframe.toFront(); pnlMonitor.showLiveChart();
@Override public void eventFired(OrderEvent event) { if (event instanceof OrderFillEvent) { OrderFillEvent ofe = (OrderFillEvent) event; if(ofe.getFillAmount()!=0.0)fillEvents.add(ofe); trackFill(ofe.getOptionalInstId(), ofe.getTimeStamp(), ofe.getFillAmount() * (ofe.getSide().equals(OrderSide.BUY) ? 1.0 : -1.0), ofe.getFillPrice()); countFill(ofe.getOptionalInstId()); } else if (event instanceof OrderCancelledEvent) { countCancellation(((OrderCancelledEvent) event).getOptionalInstId()); } else if (event instanceof OrderAcceptedEvent) { countAccepted(((OrderAcceptedEvent) event).getOptionalInstId()); } if(feeCalculator != null) feeCalculator.track(event); }
@SuppressWarnings("unchecked") @Override public StreamEventIterator<? extends TimeStreamEvent>[] getStreamIterators(BacktestConfiguration btConfig) throws Exception { List<StreamEventIterator<? extends TimeStreamEvent>> tempList = new ArrayList<StreamEventIterator<? extends TimeStreamEvent>>(); // // for each MDI, instantiate replay stream. TimeFrame ohlcResolution = TimeFrame.HOURS_1; // for (int i = 0; i < btConfig.getMdis().length; i++) { ArchiveStreamToMarketDataIterator a1 = new ArchiveStreamToMarketDataIterator(btConfig.getMdis()[i], btConfig.getTdis()[i], btConfig.getTimeSetup().dataReplayStart, btConfig.getTimeSetup().dataReplayEnd, archiveFactory.getReader(TimeFrame.RAW)); a1.setQuantityOverride(10000000.0); tempList.add(a1); // ArchiveStreamToOHLCIterator astoi = new ArchiveStreamToOHLCIterator(btConfig.getMdis()[i], ohlcResolution, btConfig.getTimeSetup().dataReplayStart, btConfig.getTimeSetup().dataReplayEnd, archiveFactory.getReader(ohlcResolution)); // tempList.add(astoi); } // return tempList.toArray(new StreamEventIterator[] {}); }
@Override public MarketDataEvent next() { Tuple<TimeStamp, Double> valueMap = streamIterator.next(); // fixing ... bid = new double[1]; ask = new double[1]; bidQ = new double[1]; askQ = new double[1]; // take the value and create a synthetic bid and ask out of it. ask[0] = valueMap.getB()+this.getAskOffset(); bid[0] = valueMap.getB()+this.getBidOffset(); askQ[0] = this.getAskQuantity(); bidQ[0] = this.getBidQuantity(); MarketDataSnapshot mds = new MarketDataSnapshot(); 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; }
VisualBacktester bt = new VisualBacktester(archiveFactory, transport, idf, virtEx, new ITradingSystem[]{tradSys}, streamIters, btConfig, false); bt.setSysExit(false); bt.execute(); sr = bt.stop();
while (fs.moreDataInPipe() && (tickPlayAmount > 0 || !interactive)) { StreamEvent se = fs.getOneFromPipes(); ETransportType transportType = se.getEventType(); if (!fs.moreDataInPipe()) runFlag = false;
Double currentPos = getCurrentPos(tid); Double avgPx = getAvgPx(tid); conversionRate = 1.0; } else { conversionRate = getConversionRate(base, quotee, execPrice);
public static void main(String[] args) throws Exception { BacktestConfiguration bt = new BacktestConfiguration(); bt.setMdis(new String[]{"CSV.SOY"}); bt.setTdis(new String[]{"CSV.SOY"}); bt.setDate8Time6Start(20120101000000L); bt.setDate8Time6End(20120501000000L); new ParallelizedBacktester("backtest1.xml", bt, new TimeRangeSplitterWeekly()); }
public void backtest(BacktestConfiguration bc, ITradingSystem[] its, List<StreamEventIterator> listOfStreams) throws Exception { // // // ApplicationContext appContext = new ClassPathXmlApplicationContext("fwspring.xml"); IDaoFactory idf = (IDaoFactory) appContext.getBean("ibatisDao"); IArchiveFactory archiveFactory = (IArchiveFactory) appContext.getBean("archiveFactory"); //d // // initialize transport layer and VirtEX ITransportFactory transport = new InMemoryTransportFactory(); VirtualExchange virtEx = new VirtualExchange(transport); // // // initialize the backtester VisualBacktester bt = new VisualBacktester(archiveFactory, transport, idf, virtEx, its, listOfStreams.toArray(new StreamEventIterator[] {}), bc); // set the backtest config, for later reporting. // // // ok, now that we have all initialized ... execute the backtest. bt.execute(); // }
public SimulationReport stop() throws Exception { List<AlgoConfig> algoConfigs = new ArrayList<AlgoConfig>(); for (ITradingSystem s : tradingSystems) { s.stop(); algoConfigs.add(s.getAlgoConfig()); } super.setAlgoConfigs(algoConfigs.toArray(new AlgoConfig[] {})); TimeMeasurement.stop("BACKTEST"); long difference = TimeMeasurement.getRuntime("BACKTEST"); log.info("Replayed " + eventCount + " events in " + difference + "ms. That's " + (eventCount / (double) difference) + " events/ms"); runFlag = false; // generate the report. SimulationReport sr = super.generateReport(env.getWorkingDirectory()); // GlobalVizEvents.getInstance().getEvent().fire("EXIT"); if(sysExit)System.exit(0); return sr; }
public FastStreamer( StreamEventIterator<StreamEvent>[] it) { this.iterators = it; // initialize also the headstart data. containers = new FastStreamEventContainer[it.length]; for (int i = 0; i < it.length; i++) { if (it[i].hasNext()) { StreamEvent payload = it[i].next(); if(containers[i] == null) containers[i] = new FastStreamEventContainer(i); FastStreamEventContainer fs = containers[i]; fs.streamEvent=payload; fastQueue.add(fs); } } // sort all events once. Collections.sort(fastQueue); }
public StreamMerger( TimeSeriesIterator[] it) { this.iterators = it; // initialize also the headstart data. for (int i = 0; i < it.length; i++) { if (it[i].hasNext()) { Tuple<TimeStamp,Double> payload = it[i].next(); if(payload == null)break; if(payload.getA()==null || payload.getB()==null)break; FastStreamEventContainer fs = new FastStreamEventContainer(i, payload); fastQueue.add(fs); } } }
@Override public OHLCV next() { String[] parts = line.split(","); OHLCV o = new OHLCV(); o.setMdiId(mdiId); o.setOpen(Double.parseDouble(parts[1])); o.setHigh(Double.parseDouble(parts[2])); o.setLow(Double.parseDouble(parts[3])); o.setClose(Double.parseDouble(parts[4])); o.setVolume(0.0); o.setResolutionInSeconds(resInSeconds); // shift it, so that it looks as if it emitted at the end of a candle. try { if(isShiftTime()) o.setTimeStamp(new TimeStamp(sdf.parse(parts[0]).getTime() * 1000 * 1000 + offset)); else o.setTimeStamp(new TimeStamp(sdf.parse(parts[0]).getTime() * 1000 * 1000 )); line = br.readLine(); } catch (Exception e) { throw new RuntimeException(e); } return o; }
localConfig.setTimeSetup(chunk); BacktestJob job = new BacktestJob(aqAppContextSpringFile, localConfig); Future<SimulationReport> f = threadPool.submit(job); futures.add(f);
tempList.add(new FieldToBidAskConverterStream(btCfg.getMdis()[0], btCfg.getTdis()[0], "PX_SETTLE", startTime, endTime, new CsvArchiveReaderFormat1("./src/test/resources/sampledata/soybean_future_rolled.csv")));
/** * Fetches the next stream event from the pipe. * @return */ public StreamEvent getOneFromPipes() { StreamEvent ret = null; if(!fastQueue.isEmpty()){ FastStreamEventContainer event = fastQueue.get(0); if(event==null)return null; fastQueue.remove(0); ret = event.streamEvent; if(iterators[event.internalStreamId].hasNext()) { StreamEvent payload = iterators[event.internalStreamId].next(); FastStreamEventContainer newEvent = new FastStreamEventContainer(event.internalStreamId); newEvent.streamEvent=payload; fastQueue.add(newEvent); Collections.sort(fastQueue); // // dumpQueue(); } // log.info(ret.getTimeStamp().getNanoseconds() + " - " + ret.getTimeStamp().getDate() + " - " + ret.toString()); } return ret; }