import java.math.BigDecimal; import java.util.Collection; import java.util.Date; import java.util.Map; import org.marketcetera.core.position.PositionKey; import org.marketcetera.strategy.java.Strategy; import org.marketcetera.trade.Equity; import org.marketcetera.trade.Option; import org.marketcetera.trade.Currency; import org.marketcetera.trade.OptionType; /* $License$ */ /** * Tests the position-related API of the Strategy API. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: Positions.java 16460 2013-01-21 21:55:10Z colin $ * @since 2.0.0 */ public class Positions extends Strategy { /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onStart() */ @Override public void onStart() { doGetPositionAsOf(true); doGetAllPositionsAsOf(true); doGetOptionPositionAsOf(true); doGetAllOptionPositionsAsOf(true); doGetCurrencyPositionAsOf(true); doGetAllCurrencyPositionsAsOf(true); doGetOptionPositionsAsOf(true); doGetUnderlying(true); doGetOptionRoots(true); } /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onStop() */ @Override public void onStop() { doGetPositionAsOf(false); doGetAllPositionsAsOf(false); doGetOptionPositionAsOf(false); doGetAllOptionPositionsAsOf(false); doGetCurrencyPositionAsOf(false); doGetAllCurrencyPositionsAsOf(false); doGetOptionPositionsAsOf(false); doGetUnderlying(false); doGetOptionRoots(false); } /** * Executes {@link #getPositionAsOf(java.util.Date, String)}. */ private void doGetPositionAsOf(boolean duringStart) { String symbol = getProperty("symbol"); String dateString = getProperty("date"); Date date; if(dateString == null) { date = null; } else { date = new Date(Long.parseLong(dateString)); } BigDecimal result = getPositionAsOf(date, symbol); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("positionAsOf", resultString); } else { setProperty("positionAsOfDuringStop", resultString); } } /** * Executes {@link #getCurrencyPositionAsOf(java.util.Date, String)}. */ private void doGetCurrencyPositionAsOf(boolean duringStart) { String symbol = getProperty("symbol"); String dateString = getProperty("date"); Date date; if(dateString == null) { date = null; } else { date = new Date(Long.parseLong(dateString)); } BigDecimal result = getCurrencyPositionAsOf(date, symbol); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("currencyPositionAsOf", resultString); } else { setProperty("currencyPositionAsOfDuringStop", resultString); } } /** * Executes {@link #getAllPositionsAsOf(java.util.Date)}. */ private void doGetAllPositionsAsOf(boolean duringStart) { String dateString = getProperty("date"); Date date; if(dateString == null) { date = null; } else { date = new Date(Long.parseLong(dateString)); } Map<PositionKey<Equity>,BigDecimal> result = getAllPositionsAsOf(date); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("allPositionsAsOf", resultString); } else { setProperty("allPositionsAsOfDuringStop", resultString); } } /** * Executes {@link #getAllCurrencyPositionsAsOf(java.util.Date)}. */ private void doGetAllCurrencyPositionsAsOf(boolean duringStart) { String dateString = getProperty("date"); Date date; if(dateString == null) { date = null; } else { date = new Date(Long.parseLong(dateString)); } Map<PositionKey<Currency>,BigDecimal> result = getAllCurrencyPositionsAsOf(date); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("allCurrencyPositionsAsOf", resultString); } else { setProperty("allCurrencyPositionsAsOfDuringStop", resultString); } } /** * Executes {@link #getOptionPositionAsOf(java.util.Date, String, String, java.math.BigDecimal, org.marketcetera.trade.OptionType)} */ private void doGetOptionPositionAsOf(boolean duringStart) { String optionRoot = getProperty("optionRoot"); String expiry = getProperty("expiry"); String strikePriceString = getProperty("strikePrice"); BigDecimal strikePrice = null; if(strikePriceString != null) { strikePrice = new BigDecimal(strikePriceString); } String optionTypeString = getProperty("optionType"); OptionType optionType = null; if(optionTypeString != null) { optionType = OptionType.valueOf(optionTypeString); } String dateString = getProperty("date"); Date date = null; if(dateString != null) { date = new Date(Long.parseLong(dateString)); } BigDecimal result = getOptionPositionAsOf(date, optionRoot, expiry, strikePrice, optionType); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("optionPositionAsOf", resultString); } else { setProperty("optionPositionAsOfDuringStop", resultString); } } /** * Executes {@link #getAllOptionPositionsAsOf(java.util.Date)}. */ private void doGetAllOptionPositionsAsOf(boolean duringStart) { String dateString = getProperty("date"); Date date; if(dateString == null) { date = null; } else { date = new Date(Long.parseLong(dateString)); } Map<PositionKey<Option>,BigDecimal> result = getAllOptionPositionsAsOf(date); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("allOptionPositionsAsOf", resultString); } else { setProperty("allOptionPositionsAsOfDuringStop", resultString); } } /** * Executes {@link #getOptionPositionsAsOf(java.util.Date, String...)}. */ private void doGetOptionPositionsAsOf(boolean duringStart) { String optionRootsString = getProperty("optionRoots"); String[] optionRoots = null; if(optionRootsString != null && !optionRootsString.isEmpty()) { optionRoots = optionRootsString.split(","); } String dateString = getProperty("date"); Date date = null; if(dateString != null) { date = new Date(Long.parseLong(dateString)); } Map<PositionKey<Option>,BigDecimal> result; if(getParameter("nullOptionRoot") != null) { result = getOptionPositionsAsOf(date, new String[] { optionRootsString, null } ); } else if(getParameter("emptyOptionRoot") != null) { result = getOptionPositionsAsOf(date, new String[] { optionRootsString, "" } ); } else { result = getOptionPositionsAsOf(date, optionRoots); } String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("optionPositionsAsOf", resultString); } else { setProperty("optionPositionsAsOfDuringStop", resultString); } } /** * Executes {@link #getUnderlying(String)}. */ private void doGetUnderlying(boolean duringStart) { String optionRoot = getProperty("optionRoot"); String result = getUnderlying(optionRoot); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("underlying", resultString); } else { setProperty("underlyingDuringStop", resultString); } } /** * Executes {@link #getOptionRoots(String)}. */ private void doGetOptionRoots(boolean duringStart) { String underlyingSymbol = getProperty("underlyingSymbol"); Collection<String> result = getOptionRoots(underlyingSymbol); String resultString; if(result == null) { resultString = null; } else { resultString = result.toString(); } if(duringStart) { setProperty("optionRoots", resultString); } else { setProperty("optionRootsDuringStop", resultString); } } }