@Test
public void simpleGainListenerTest() {
// validates commands and returns hard coded (canned) responses
DynamicSimulationAdapter simulationAdapter = new DynamicSimulationAdapter(false);
String password = "P455w0rd";
String eMail = "someone@somewhere.com";
Portfolio portfolio = new SimplePortfolioFactory().createPortfolio(new BigDecimal("10000"));
BigDecimal commission = new BigDecimal("10.00");
Integer systemId = simulationAdapter.createSystem("first system",password,portfolio,commission);
simulationAdapter.subscribe(eMail,systemId,password);
C2ServiceFactory factory = new C2ServiceFactory(simulationAdapter);
C2EntryService sentryService = factory.signalEntryService(password, systemId, eMail);
long timeStep = 60000l*60l*24l;
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
PrintStream printStream = new PrintStream(baos);
GainListener listener = new SimpleGainListener(printStream);
long start = 0;
long period = timeStep;
simulationAdapter.addGainListener(start,period,listener);
BigDecimal stopLoss = new BigDecimal("20.50");
BigDecimal profitTarget = new BigDecimal("120.50");
assertEquals(0, portfolio.position("msft").quantity().intValue());
Response openResponse = sentryService.stockSignal(ActionForStock.BuyToOpen)
.marketOrder().quantity(10).symbol("msft")
.stopLoss(stopLoss).profitTarget(profitTarget)
.duration(Duration.GoodTilCancel).send();
long openTime = 0l;
long closeTime = openTime+timeStep;
BigDecimal closePrice = new BigDecimal("160.86");
BigDecimal lowPrice = new BigDecimal("80");
BigDecimal highPrice = new BigDecimal("100");
DynamicSimulationMockDataProvider dataProvider = new DynamicSimulationMockDataProvider(
openTime,lowPrice,highPrice,lowPrice,highPrice,closeTime);
simulationAdapter.tick(dataProvider, sentryService);
assertEquals(10, portfolio.position("msft").quantity().intValue());
dataProvider = dataProvider.incTime(timeStep, new BigDecimal("22"));
simulationAdapter.tick(dataProvider, sentryService);
assertEquals(10, portfolio.position("msft").quantity().intValue());
dataProvider = dataProvider.incTime(timeStep,new BigDecimal("10"));
simulationAdapter.tick(dataProvider, sentryService);
simulationAdapter.awaitGainListeners();
//results
System.out.println(baos.toString());