package jtrade.strategy;
import java.io.File;
import jtrade.Recorder;
import jtrade.Symbol;
import jtrade.marketfeed.BarFileMarketFeed;
import jtrade.marketfeed.TickFileMarketFeed;
import jtrade.trader.DummyTrader;
import jtrade.util.Configurable;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StrategySim implements Runnable {
private static final Logger logger = LoggerFactory.getLogger(StrategySim.class);
private Strategy strategy;
private boolean cancel;
private boolean done;
public StrategySim(Strategy strategy, File dataDir, DateTime fromDate, DateTime toDate, boolean useTickData, int barSizeSeconds, Symbol... symbols) {
this.strategy = strategy;
if (barSizeSeconds <= 0) {
this.strategy.setMarketFeed(new TickFileMarketFeed(dataDir, fromDate, toDate, symbols));
} else {
this.strategy.setMarketFeed(new BarFileMarketFeed(dataDir, fromDate, toDate, useTickData, barSizeSeconds, symbols));
}
strategy.setTrader(new DummyTrader(strategy.getMarketFeed()));
strategy.setRecorder(new Recorder() {
@Override
public void record(String name, DateTime dateTime, boolean autoScale, double... value) {
}
@Override
public void record(String name, DateTime dateTime, double... value) {
}
@Override
public void plot() {
}
});
}
public boolean isDone() {
return done;
}
public boolean isCancelled() {
return cancel;
}
public void cancel() {
cancel = true;
}
@Override
public void run() {
try {
logger.info("Initializing {} with config {}", strategy.getClass().getSimpleName(), Configurable.getConfiguration(strategy));
strategy.init();
strategy.getTrader().connect();
strategy.getMarketFeed().connect();
while (strategy.getMarketFeed().isConnected() && strategy.getTrader().isConnected() && !cancel) {
Thread.sleep(100);
}
strategy.destroy();
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
done = true;
strategy.getTrader().disconnect();
strategy.getMarketFeed().disconnect();
}
}
}