/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. 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: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.ib; import com.ib.client.Order; import com.quantcomponents.algo.IOrder; import com.quantcomponents.algo.OrderBean; import com.quantcomponents.core.model.IContract; import com.quantcomponents.core.model.OrderSide; import com.quantcomponents.core.model.OrderType; public class IBOrder implements IOrder { private final Order iBOrder; private final IBConstantTranslator constantTranslator; private IContract contract; public IBOrder(IContract contract, Order iBOrder, IBConstantTranslator constantTranslator) { this.contract = contract; this.iBOrder = iBOrder; this.constantTranslator = constantTranslator; } public IBOrder(IContract contract, IBConstantTranslator constantTranslator) { this(contract, new Order(), constantTranslator); } public static Order toIBOrder(IOrder order, IBConstantTranslator constantTranslator) { if (order instanceof IBOrder) { return ((IBOrder) order).iBOrder; } else { IBOrder iBOrder = new IBOrder(null, new Order(), constantTranslator); iBOrder.setAmount(order.getAmount()); iBOrder.setSide(order.getSide()); iBOrder.setType(order.getType()); iBOrder.setAuxPrice(iBOrder.getAuxPrice()); if (OrderType.LIMIT.equals(iBOrder.getType())) { iBOrder.setLimitPrice(order.getLimitPrice()); } return iBOrder.iBOrder; } } @Override public String getId() { return Integer.toString(iBOrder.m_orderId); } protected void setId(String id) { iBOrder.m_orderId = Integer.valueOf(id); } @Override public IContract getContract() { return contract; } public void setContract(IContract contract) { this.contract = contract; } @Override public OrderSide getSide() { return constantTranslator.getOrderSide(iBOrder.m_action); } public void setSide(OrderSide side) { if (side == null) { iBOrder.m_action = null; } else { iBOrder.m_action = constantTranslator.getCode(side); } } public void setOCAGroup(String ocaGroup) { iBOrder.m_ocaGroup = ocaGroup; } @Override public OrderType getType() { return constantTranslator.getOrderType(iBOrder.m_orderType); } public void setType(OrderType type) { if (type == null) { iBOrder.m_orderType = null; } else { iBOrder.m_orderType = constantTranslator.getCode(type); } } @Override public int getAmount() { return iBOrder.m_totalQuantity; } public void setAmount(int amount) { iBOrder.m_totalQuantity = amount; } @Override public Double getLimitPrice() { if (OrderType.LIMIT.equals(getType())) { return iBOrder.m_lmtPrice; } else { return null; } } public void setLimitPrice(double limitPrice) { if (OrderType.LIMIT.equals(getType())) { iBOrder.m_lmtPrice = limitPrice; } else { throw new IllegalArgumentException("Limit price can only be set on a LIMIT order"); } } @Override public Double getAuxPrice() { return iBOrder.m_auxPrice; } public void setAuxPrice(double auxPrice) { iBOrder.m_auxPrice = auxPrice; } @Override public String toString() { return OrderBean.stringRepr(this); } }