/*******************************************************************************
* 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 java.util.TimeZone;
import com.quantcomponents.core.model.BarSize;
import com.quantcomponents.core.model.DataType;
import com.quantcomponents.core.model.IConstantTranslator;
import com.quantcomponents.core.model.IdentifierType;
import com.quantcomponents.core.model.OptionRight;
import com.quantcomponents.core.model.OrderSide;
import com.quantcomponents.core.model.OrderType;
import com.quantcomponents.core.model.SecurityType;
import com.quantcomponents.core.model.UnitOfTime;
import com.quantcomponents.core.utils.LangUtils;
public class IBConstantTranslator implements IConstantTranslator {
private static final BarSize[] BAR_SIZE_CONSTANTS = new BarSize[] { BarSize.ONE_SEC, BarSize.FIVE_SECS, BarSize.TEN_SECS, BarSize.FIFTEEN_SECS, BarSize.THIRTY_SECS, BarSize.ONE_MIN, BarSize.TWO_MINS, BarSize.THREE_MINS, BarSize.FIVE_MINS, BarSize.TEN_MINS, BarSize.FIFTEEN_MINS, BarSize.TWENTY_MINS, BarSize.THIRTY_MINS, BarSize.ONE_HOUR, BarSize.FOUR_HOURS, BarSize.ONE_DAY};
private static final String[] BAR_SIZE_CODES = new String[] {"1 secs","5 secs","10 secs","15 secs","30 secs","1 min","2 mins","3 mins","5 mins","10 mins","15 mins","20 mins","30 mins","1 hour","4 hours","1 day"};
private static final UnitOfTime[] TIME_UNIT_CONSTANTS = new UnitOfTime[] {UnitOfTime.SECOND,UnitOfTime.DAY,UnitOfTime.WEEK,UnitOfTime.MONTH,UnitOfTime.YEAR};
private static final String[] TIME_UNIT_CODES = new String[] {"S","D","W","M","Y"};
@Override
public BarSize getBarSize(String code) {
return BAR_SIZE_CONSTANTS[LangUtils.indexInArray(BAR_SIZE_CODES, code)];
}
@Override
public String getCode(BarSize barSize) {
return BAR_SIZE_CODES[LangUtils.indexInArray(BAR_SIZE_CONSTANTS, barSize)];
}
@Override
public DataType getDataType(String code) {
return DataType.valueOf(code);
}
@Override
public String getCode(DataType dataType) {
return dataType.name();
}
@Override
public UnitOfTime getUnitOfTime(String code) {
return TIME_UNIT_CONSTANTS[LangUtils.indexInArray(TIME_UNIT_CODES, code)];
}
@Override
public String getCode(UnitOfTime unitOfTime) {
return TIME_UNIT_CODES[LangUtils.indexInArray(TIME_UNIT_CONSTANTS, unitOfTime)];
}
@Override
public SecurityType getSecurityType(String code) {
return SecurityType.valueOf(code);
}
@Override
public String getCode(SecurityType securityType) {
return securityType.name();
}
@Override
public OptionRight getOptionRight(String code) {
if ("C".equals(code)) {
return OptionRight.CALL;
} else if ("P".equals(code)) {
return OptionRight.PUT;
} else
return null;
}
@Override
public String getCode(OptionRight optionRight) {
return OptionRight.CALL.equals(optionRight) ? "C" : "P";
}
@Override
public IdentifierType getIdentifierType(String code) {
return IdentifierType.valueOf(code);
}
@Override
public String getCode(IdentifierType identifierType) {
return identifierType.name();
}
@Override
public OrderSide getOrderSide(String code) {
if ("BUY".equals(code) || "BOT".equals(code)) {
return OrderSide.BUY;
} else if ("SELL".equals(code) || "SSHORT".equals(code) || "SLD".equals(code)) {
return OrderSide.SELL;
}
return null;
}
@Override
public String getCode(OrderSide orderSide) {
switch (orderSide) {
case BUY:
return "BUY";
case SELL:
return "SELL";
}
return null;
}
@Override
public OrderType getOrderType(String code) {
if ("LMT".equals(code)) {
return OrderType.LIMIT;
} else if ("MKT".equals(code)) {
return OrderType.MARKET;
} else if ("STP".equals(code)) {
return OrderType.STOP;
}
return null;
}
@Override
public String getCode(OrderType orderType) {
switch (orderType) {
case LIMIT:
return "LMT";
case MARKET:
return "MKT";
case STOP:
return "STP";
}
return null;
}
@Override
public TimeZone getTimeZone(String code) {
if (code.equals("CTT")) { // 3-char IDs are not unique - CTT means China Taiwan Time - IB has been contacted about it
code = "America/Chicago";
}
return TimeZone.getTimeZone(code);
}
@Override
public String getCode(TimeZone timeZone) {
throw new UnsupportedOperationException();
}
}