@Test public void testAddRemoveTradePosition() { try { TradePosition instance = new TradePosition( this.tradestrategy.getContract(), TradingCalendar.getDateTimeNowMarketTimeZone(), Side.BOT); TradePosition tradePosition = aspectHome.persist(instance); assertNotNull("1", tradePosition.getIdTradePosition()); _log.info( "testAddTradePosition IdTradeStrategy: " + this.tradestrategy.getIdTradeStrategy() + "IdTradePosition: " + tradePosition.getIdTradePosition()); tradePositionHome.remove(tradePosition); _log.info("testDeleteTradePosition IdTradeStrategy: " + tradestrategy.getIdTradeStrategy()); tradePosition = tradePositionHome.findById(tradePosition.getIdTradePosition()); assertNull("2", tradePosition); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } }
@Test public void testAddTradeOrder() { try { String side = this.tradestrategy.getSide(); String action = Action.BUY; if (Side.SLD.equals(side)) { action = Action.SELL; } double risk = this.tradestrategy.getRiskAmount().doubleValue(); double stop = 0.20; BigDecimal price = new BigDecimal(20); int quantity = (int) ((int) risk / stop); ZonedDateTime createDate = this.tradestrategy.getTradingday().getOpen().plusMinutes(5); TradeOrder tradeOrder = new TradeOrder( this.tradestrategy, action, OrderType.STPLMT, quantity, price, price.add(new BigDecimal(0.004)), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder.setClientId(clientId); tradeOrder.setTransmit(true); tradeOrder.setStatus("SUBMITTED"); tradeOrder.validate(); tradeOrder = tradeOrderHome.persist(tradeOrder); assertNotNull("1", tradeOrder); _log.info("IdOrder: " + tradeOrder.getIdTradeOrder()); TradeOrder tradeOrder1 = new TradeOrder( this.tradestrategy, Action.SELL, OrderType.STP, quantity, price.subtract(new BigDecimal(1)), null, createDate); tradeOrder1.setAuxPrice(price.subtract(new BigDecimal(1))); tradeOrder1.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder1.setClientId(clientId); tradeOrder1.setTransmit(true); tradeOrder1.setStatus("SUBMITTED"); tradeOrder1.validate(); tradeOrder1 = tradeOrderHome.persist(tradeOrder1); assertNotNull("2", tradeOrder1); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } }
@Test public void testFindTradeOrderByMaxKey() { try { Integer orderKey = tradePersistentModel.findTradeOrderByMaxKey(); _log.info("Max Order key: " + orderKey); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } }
@Test public void testAddDetachedTradeOrder() { try { String side = this.tradestrategy.getSide(); String action = Action.BUY; if (Side.SLD.equals(side)) { action = Action.SELL; } TradeOrder tradeOrder = new TradeOrder( this.tradestrategy, action, OrderType.STPLMT, 100, new BigDecimal(20.20), new BigDecimal(20.23), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); // Save new order with detached trade tradeOrder = tradeOrderHome.persist(tradeOrder); Execution execution = new Execution(); execution.m_side = side; execution.m_time = TradingCalendar.getFormattedDate( TradingCalendar.getDateTimeNowMarketTimeZone(), "yyyyMMdd HH:mm:ss"); execution.m_exchange = "ISLAND"; execution.m_shares = tradeOrder.getQuantity(); execution.m_price = tradeOrder.getLimitPrice().doubleValue(); execution.m_avgPrice = tradeOrder.getLimitPrice().doubleValue(); execution.m_cumQty = tradeOrder.getQuantity(); execution.m_execId = "1234"; TradeOrderfill orderfill = new TradeOrderfill(); TWSBrokerModel.populateTradeOrderfill(execution, orderfill); orderfill.setTradeOrder(tradeOrder); tradeOrder.addTradeOrderfill(orderfill); // Save a detached order with a new order fill tradeOrder = tradeOrderHome.persist(tradeOrder); if (action.equals(Action.BUY)) { action = Action.SELL; } else { action = Action.BUY; } TradeOrder tradeOrder1 = new TradeOrder( this.tradestrategy, action, OrderType.LMT, 300, null, new BigDecimal(23.41), TradingCalendar.getDateTimeNowMarketTimeZone()); tradeOrder1.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder1 = tradeOrderHome.persist(tradeOrder1); Execution execution1 = new Execution(); execution1.m_side = side; execution1.m_time = TradingCalendar.getFormattedDate( TradingCalendar.getDateTimeNowMarketTimeZone(), "yyyyMMdd HH:mm:ss"); execution1.m_exchange = "ISLAND"; execution1.m_shares = tradeOrder1.getQuantity(); execution1.m_price = tradeOrder1.getLimitPrice().doubleValue(); execution1.m_avgPrice = tradeOrder1.getLimitPrice().doubleValue(); execution1.m_cumQty = tradeOrder1.getQuantity(); execution1.m_execId = "1234"; TradeOrderfill orderfill1 = new TradeOrderfill(); TWSBrokerModel.populateTradeOrderfill(execution1, orderfill1); orderfill1.setTradeOrder(tradeOrder1); tradeOrder1.addTradeOrderfill(orderfill1); tradeOrder1 = tradeOrderHome.persist(tradeOrder1); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } }
@Test public void testAddTradeOrderFill() { try { testAddTradeOrder(); boolean stopped = true; int minute = 25; for (TradeOrder tradeOrder : this.tradestrategy.getTradeOrders()) { tradeOrder = tradeOrderHome.findTradeOrderByKey(tradeOrder.getOrderKey()); minute = minute + 3; ZonedDateTime filledDate = this.tradestrategy.getTradingday().getOpen().plusMinutes(minute); if (tradeOrder.getIsOpenPosition()) { TradeOrderfill orderfill = new TradeOrderfill( tradeOrder, "Paper", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, "ISLAND", "1234", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, this.tradestrategy.getSide(), filledDate); tradeOrder.addTradeOrderfill(orderfill); TradeOrderfill orderfill1 = new TradeOrderfill( tradeOrder, "Paper", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, "ISLAND", "12345", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, this.tradestrategy.getSide(), filledDate.plusMinutes(3)); tradeOrder.addTradeOrderfill(orderfill1); tradeOrder.setIsFilled(true); tradeOrder.setFilledQuantity(tradeOrder.getQuantity()); tradeOrder.setStatus("FILLED"); tradeOrder.setFilledDate(filledDate.plusMinutes(3)); tradeOrder.setAverageFilledPrice(tradeOrder.getLimitPrice()); tradeOrder.setCommission(new BigDecimal(tradeOrder.getQuantity() * 0.005)); } else { if (stopped) { if (OrderType.STP.equals(tradeOrder.getOrderType())) { TradeOrderfill orderfill = new TradeOrderfill( tradeOrder, "Paper", tradeOrder.getAuxPrice(), tradeOrder.getQuantity(), "ISLAND", "12345", tradeOrder.getAuxPrice(), tradeOrder.getQuantity(), this.tradestrategy.getSide(), filledDate.plusMinutes(5)); tradeOrder.addTradeOrderfill(orderfill); tradeOrder.setIsFilled(true); tradeOrder.setStatus(OrderStatus.FILLED); tradeOrder.setAverageFilledPrice(tradeOrder.getAuxPrice()); tradeOrder.setFilledDate(filledDate.plusMinutes(5)); tradeOrder.setCommission(new BigDecimal(tradeOrder.getQuantity() * 0.005)); tradeOrder.setFilledQuantity(tradeOrder.getQuantity()); } else { tradeOrder.setStatus(OrderStatus.CANCELLED); } } else { if (OrderType.LMT.equals(tradeOrder.getOrderType())) { TradeOrderfill orderfill = new TradeOrderfill( tradeOrder, "Paper", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, "ISLAND", "12345", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, this.tradestrategy.getSide(), filledDate.plusMinutes(5)); tradeOrder.addTradeOrderfill(orderfill); TradeOrderfill orderfill1 = new TradeOrderfill( tradeOrder, "Paper", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, "ISLAND", "12345", tradeOrder.getLimitPrice(), tradeOrder.getQuantity() / 2, this.tradestrategy.getSide(), filledDate.plusMinutes(6)); orderfill1.setTradeOrder(tradeOrder); tradeOrder.addTradeOrderfill(orderfill1); tradeOrder.setIsFilled(true); tradeOrder.setStatus(OrderStatus.FILLED); tradeOrder.setFilledQuantity(tradeOrder.getQuantity()); tradeOrder.setFilledDate(filledDate.plusMinutes(15)); tradeOrder.setAverageFilledPrice(tradeOrder.getLimitPrice()); tradeOrder.setCommission(new BigDecimal(tradeOrder.getQuantity() * 0.005)); } else { tradeOrder.setStatus(OrderStatus.CANCELLED); } } } tradeOrder = tradeOrderHome.persist(tradeOrder); _log.info( "IdOrder: " + tradeOrder.getIdTradeOrder() + " Action:" + tradeOrder.getAction() + " OrderType:" + tradeOrder.getOrderType() + " Status:" + tradeOrder.getStatus() + " filledDate:" + filledDate); } } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } }
@Test public void testAddOpenStopTargetTradeOrder() { try { String side = this.tradestrategy.getSide(); String action = Action.BUY; if (Side.SLD.equals(side)) { action = Action.SELL; } double risk = this.tradestrategy.getRiskAmount().doubleValue(); double stop = 0.20; BigDecimal price = new BigDecimal(20); int quantity = (int) ((int) risk / stop); ZonedDateTime createDate = this.tradestrategy.getTradingday().getOpen().plusMinutes(5); TradeOrder tradeOrder1 = new TradeOrder( this.tradestrategy, action, OrderType.STPLMT, quantity, price, price, createDate); tradeOrder1.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder1.setClientId(clientId); tradeOrder1.setOcaGroupName(""); tradeOrder1.setTransmit(true); tradeOrder1.setStatus("SUBMITTED"); tradeOrder1.validate(); tradeOrder1 = tradeOrderHome.persist(tradeOrder1); int buySellMultiplier = 1; if (action.equals(Action.BUY)) { action = Action.SELL; } else { action = Action.BUY; buySellMultiplier = -1; } TradeOrder tradeOrder2 = new TradeOrder( this.tradestrategy, action, OrderType.LMT, quantity / 2, null, price.add(new BigDecimal((stop * 3) * buySellMultiplier)), createDate); tradeOrder2.setClientId(clientId); tradeOrder2.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder2.setOcaType(2); tradeOrder2.setOcaGroupName(this.tradestrategy.getIdTradeStrategy() + "q1w2e3"); tradeOrder2.setTransmit(true); tradeOrder2.setStatus("SUBMITTED"); tradeOrder2.validate(); tradeOrder2 = tradeOrderHome.persist(tradeOrder2); TradeOrder tradeOrder3 = new TradeOrder( this.tradestrategy, action, OrderType.LMT, quantity / 2, null, price.add(new BigDecimal((stop * 4) * buySellMultiplier)), createDate); tradeOrder3.setClientId(clientId); tradeOrder3.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder3.setOcaType(2); tradeOrder3.setOcaGroupName(this.tradestrategy.getIdTradeStrategy() + "q1w2e3"); tradeOrder3.setTransmit(true); tradeOrder3.setStatus("SUBMITTED"); tradeOrder3.validate(); tradeOrder3 = tradeOrderHome.persist(tradeOrder3); TradeOrder tradeOrder4 = new TradeOrder( this.tradestrategy, action, OrderType.STP, quantity, price.add(new BigDecimal(stop * buySellMultiplier * -1)), null, createDate); tradeOrder4.setLimitPrice(new BigDecimal(0)); tradeOrder4.setAuxPrice(price.add(new BigDecimal(stop * buySellMultiplier * -1))); tradeOrder4.setClientId(clientId); tradeOrder4.setOrderKey((new BigDecimal((Math.random() * 1000000))).intValue()); tradeOrder4.setOcaType(2); tradeOrder4.setOcaGroupName(this.tradestrategy.getIdTradeStrategy() + "q1w2e3"); tradeOrder4.setTransmit(true); tradeOrder4.setStatus("SUBMITTED"); tradeOrder4.validate(); tradeOrder4 = tradeOrderHome.persist(tradeOrder4); _log.info("IdOrder: " + tradeOrder1.getIdTradeOrder()); } catch (Exception | AssertionError ex) { String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage(); _log.error(msg); fail(msg); } }