package sample; import org.marketcetera.strategy.java.Strategy; import java.util.Map; import java.math.BigDecimal; /* $License$ */ /** * Strategy that prints a message whenever a symbol's * moving average crosses its closing price. * * @author anshul@marketcetera.com * @version $Id: MovingAverages.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ public class MovingAverages extends Strategy { /** * Executed when the strategy receives any other event. * * @param inEvent the received event. */ @Override public void onOther(Object inEvent) { //Multi Column selects from cep query result in Map events. //the map keys correspond to the column names used in the cep query. if (inEvent instanceof Map) { Map map = (Map) inEvent; Double average = (Double) map.get("average"); Double close = (Double) map.get("close"); String date = (String) map.get("date"); if(close.compareTo(average) < 0 && mWasAbove) { mWasAbove = false; warn(String.format("Close %f crossed below average %f on %s",close, average, date)); } else if(close.compareTo(average) > 0 && (!mWasAbove)) { mWasAbove = true; warn(String.format("Close %f crossed above average %f on %s",close, average, date)); } } } private boolean mWasAbove = false; }