/* =========================================================== * TradeManager : a application to trade strategies for the Java(tm) platform * =========================================================== * * (C) Copyright 2011-2011, by Simon Allen and Contributors. * * Project Info: org.trade * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Oracle, Inc. * in the United States and other countries.] * * (C) Copyright 2011-2011, by Simon Allen and Contributors. * * Original Author: Simon Allen; * Contributor(s): -; * * Changes * ------- * */ package org.trade.broker; import static org.junit.Assert.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import javax.swing.Timer; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.trade.broker.client.Broker; import org.trade.core.factory.ClassFactory; import org.trade.core.properties.ConfigProperties; import org.trade.core.util.TradingCalendar; import org.trade.core.valuetype.Money; import org.trade.dictionary.valuetype.Action; import org.trade.dictionary.valuetype.OrderStatus; import org.trade.dictionary.valuetype.OrderType; import org.trade.persistent.dao.TradeOrder; import org.trade.persistent.dao.TradePosition; import org.trade.persistent.dao.Tradestrategy; import org.trade.persistent.dao.TradestrategyTest; import org.trade.strategy.data.IndicatorSeries; import org.trade.strategy.data.StrategyData; import org.trade.strategy.data.base.RegularTimePeriod; import org.trade.strategy.data.candle.CandleItem; import org.trade.strategy.data.movingaverage.MovingAverageItem; import org.trade.strategy.data.vwap.VwapItem; import org.trade.ui.TradeAppLoadConfig; import org.trade.ui.base.BasePanel; /** * Some tests for the {@link DataUtilities} class. * * @author Simon Allen * @version $Revision: 1.0 $ */ public class BrokerModelTest implements BrokerChangeListener { private final static Logger _log = LoggerFactory.getLogger(BrokerModelTest.class); @Rule public TestName name = new TestName(); private String symbol = "TEST"; private BrokerModel backTestbrokerModel; private BigDecimal price = new BigDecimal(108.85); private Tradestrategy tradestrategy = null; private static Integer port = null; private static String host = null; private static Integer clientId; private static Timer timer = null; private boolean connectionFailed = false; private static AtomicInteger timerRunning = null; private final static Object lockCoreUtilsTest = new Object(); private final static String _broker = BrokerModel._brokerTest; /** * Method setUpBeforeClass. * * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { TradeAppLoadConfig.loadAppProperties(); clientId = ConfigProperties.getPropAsInt("trade.tws.clientId"); port = new Integer(ConfigProperties.getPropAsString("trade.tws.port")); host = ConfigProperties.getPropAsString("trade.tws.host"); timer = new Timer(250, new ActionListener() { public void actionPerformed(ActionEvent e) { synchronized (lockCoreUtilsTest) { timerRunning.addAndGet(250); lockCoreUtilsTest.notifyAll(); } } }); } /** * Method setUp. * * @throws java.lang.Exception */ @Before public void setUp() throws Exception { try { this.tradestrategy = TradestrategyTest.getTestTradestrategy(symbol); backTestbrokerModel = (BrokerModel) ClassFactory.getServiceForInterface(_broker, BrokerModelTest.class); backTestbrokerModel.onConnect(host, port, clientId); assertNotNull("1", this.tradestrategy); backTestbrokerModel = (BrokerModel) ClassFactory.getServiceForInterface(_broker, BrokerModelTest.class); backTestbrokerModel.onConnect(host, port, clientId); timerRunning = new AtomicInteger(0); timer.start(); // Note isConnected always returns false for the // BackTestBrokerModel. synchronized (lockCoreUtilsTest) { while (backTestbrokerModel.isConnected() && !connectionFailed) { lockCoreUtilsTest.wait(); } } timer.stop(); if (backTestbrokerModel.isConnected()) _log.warn("Could not connect to TWS test will be ignored.", backTestbrokerModel.isConnected()); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } /** * Method tearDown. * * @throws java.lang.Exception */ @After public void tearDown() throws Exception { // Wait for the BackTestBroker to complete. These tests use the testing // client from org.trade.brokerclient that runs its own thread. Broker backTestBroker = backTestbrokerModel.getBackTestBroker(this.tradestrategy.getId()); if (null != backTestBroker) { // Ping the broker to see if its completed. Not isConnected always // returns false for BackTestBrokerModel. timer.start(); synchronized (lockCoreUtilsTest) { while (!backTestbrokerModel.isConnected() && !connectionFailed && !backTestBroker.isDone()) { lockCoreUtilsTest.wait(); } } timer.stop(); } if (backTestbrokerModel.isConnected()) backTestbrokerModel.onDisconnect(); TradestrategyTest.clearDBData(); } /** * Method tearDownAfterClass. * * @throws java.lang.Exception */ @AfterClass public static void tearDownAfterClass() throws Exception { } @Test public void testSubmitBuyOrder() { try { TradeOrder tradeOrder = new TradeOrder(this.tradestrategy, Action.BUY, OrderType.STPLMT, 100, price, price.add(new BigDecimal(0.02)), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder.setClientId(clientId); tradeOrder.setTransmit(new Boolean(true)); tradeOrder.setStatus(OrderStatus.UNSUBMIT); tradeOrder = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder); _log.info("IdTradeOrder: " + tradeOrder.getIdTradeOrder() + " OrderKey: " + tradeOrder.getOrderKey()); assertNotNull("1", tradeOrder); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testSubmitSellShortOrder() { try { _log.info("Symbol: " + this.tradestrategy.getContract().getSymbol()); TradeOrder tradeOrder = new TradeOrder(this.tradestrategy, Action.SELL, OrderType.STPLMT, 100, price.subtract(new BigDecimal(0.70)), price.subtract(new BigDecimal(0.73)), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder.setClientId(clientId); tradeOrder.setTransmit(new Boolean(true)); tradeOrder.setStatus(OrderStatus.UNSUBMIT); tradeOrder = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder); _log.info("IdTradeOrder: " + tradeOrder.getIdTradeOrder() + " OrderKey: " + tradeOrder.getOrderKey()); assertNotNull("1", tradeOrder.getIdTradeOrder()); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testSubmitComboOrder() { try { String ocaID = new String(Integer.toString((new BigDecimal(Math.random() * 1000000)).intValue())); TradeOrder tradeOrder = new TradeOrder(this.tradestrategy, Action.SELL, OrderType.LMT, 50, null, price.add(new BigDecimal(1.0)), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder.setClientId(clientId); tradeOrder.setOcaType(2); tradeOrder.setOcaGroupName(ocaID); tradeOrder.setTransmit(true); tradeOrder.setStatus(OrderStatus.UNSUBMIT); tradeOrder = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder); assertNotNull("1", tradeOrder.getIdTradeOrder()); TradeOrder tradeOrder1 = new TradeOrder(this.tradestrategy, Action.SELL, OrderType.LMT, 50, price.subtract(new BigDecimal(1.0)), price.add(new BigDecimal(2.0)), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder1.setClientId(clientId); tradeOrder1.setOcaType(2); tradeOrder1.setOcaGroupName(ocaID); tradeOrder1.setTransmit(false); tradeOrder1.setStatus(OrderStatus.UNSUBMIT); tradeOrder1 = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder1); assertNotNull("2", tradeOrder1.getIdTradeOrder()); TradeOrder tradeOrder2 = new TradeOrder(this.tradestrategy, Action.SELL, OrderType.STP, 50, price.subtract(new BigDecimal(1.0)), null, TradingCalendar.getDateTimeNowMarketTimeZone()); ocaID = ocaID + "abc"; tradeOrder2.setClientId(clientId); tradeOrder2.setOcaType(2); tradeOrder2.setOcaGroupName(ocaID); tradeOrder2.setTransmit(true); tradeOrder2.setStatus(OrderStatus.UNSUBMIT); tradeOrder2 = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder2); assertNotNull("3", tradeOrder2.getIdTradeOrder()); TradeOrder tradeOrder3 = new TradeOrder(this.tradestrategy, Action.SELL, OrderType.STP, 50, price.subtract(new BigDecimal(2.0)), null, TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder3.setClientId(clientId); tradeOrder3.setOcaType(2); tradeOrder3.setOcaGroupName(ocaID); tradeOrder3.setTransmit(false); tradeOrder3.setStatus(OrderStatus.UNSUBMIT); tradeOrder3 = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder3); assertNotNull("4", tradeOrder3.getIdTradeOrder()); _log.info("IdTradeOrder: " + tradeOrder3.getIdTradeOrder() + " OrderKey2: " + tradeOrder2.getOrderKey() + " OrderKey2 Price: " + tradeOrder2.getLimitPrice() + " OrderKey3: " + tradeOrder3.getOrderKey() + " OrderKey3 Price: " + tradeOrder3.getAuxPrice()); // Update the Stop price tradeOrder2.setAuxPrice(price.subtract(new BigDecimal(0.9))); tradeOrder2.setStatus(OrderStatus.UNSUBMIT); tradeOrder2 = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder2); tradeOrder3.setAuxPrice(price.subtract(new BigDecimal(0.9))); tradeOrder3.setStatus(OrderStatus.UNSUBMIT); tradeOrder3 = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder3); _log.info("IdTradeOrder: " + tradeOrder3.getIdTradeOrder() + " OrderKey2: " + tradeOrder2.getOrderKey() + " OrderKey2 Price: " + tradeOrder2.getLimitPrice() + " OrderKey3: " + tradeOrder3.getOrderKey() + " OrderKey3 Price: " + tradeOrder3.getAuxPrice()); tradeOrder3.setTransmit(new Boolean(true)); tradeOrder3.setStatus(OrderStatus.UNSUBMIT); tradeOrder3 = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder3); _log.info("IdTradeOrder: " + tradeOrder2.getIdTradeOrder() + " OrderKey: " + tradeOrder3.getOrderKey()); assertNotNull("5", tradeOrder3); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnBrokerData() { try { StrategyData.doDummyData(this.tradestrategy.getStrategyData().getCandleDataset().getSeries(0), tradestrategy.getTradingday(), tradestrategy.getChartDays(), tradestrategy.getBarSize(), true, 0); backTestbrokerModel.setBrokerDataOnly(true); backTestbrokerModel.onBrokerData(tradestrategy, tradestrategy.getTradingday().getClose()); assertFalse("1", this.tradestrategy.getStrategyData().getCandleDataset().getSeries(0).isEmpty()); IndicatorSeries candleseries = this.tradestrategy.getStrategyData().getCandleDataset().getSeries(0); IndicatorSeries sma1Series = this.tradestrategy.getStrategyData() .getIndicatorByType(IndicatorSeries.MovingAverageSeries).getSeries(0); IndicatorSeries sma2Series = this.tradestrategy.getStrategyData() .getIndicatorByType(IndicatorSeries.MovingAverageSeries).getSeries(1); IndicatorSeries vwapSeries = this.tradestrategy.getStrategyData() .getIndicatorByType(IndicatorSeries.VwapSeries).getSeries(0); IndicatorSeries heikinAshiSeries = this.tradestrategy.getStrategyData() .getIndicatorByType(IndicatorSeries.HeikinAshiSeries).getSeries(0); for (int i = 0; i < candleseries.getItemCount(); i++) { CandleItem candle = (CandleItem) candleseries.getDataItem(i); RegularTimePeriod period = candle.getPeriod(); CandleItem heikinAshiCandle = null; VwapItem vwap = null; MovingAverageItem sma1 = null; MovingAverageItem sma2 = null; int b = heikinAshiSeries.indexOf(period); if (b > -1) { heikinAshiCandle = (CandleItem) heikinAshiSeries.getDataItem(b); } int c = vwapSeries.indexOf(new Long(period.getMiddleMillisecond())); if (c > -1) { vwap = (VwapItem) vwapSeries.getDataItem(c); } int d = sma1Series.indexOf(new Long(period.getMiddleMillisecond())); if (d > -1) { sma1 = (MovingAverageItem) sma1Series.getDataItem(d); } int e = sma2Series.indexOf(new Long(period.getMiddleMillisecond())); if (e > -1) { sma2 = (MovingAverageItem) sma2Series.getDataItem(e); } if (null != candle) { _log.info(" Period Start: " + period.getStart() + " Period End: " + period.getEnd() + " H: " + new Money(candle.getHigh()) + " L: " + new Money(candle.getLow()) + " O: " + new Money(candle.getOpen()) + " C: " + new Money(candle.getClose()) + " Vol: " + new Money(candle.getVolume()) + " Vwap: " + new Money(candle.getVwap())); } if (null != heikinAshiCandle) { _log.info("HA Period Start: " + period.getStart() + " Period End: " + period.getEnd() + " HA H: " + new Money(heikinAshiCandle.getHigh()) + " HA L: " + new Money(heikinAshiCandle.getLow()) + " HA O: " + new Money(heikinAshiCandle.getOpen()) + " HA C: " + new Money(heikinAshiCandle.getClose()) + " HA Vol: " + new Money(heikinAshiCandle.getVolume()) + " HA Vwap: " + new Money(heikinAshiCandle.getVwap())); } if (null != vwap) { _log.info("Vwp Period Start: " + period + " Vwap: " + new Money(vwap.getY())); } if (null != sma1) { _log.info("S8 Period Start: " + period + " Sma 8: " + new Money(sma1.getY())); } if (null != sma2) { _log.info("S20 Period Start: " + period + " Sma 20: " + new Money(sma2.getY())); } } } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnConnect() { try { backTestbrokerModel.onConnect(host, port, clientId); if (_broker.equals(BrokerModel._brokerTest)) { assertFalse("1", backTestbrokerModel.isConnected()); } else { assertTrue("2", backTestbrokerModel.isConnected()); } } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testDisconnect() { try { backTestbrokerModel.onDisconnect(); if (_broker.equals(BrokerModel._brokerTest)) { assertFalse("1", backTestbrokerModel.isConnected()); } else { assertTrue("2", backTestbrokerModel.isConnected()); } } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testGetNextRequestId() { try { Integer id = backTestbrokerModel.getNextRequestId(); assertNotNull("1", id); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnSubscribeAccountUpdates() { try { backTestbrokerModel.onSubscribeAccountUpdates(true, tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber()); assertFalse("1", backTestbrokerModel .isAccountUpdatesRunning(tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber())); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnCancelAccountUpdates() { try { backTestbrokerModel.onSubscribeAccountUpdates(true, tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber()); backTestbrokerModel .onCancelAccountUpdates(tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber()); assertFalse("1", backTestbrokerModel .isAccountUpdatesRunning(tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber())); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnReqManagedAccount() { try { backTestbrokerModel.onReqManagedAccount(); assertFalse("1", backTestbrokerModel .isAccountUpdatesRunning(tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber())); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnReqAllOpenOrders() { try { backTestbrokerModel.onReqAllOpenOrders(); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnReqOpenOrders() { try { backTestbrokerModel.onReqOpenOrders(); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnReqRealTimeBars() { try { this.tradestrategy.getContract().addTradestrategy(this.tradestrategy); backTestbrokerModel.onReqRealTimeBars(this.tradestrategy.getContract(), false); assertFalse("1", backTestbrokerModel.isRealtimeBarsRunning(tradestrategy)); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnReqAllExecutions() { try { backTestbrokerModel.onReqAllExecutions(this.tradestrategy.getTradingday().getOpen()); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnReqExecutions() { try { backTestbrokerModel.onReqExecutions(this.tradestrategy, false); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testIsRealtimeBarsRunning() { try { backTestbrokerModel.onCancelRealtimeBars(this.tradestrategy); assertFalse("1", backTestbrokerModel.isRealtimeBarsRunning(this.tradestrategy)); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testIsAccountUpdatesRunning() { try { backTestbrokerModel .onCancelAccountUpdates(tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber()); assertFalse("1", backTestbrokerModel .isAccountUpdatesRunning(tradestrategy.getPortfolio().getIndividualAccount().getAccountNumber())); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testIsHistoricalDataRunningTradestrategy() { try { backTestbrokerModel.onCancelBrokerData(this.tradestrategy); assertFalse("1", backTestbrokerModel.isHistoricalDataRunning(this.tradestrategy)); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testIsHistoricalDataRunningContract() { try { backTestbrokerModel.onCancelBrokerData(this.tradestrategy.getContract()); assertFalse("1", backTestbrokerModel.isHistoricalDataRunning(this.tradestrategy.getContract())); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnCancelAllRealtimeData() { try { backTestbrokerModel.onCancelAllRealtimeData(); assertFalse("1", backTestbrokerModel.isRealtimeBarsRunning(this.tradestrategy)); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnCancelRealtimeBars() { try { backTestbrokerModel.onCancelRealtimeBars(this.tradestrategy); assertFalse("1", backTestbrokerModel.isRealtimeBarsRunning(this.tradestrategy)); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnCancelBrokerData() { try { backTestbrokerModel.onCancelBrokerData(this.tradestrategy); assertFalse("1", backTestbrokerModel.isHistoricalDataRunning(this.tradestrategy)); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnCancelContractDetails() { try { backTestbrokerModel.onCancelContractDetails(this.tradestrategy.getContract()); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnContractDetails() { try { backTestbrokerModel.onContractDetails(this.tradestrategy.getContract()); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testGetHistoricalData() { try { ConcurrentHashMap<Integer, Tradestrategy> historicalDataList = backTestbrokerModel.getHistoricalData(); assertNotNull("1", historicalDataList); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnPlaceOrder() { try { TradeOrder tradeOrder = new TradeOrder(this.tradestrategy, Action.BUY, OrderType.MKT, 1000, null, null, TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder); assertNotNull("1", tradeOrder); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testOnCancelOrder() { try { TradeOrder tradeOrder = new TradeOrder(this.tradestrategy, Action.BUY, OrderType.MKT, 1000, null, null, TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder = backTestbrokerModel.onPlaceOrder(this.tradestrategy.getContract(), tradeOrder); assertNotNull("1", tradeOrder); backTestbrokerModel.onCancelOrder(tradeOrder); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } @Test public void testIsBrokerDataOnly() { try { boolean result = backTestbrokerModel.isBrokerDataOnly(); assertFalse("1", result); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } } public void connectionOpened() { _log.info("Connection opened"); } public void connectionClosed(boolean forced) { connectionFailed = true; _log.info("Connection closed"); } /** * Method executionDetailsEnd. * * @param execDetails * ConcurrentHashMap<Integer,TradeOrder> */ public void executionDetailsEnd(ConcurrentHashMap<Integer, TradeOrder> execDetails) { } /** * Method historicalDataComplete. * * @param tradestrategy * Tradestrategy */ public void historicalDataComplete(Tradestrategy tradestrategy) { } /** * Method managedAccountsUpdated. * * @param accountNumber * String */ public void managedAccountsUpdated(String accountNumber) { } /** * Method fAAccountsCompleted. Notifies all registered listeners that the * brokerManagerModel has received all FA Accounts information. * */ public void fAAccountsCompleted() { } /** * Method updateAccountTime. * * @param accountNumber * String */ public void updateAccountTime(String accountNumber) { } /** * Method brokerError. * * @param brokerError * BrokerModelException */ public void brokerError(BrokerModelException ex) { if (502 == ex.getErrorCode()) { _log.info("TWS is not running test will not be run"); return; } if (ex.getErrorId() == 1) { _log.error("Error: " + ex.getErrorCode(), ex.getMessage(), ex); } else if (ex.getErrorId() == 2) { _log.warn("Warning: " + ex.getMessage(), BasePanel.WARNING); } else if (ex.getErrorId() == 3) { _log.info("Information: " + ex.getMessage(), BasePanel.INFORMATION); } else { _log.error("Unknown Error Id Code: " + ex.getErrorCode(), ex.getMessage(), ex); } } /** * Method tradeOrderFilled. * * @param tradeOrder * TradeOrder */ public void tradeOrderFilled(TradeOrder tradeOrder) { } /** * Method tradeOrderCancelled. * * @param tradeOrder * TradeOrder */ public void tradeOrderCancelled(TradeOrder tradeOrder) { } /** * Method tradeOrderStatusChanged. * * @param tradeOrder * TradeOrder */ public void tradeOrderStatusChanged(TradeOrder tradeOrder) { } /** * Method positionClosed. * * @param trade * Trade */ public void positionClosed(TradePosition trade) { } /** * Method openOrderEnd. * * @param openOrders * ConcurrentHashMap<Integer,TradeOrder> */ public void openOrderEnd(ConcurrentHashMap<Integer, TradeOrder> openOrders) { } }