import java.math.BigDecimal;
import java.util.Map;
import java.util.HashMap;
import java.lang.String;
import org.marketcetera.event.AskEvent;
import org.marketcetera.event.BidEvent;
public class SimpleStrategy
extends org.marketcetera.strategy.java.Strategy
{
// the maximum width that is interesting to the user
private static final BigDecimal WIDTH_SPREAD = new BigDecimal("0.1");
private final Map lastBids = new HashMap();
private final Map lastAsks = new HashMap();
public void onBid(BidEvent inBid)
{
String symbol = inBid.getSymbol();
lastBids.put(symbol,
inBid);
process(symbol);
}
public void onAsk(AskEvent inAsk)
{
String symbol = inAsk.getSymbol();
lastAsks.put(symbol,
inAsk);
process(symbol);
}
private synchronized void process(String inSymbol)
{
AskEvent ask = (AskEvent)lastAsks.get(inSymbol);
BidEvent bid = (BidEvent)lastBids.get(inSymbol);
if(bid != null &&
ask != null) {
BigDecimal bidPrice = bid.getPrice();
BigDecimal askPrice = ask.getPrice();
String symbol = bid.getSymbol();
if(askPrice.subtract(bidPrice).compareTo(WIDTH_SPREAD) == -1) {
setProperty("STRATEGY_PROPERTY",
Long.toString(System.nanoTime()));
}
}
}
}
/*
require 'java'
#Marketcetera Classes
module Marketcetera
include_class "org.marketcetera.photon.scripting.Strategy"
end
#Quick Fix Classes
module QF
include_class "quickfix.Message"
include_class "quickfix.field.MDEntryPx"
include_class "quickfix.field.MDEntryType"
include_class "quickfix.field.Symbol"
end
# the maximum width that is interesting to the user
WIDTH_SPREAD = 0.1
# each object that is interested in receiving market data
# must be a class that implements on_message(message)
class SimpleStrategy < Marketcetera::Strategy
def on_market_data_snapshot(message)
symbol = message.getString(QF::Symbol::FIELD)
bid = BigDecimal.new(extractMD(message, QF::MDEntryType::BID, QF::MDEntryPx::FIELD).to_s)
ask = BigDecimal.new(extractMD(message, QF::MDEntryType::OFFER, QF::MDEntryPx::FIELD).to_s)
if((ask-bid) < WIDTH_SPREAD)
puts "Market below minimum width #{WIDTH_SPREAD}: #{symbol} [#{bid} - #{ask}] at "+Time.now.to_s
end
end
end
*/