package com.activequant.backtesting;
import java.io.IOException;
import org.apache.log4j.Logger;
import com.activequant.backtesting.reporting.BacktestStatistics;
import com.activequant.backtesting.reporting.HTMLReportGen;
import com.activequant.backtesting.reporting.PNLMonitor;
import com.activequant.domainmodel.AlgoConfig;
import com.activequant.domainmodel.backtesting.BacktestConfiguration;
import com.activequant.domainmodel.backtesting.SimulationReport;
import com.activequant.timeseries.TSContainer2;
import com.activequant.timeseries.TSContainerMethods;
/**
*
* @author GhostRider
*
*/
public abstract class AbstractBacktester {
protected PNLMonitor pnlMonitor;
protected OrderEventListener oelistener = new OrderEventListener();
protected BacktestConfiguration btConfig;
protected AlgoConfig[] algoConfigs;
protected BacktestStatistics bs;
protected String runId = "";
protected String templateFolder = "./src/main/resources/templates";
protected Logger log = Logger.getLogger(AbstractBacktester.class);
public AbstractBacktester(BacktestConfiguration btConfig){
this.btConfig = btConfig;
}
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;
}
public PNLMonitor getPnlMonitor() {
return pnlMonitor;
}
public void setPnlMonitor(PNLMonitor pnlMonitor) {
this.pnlMonitor = pnlMonitor;
}
public BacktestConfiguration getBtConfig() {
return btConfig;
}
public void setBtConfig(BacktestConfiguration btConfig) {
this.btConfig = btConfig;
}
public AlgoConfig[] getAlgoConfigs() {
return algoConfigs;
}
public void setAlgoConfigs(AlgoConfig[] algoConfigs) {
this.algoConfigs = algoConfigs;
}
public String getRunId() {
return runId;
}
public void setRunId(String runId) {
this.runId = runId;
}
}