//If basicInfoOnly flag is set to true, RecentTrades & OrderBook (top 20) won't be loaded //This can be used to reduce unnecessary memory usage private static MarketInfo ReadFromJObject(JObject o, bool basicInfoOnly = false) { MarketInfo marketInfo = new MarketInfo() { MarketID = o.Value <Int64>("marketid"), Label = o.Value <string>("label"), PrimaryCurrencyCode = o.Value <string>("primarycode"), PrimaryCurrencyName = o.Value <string>("primaryname"), SecondaryCurrencyCode = o.Value <string>("secondarycode"), SecondaryCurrencyName = o.Value <string>("secondaryname"), Volume = o.Value <decimal>("volume"), //CreationTimeUTC = TimeZoneInfo.ConvertTime(o.Value<DateTime>("created"), TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"), TimeZoneInfo.Utc) }; if (!basicInfoOnly) { marketInfo.RecentTrades = new List <Trade>(); marketInfo.OrderBook = new CryptsyOrderBook(); foreach (var t in o["recenttrades"]) { Trade trade = Trade.ReadFromJObject(t as JObject); marketInfo.RecentTrades.Add(trade); marketInfo.LastTrade = trade; } //orderbook is returnd as array of markets (with only the requested market) marketInfo.OrderBook = CryptsyOrderBook.ReadFromJObject(o, marketInfo.MarketID); } return(marketInfo); }
public async Task <Exchange.Cryptsy.CryptsyOrderBook> GetOrderBook(long marketId, CancellationToken token = default(CancellationToken)) { return(await RetryHelper.DoAsync(async() => { CryptsyResponse response = await CryptsyPublicQuery(new Dictionary <string, string> { { "method", "singleorderdata" }, { "marketid", Convert.ToString(marketId) } }, false, token); //Response is an array of markets, with only the requested market return response.Success ? CryptsyOrderBook.ReadMultipleFromJObject(response.Data as JObject)[marketId] : null; }, TimeSpan.FromMilliseconds(Constant.DefaultRetryInterval))); }
//Returns: Dictionary<MarketID, OrderBook> public async Task <Dictionary <Int64, CryptsyOrderBook> > GetAllOrderBooks(CancellationToken token = default(CancellationToken)) { return(await RetryHelper.DoAsync(async() => { CryptsyResponse response = await CryptsyPublicQuery(new Dictionary <string, string> { { "method", "orderdata" } }, false, token); //Response is an array of markets, with only the requested market return response.Success ? CryptsyOrderBook.ReadMultipleFromJObject(response.Data as JObject) : null; }, TimeSpan.FromMilliseconds(Constant.DefaultRetryInterval))); }
public static CryptsyOrderBook ReadFromJObject(JObject o, Int64 marketId) { var ob = new CryptsyOrderBook(); foreach (var order in o["sellorders"]) { ob.SellOrders.Add(CryptsyOrder.ReadFromJObject(order as JObject, marketId, CryptsyOrder.ORDER_TYPE.SELL)); } foreach (var order in o["buyorders"]) { ob.BuyOrders.Add(CryptsyOrder.ReadFromJObject(order as JObject, marketId, CryptsyOrder.ORDER_TYPE.BUY)); } return(ob); }
//Loads the full order book of Cryptsy, instead of top 20 orders public async Task <CryptsyOrderBook> GetFullOrderBook(CryptsyApi api) { OrderBook = await api.GetOrderBook(MarketID); return(OrderBook); }