import java.math.BigDecimal; import org.marketcetera.strategy.java.Strategy; import org.marketcetera.trade.ExecutionReport; import org.marketcetera.trade.Factory; import org.marketcetera.trade.Equity; import org.marketcetera.trade.OrderID; import org.marketcetera.trade.OrderSingle; import org.marketcetera.trade.OrderType; import org.marketcetera.trade.Side; import org.marketcetera.trade.TimeInForce; /* $License$ */ /** * Tests the Strategy API open order tracker. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: OrderRetention.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ public class OrderRetention extends Strategy { /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onStart() */ @Override public void onStart() { setProperty("executionReportCounter", String.valueOf(0)); setProperty("orderIDs", ""); int ordersToSubmit = Integer.parseInt(getParameter("ordersToSubmit")); for(int i=0;i<ordersToSubmit;i++) { generateAndSubmitOrder(); } } /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onExecutionReport(org.marketcetera.trade.ExecutionReport) */ @Override public void onExecutionReport(ExecutionReport inExecutionReport) { // register this execution report along with its value setProperty(inExecutionReport.getOrderID().getValue(), inExecutionReport.toString()); // increment the execution report counter setProperty("executionReportCounter", String.valueOf(++executionReportCounter)); } /** * Generates and submits an <code>OrderSingle</code>. */ private void generateAndSubmitOrder() { OrderSingle order = Factory.getInstance().createOrderSingle(); order.setOrderType(OrderType.Limit); order.setPrice(BigDecimal.ONE); order.setQuantity(BigDecimal.TEN); order.setSide(Side.Buy); order.setInstrument(new Equity("METC")); order.setTimeInForce(TimeInForce.GoodTillCancel); if(send(order)) { recordOrderID(order.getOrderID()); } } /** * Records the given <code>OrderID</code> in a manner * expected by the unit tests. * * @param inOrderID an <code>OrderID</code> value */ private void recordOrderID(OrderID inOrderID) { String currentOrderIDList = getProperty("orderIDs"); currentOrderIDList += "," + inOrderID.getValue(); setProperty("orderIDs", currentOrderIDList); } /** * records the total number of execution reports received */ private int executionReportCounter = 0; }