/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.core.ats.simulation;
import java.util.Date;
import junit.framework.TestCase;
import org.eclipsetrader.core.feed.FeedIdentifier;
import org.eclipsetrader.core.feed.PricingEnvironment;
import org.eclipsetrader.core.feed.Trade;
import org.eclipsetrader.core.instruments.ISecurity;
import org.eclipsetrader.core.instruments.Security;
import org.eclipsetrader.core.trading.IOrderMonitor;
import org.eclipsetrader.core.trading.IOrderSide;
import org.eclipsetrader.core.trading.IOrderStatus;
import org.eclipsetrader.core.trading.IOrderType;
import org.eclipsetrader.core.trading.Order;
public class BrokerTest extends TestCase {
ISecurity security;
PricingEnvironment pricingEnvironment;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
security = new Security("TEST", null);
pricingEnvironment = new PricingEnvironment();
}
public void testPrepareOrder() throws Exception {
Broker broker = new Broker(pricingEnvironment);
IOrderMonitor monitor = broker.prepareOrder(new Order(null, IOrderSide.Buy, new Security("Test", new FeedIdentifier("TEST", null)), 100L));
assertNull(monitor.getId());
assertEquals(IOrderStatus.New, monitor.getStatus());
}
public void testSubmitPreparedOrder() throws Exception {
Broker broker = new Broker(pricingEnvironment);
IOrderMonitor monitor = broker.prepareOrder(new Order(null, IOrderSide.Buy, new Security("Test", new FeedIdentifier("TEST", null)), 100L));
monitor.submit();
assertNotNull(monitor.getId());
assertEquals(IOrderStatus.PendingNew, monitor.getStatus());
}
public void testProcessMarketOrder() throws Exception {
Broker broker = new Broker(pricingEnvironment);
Security security = new Security("Test", new FeedIdentifier("TEST", null));
IOrderMonitor monitor = broker.prepareOrder(new Order(null, IOrderSide.Buy, security, 100L));
monitor.submit();
broker.processTrade(security, new Trade(new Date(), 10.0, 100L, null));
assertEquals(new Long(100), monitor.getFilledQuantity());
assertEquals(new Double(10.0), monitor.getAveragePrice());
assertEquals(IOrderStatus.Filled, monitor.getStatus());
}
public void testProcessLimitOrder() throws Exception {
Broker broker = new Broker(pricingEnvironment);
Security security = new Security("Test", new FeedIdentifier("TEST", null));
IOrderMonitor monitor = broker.prepareOrder(new Order(null, IOrderType.Limit, IOrderSide.Buy, security, 100L, 10.0, null));
monitor.submit();
broker.processTrade(security, new Trade(new Date(), 11.0, 100L, null));
assertNull(monitor.getFilledQuantity());
assertNull(monitor.getAveragePrice());
assertEquals(IOrderStatus.PendingNew, monitor.getStatus());
broker.processTrade(security, new Trade(new Date(), 10.0, 100L, null));
assertEquals(new Long(100), monitor.getFilledQuantity());
assertEquals(new Double(10.0), monitor.getAveragePrice());
assertEquals(IOrderStatus.Filled, monitor.getStatus());
}
public void testBuyAtBetterPrice() throws Exception {
Broker broker = new Broker(pricingEnvironment);
Security security = new Security("Test", new FeedIdentifier("TEST", null));
IOrderMonitor monitor = broker.prepareOrder(new Order(null, IOrderType.Limit, IOrderSide.Buy, security, 100L, 10.0, null));
monitor.submit();
broker.processTrade(security, new Trade(new Date(), 9.0, 200L, null));
assertEquals(new Long(100), monitor.getFilledQuantity());
assertEquals(new Double(9.0), monitor.getAveragePrice());
assertEquals(IOrderStatus.Filled, monitor.getStatus());
}
public void testSellAtBetterPrice() throws Exception {
Broker broker = new Broker(pricingEnvironment);
Security security = new Security("Test", new FeedIdentifier("TEST", null));
IOrderMonitor monitor = broker.prepareOrder(new Order(null, IOrderType.Limit, IOrderSide.Sell, security, 100L, 10.0, null));
monitor.submit();
broker.processTrade(security, new Trade(new Date(), 11.0, 200L, null));
assertEquals(new Long(100), monitor.getFilledQuantity());
assertEquals(new Double(11.0), monitor.getAveragePrice());
assertEquals(IOrderStatus.Filled, monitor.getStatus());
}
}