static void HandleMarketTradeVolume(T4.API.Market market, T4.API.Market.TradeVolume poChanges) { string tickerID = G.MarketToTickerID(market); var ld = market.LastDepth; var msg = new JObject(); msg["price"] = market.ConvertTicksToRealDecimal(ld.LastTradeSpdTicks); msg["size"] = ld.LastTradeSpdVolume; msg["spread_trade"] = ld.LastTradeDueToSpread; var msgParts = new List <ZFrame>(); msgParts.Add(new ZFrame(tickerID + "\x02")); msgParts.Add(new ZFrame(" " + msg.ToString())); var msg2 = new JObject(); msg2["daily"] = new JObject(); msg2["daily"]["num_trades"] = market.LastDepth.TotalTradeCount; msg2["daily"]["volume"] = market.LastDepth.TotalTradedVolume; var msgParts2 = new List <ZFrame>(); msgParts2.Add(new ZFrame(tickerID + "\x03")); msgParts2.Add(new ZFrame(" " + msg2.ToString())); G.pubAQ.Enqueue(() => { G.sockMDPUB.SendMultipart(msgParts); G.sockMDPUB.SendMultipart(msgParts2); }); // emit volume-by-price info from poChanges? }
// TODO: what is this, something needs to be done here?? void MarketCheckSubscription(T4.API.Market poMarket, ref T4.DepthBuffer penDepthBuffer, ref T4.DepthLevels penDepthLevels) { string tickerID = G.MarketToTickerID(poMarket); L.Info("marketchecksubscription: {0}, {1}, {2}", tickerID, penDepthBuffer, penDepthLevels); }
static void HandleMarketSettlement(T4.API.Market market) { var ls = market.LastSettlement; string tickerID = G.MarketToTickerID(market); L.Info("marketsettlement: {0}, oi={1}, cleared_vol={2}, held_ticks={3}, " + "held_time={4}, held_date={5}, ticks={6}, vwap={7}", tickerID, ls.OpenInterest, ls.ClearedVolume, ls.HeldTicks, ls.HeldTime, ls.HeldTradeDate, ls.Ticks, ls.VWAP); // TODO: anything worth exposing to zmapi here? }
static void HandleMarketHighLow(T4.API.Market market) { string tickerID = G.MarketToTickerID(market); var msg = new JObject(); var daily = new JObject(); daily["high"] = market.ConvertTicksToRealDecimal(market.LastHighLow.HighTicks); daily["low"] = market.ConvertTicksToRealDecimal(market.LastHighLow.LowTicks); daily["open"] = market.ConvertTicksToRealDecimal(market.LastHighLow.OpenTicks); msg["daily"] = daily; var msgParts = new List <ZFrame>(); msgParts.Add(new ZFrame(tickerID + "\x03")); msgParts.Add(new ZFrame(" " + msg.ToString())); G.pubAQ.Enqueue(() => G.sockMDPUB.SendMultipart(msgParts)); }
static JArray OrderBookToJArray(T4.API.Market market, T4.API.Market.Depth.DepthList book) { JArray res = new JArray(); for (int i = 0; i < book.Count; i++) { var lvl = book[i]; JObject r = new JObject(); r["price"] = market.ConvertTicksToRealDecimal(lvl.Ticks); r["size"] = lvl.Volume; r["num_orders"] = lvl.NumOfOrders; r["position"] = i; res.Add(r); } return(res); }
static void HandleMarketDepthUpdate(T4.API.Market market) { string tickerID = G.MarketToTickerID(market); JObject msg = new JObject(); var ld = market.LastDepth; msg["bids"] = OrderBookToJArray(market, ld.Bids); msg["asks"] = OrderBookToJArray(market, ld.Offers); if (ld.ImpliedBids.Count > 0) { msg["implied_bids"] = OrderBookToJArray(market, ld.ImpliedBids); } if (ld.ImpliedOffers.Count > 0) { msg["implied_asks"] = OrderBookToJArray(market, ld.ImpliedOffers); } msg["timestamp"] = market.LastDepth.Time.ToUniversalTime().ToUnixTimestamp(); var msgParts = new List <ZFrame>(); msgParts.Add(new ZFrame(tickerID + "\x01")); msgParts.Add(new ZFrame(" " + msg.ToString())); G.pubAQ.Enqueue(() => G.sockMDPUB.SendMultipart(msgParts)); }
public static string MarketToTickerID(T4.API.Market market) { return("/" + market.ExchangeID + "/" + market.ContractID + "/" + market.MarketID); }
JToken ListDirectory(List <ZFrame> ident, JObject msg) { string dir = "/"; try { dir = msg["content"]["path"].ToString(); } catch (Exception) { } if (dir == "") { dir = "/"; } T4.API.MarketData md = G.client.MarketData; JArray res = new JArray(); string[] spl = dir.Split('/').Where((x) => x.Length > 0).ToArray(); if (spl.Length == 0) { foreach (T4.API.Exchange exchange in G.client.MarketData.Exchanges) { var r = new JObject(); r["name"] = exchange.ExchangeID; r["description"] = exchange.Description; res.Add(r); } } else if (spl.Length == 1) { foreach (T4.API.Contract contract in GetContracts(md.Exchanges[spl[0]])) { var r = new JObject(); r["name"] = contract.ContractID; r["description"] = contract.Description; res.Add(r); } } else if (spl.Length == 2) { var markets = GetMarkets(GetContracts(md.Exchanges[spl[0]])[spl[1]]); foreach (T4.API.Market market in markets) { var r = new JObject(); r["name"] = market.MarketID; r["ticker_id"] = G.MarketToTickerID(market); r["description"] = market.Description; res.Add(r); } } else if (spl.Length == 3) { T4.API.Market market = GetMarket(spl[0], spl[1], spl[2]); var r = new JObject(); r["name"] = market.MarketID; r["ticker_id"] = G.MarketToTickerID(market); r["description"] = market.Description; res.Add(r); } else { throw new ArgumentException("directory not found"); } res = new JArray(res.OrderBy((x) => x["name"])); return(res); }